Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Собития в динамически создаваемых формах [D7, WinXP]


dolphin ©   (2004-11-02 22:17:00) 

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

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

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


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


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


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


Defunct   (2004-11-03 05:21:00) [2]

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-03 05:19:00) [3]


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


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


Defunct   (2004-11-03 05:15:00) [4]

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

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


Кто---то   (2004-11-03 05:07:00) [5]


> M.Code

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


Defunct   (2004-11-03 04:57:00) [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 03:55:00) [7]


> 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 02:28:00) [8]

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 вот так правильней будет


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

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


Defunct   (2004-11-03 01:51:00) [10]

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

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


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

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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо