Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.21;
Скачать: CL | DM;

Вниз

Собития в динамически создаваемых формах   Найти похожие ветки 

 
dolphin   (2004-11-02 22:17) [0]

Есть прога которая в runtime созает  n-ое количество форм
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
myform:TForm;
begin
 myform:=TForm.Create(Self);
 myform.Show;

end;
и мне нужно чтобы новая форма имела кнопку и при нажатии кнопки
выполнялось какое то событие (ну close этой же формы например)

ЗАРАНИЕ СПАСИБО


 
Defunct ©   (2004-11-03 01:49) [1]

Procedure TForm1.ActionX;
Begin
 If Sender is TControl Then
 With Sender as TControl Do Parent.Free;
End;

procedure TForm1.Button1Click(Sender: TObject);
var Form : TForm;
begin
 Form := TForm.Create( nil );
 With Form Do
 Try
   BoundsRect := Self.BoundsRect;
   Left := Left + 10;
   Top := Top + 10;

   With TButton.Create( Form ) Do
   Try
     BoundsRect := Button1.BoundsRect;
     Parent := Form;
     OnClick := ActionX;
     Caption := "Close"
   Except
   End;

   Show;
 Except
 End;
end;


 
Defunct ©   (2004-11-03 01:51) [2]

а вот TForm1 для примера [1]:

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 public
   procedure ActionX(Sender : TObject);
 end;


 
dolphin   (2004-11-03 02:19) [3]

Огромный респект  to Defunct  :)


 
Defunct ©   (2004-11-03 02:28) [4]

Procedure TForm1.ActionX;
Begin
 if Sender is TControl then
 with Sender as TControl do
 try
   if Parent is TForm then
     (Parent as TForm).Close
 except
 end;
End;


IMHO вот так правильней будет


 
Кто---то ©   (2004-11-03 03:55) [5]


> Defunct ©   (03.11.04 01:51) [2]
> а вот TForm1 для примера [1]:
>
> type
>  TForm1 = class(TForm)
>    Button1: TButton;
>    procedure Button1Click(Sender: TObject);
>  public
>    procedure ActionX(Sender : TObject);
>  end;


А без Форм слабо ? Почему процедуру ActionX обязательно надо в форм запихнуть ? Почему без этого нельзя ?

Чтобы не Procedure TForm1.ActionX;
а Procedure ActionX;


 
Defunct ©   (2004-11-03 04:57) [6]

> А без Форм слабо ?

Можно и без форм.
TNotifyEvent - это метод, соответственно процедура ActionX типа TNotifyEvent должна быть объявлена внутри любого класса, форма совсем не обязательна.

> Почему процедуру ActionX обязательно надо в форм запихнуть ?
Быстрее всего? Не надо новый класс описывать.

> Почему без этого нельзя ?
Можно и без этого. Только тогда будет больше лишних телодвижений, особенно если много методов надо описать.

Procedure ActionY( Self, Sender : TObject);
begin
 If Sender is TControl Then
    With Sender as TControl Do
      (Parent as TForm).Close
End;

procedure TForm1.Button1Click(Sender: TObject);
var
 Form : TForm;
 M    : TMethod; // лишнее телодвижение
begin
 Form := TForm.Create( nil );
 with Form do
 try
   BoundsRect := Self.BoundsRect;
   Left := Left + 10;
   Top := Top + 10;

   with TButton.Create( Form ) do
   try
     BoundsRect := Button1.BoundsRect;
     Parent := Form;
     M.Code := @ActionY; // тоже лишнее
     OnClick := TNotifyEvent(M); // и это тоже
     Caption := "Close"
   except
   end;

   Show
 except
 end
end;


 
Кто---то ©   (2004-11-03 05:07) [7]


> M.Code

А что это за код такой ?


 
Defunct ©   (2004-11-03 05:15) [8]

> А что это за код такой ?

нажми F1 на слове TMethod


 
Кто---то ©   (2004-11-03 05:19) [9]


> Defunct ©   (03.11.04 05:15) [8]
> > А что это за код такой ?
>
> нажми F1 на слове TMethod


Сейчас Дельфи не под рукой.


 
Defunct ©   (2004-11-03 05:21) [10]

TMethod = record
   Code, Data: Pointer;
 end;

Description

TMethod stores the Code and Data pointers for a method.

This type can be used in a type cast of a method pointer to access the code and data parts of the method pointer.


 
Кто---то ©   (2004-11-04 01:20) [11]


> Defunct ©   (03.11.04 05:21) [10]


Спасибо за помощь ! Тут редко кто чего дельное советует.



Страницы: 1 вся ветка

Текущий архив: 2004.11.21;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.13 c
14-1099556780
Lenor
2004-11-04 11:26
2004.11.21
daemon


14-1099826959
Ленивый студент
2004-11-07 14:29
2004.11.21
вопрос по си Билдеру


1-1099465145
Layner
2004-11-03 09:59
2004.11.21
Как секции в TMainMenu программно отобразить в TPopupMenu?


14-1099233793
DRK
2004-10-31 17:43
2004.11.21
Разгон Power Color Radeon 9600


1-1099488300
kseno
2004-11-03 16:25
2004.11.21
Как безболезненно удалить из программы иконку?