![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Собития в динамически создаваемых формах [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;