Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
danek130995
24 / 24 / 1
Регистрация: 25.05.2014
Сообщений: 994
1

Динамическое создание формы, по нажатию в области которой создается кнопка

03.10.2014, 16:17. Просмотров 1153. Ответов 5
Метки нет (Все метки)

Ребят, я тут запутался немного. Посмотрите код, пожалуйста. Мне нужно написать приложение, где на форме есть кнопка «создать форму», которая динамически создает очередную форму. При щелчке на любой из созданных форм создается кнопка именно на этой форме. Обработчик события OnMouseDown (нажатие кнопки мыши) я буду использовать вместо события OnClick (щелчок мыши), так как обработчику первого события передаются в качестве параметров координаты точки нажатия кнопки мыши. Мне эта информация нужна, чтобы создать кнопку в данном месте. Сейчас у меня по нажатию кнопки на форме создается динамически форма, я тыкаю в области этой формы, и новая кнопка создается на 1 форме. Как сделать обработчик события, с помощью self, чтобы он создавал кнопку на вновь созданной форме? Короче, вот код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
 
 
 
    procedure Button2MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
 
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
 
 
 
procedure TForm1.Button2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var Form: TForm;   Btn: TButton;
begin
  Form:=TForm.Create(self);
  Form.Parent:=self;
  Form.Left:=250;
  Form.onMouseDown:=Form1.onMouseDown;
  {Btn:=TButton.Create(Form);
  Btn.Parent:=Form;
  Btn.caption:='Создать форму';
  Btn.Width:=Btn.width+50;
  Btn.Height:=37;
  Btn.left:=x; Btn.Top:=y;  }
 
  Form.show
end;
 
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var Btn:TButton;
begin
Btn:=TButton.Create(self);
Btn.Parent:=self;
Btn.left:=x; Btn.Top:=y;
Btn.Width:=Btn.width+50;
Btn.Caption:=Format('находится в...',[x,y]);
 
 
end;
 
 
 
 
 
 
{$R *.lfm}
 
end.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.10.2014, 16:17
Ответы с готовыми решениями:

Динамическое создание формы
вот например мне надо динамически создать новою TForm1 и обязательно присвоить...

Динамическое создание формы
Добрый день. Подскажите пожалуйста, можно-ли в Delphi динамически создавать...

Динамическое создание формы
Здравствуйте, помогите написать приложение, где на форме есть кнопка «создать...

Динамическое создание формы
Всем привет, есть малый вопрос насчет передачи параметров.Пишу уже свои...

Динамическое создание формы
Всем привет. Возникла проблема при динамическом создании новой формы: На Form1...

5
mss
2635 / 2259 / 277
Регистрация: 24.12.2010
Сообщений: 13,725
03.10.2014, 17:02 2
В теле TForm1.FormMouseDown инициатором события является не Self, а Sender

Приведи его к типу TForm и используй в кач-ве Owner'а и Parent'а для создаваемой кнопки
0
danek130995
24 / 24 / 1
Регистрация: 25.05.2014
Сообщений: 994
03.10.2014, 17:08  [ТС] 3
Извините, а как привести его к типу Tform и инициатором сделать self?
0
mss
2635 / 2259 / 277
Регистрация: 24.12.2010
Сообщений: 13,725
03.10.2014, 17:17 4
Цитата Сообщение от danek130995 Посмотреть сообщение
а как привести его к типу Tform
TForm(Sender)

Цитата Сообщение от danek130995 Посмотреть сообщение
и инициатором сделать self
Почему Self-то ?
Self - это форма TForm1, поскольку FormMouseDown ее метод ..

А Sender - это форма, на которой ты кликнул мышью, т.е. TForm, и на которой собственно и требуется при этом создать кнопку

В данном контексте Self и Sender - это два разных объекта, хоть и имеющих общий класс-предок
0
danek130995
24 / 24 / 1
Регистрация: 25.05.2014
Сообщений: 994
03.10.2014, 17:30  [ТС] 5
а где именно это нужно прописать? TForm(Sender). Я в наследованиях новичок, можете показать на примере кода пожалуйста, что нужно сделать?
0
mss
2635 / 2259 / 277
Регистрация: 24.12.2010
Сообщений: 13,725
03.10.2014, 23:03 6
Цитата Сообщение от danek130995 Посмотреть сообщение
где именно это нужно прописать? TForm(Sender)
Вместо Self
0
03.10.2014, 23:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.10.2014, 23:03

Динамическое создание формы и компонентов
Подскажите как динамически создать форму с Edit и Button и при нажатии на...

Динамическое создание формы и компонентов
Всем доброго времени суток. Вопрос про динамическое создание форм очень много...

Динамическое создание формы + проверка при создании
Здравствуйте. Есть форма, которая создается динамически. mot :=...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru