Форум: "Основная";
Текущий архив: 2004.11.21;
Скачать: [xml.tar.bz2];
ВнизСобития в динамически создаваемых формах Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.035 c