Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
4-1097348954
Sphinx
2004-10-09 23:09
2004.11.21
Таймер


4-1097258912
Дубинин Алексей
2004-10-08 22:08
2004.11.21
Поиск всех каталогов по выбранной маске, Рекурсия.


1-1099980477
leonidus
2004-11-09 09:07
2004.11.21
Как распарсить swf?


14-1099480482
AlexR
2004-11-03 14:14
2004.11.21
Работа с dll.


4-1097307966
volser
2004-10-09 11:46
2004.11.21
Курсор мишки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский