Главная страница
    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.044 c
1-1099390639
Влад
2004-11-02 13:17
2004.11.21
Кто-нибудь пользуется компонентом Async32 для Delphi


1-1100006224
eugene32
2004-11-09 16:17
2004.11.21
Gde mojno nayti infu po rabote s Excel iz Delphi?


6-1095319344
Vovik
2004-09-16 11:22
2004.11.21
Net News Transport Protocol


8-1086086905
g-l-u-k
2004-06-01 14:48
2004.11.21
DblClick в ListBox


1-1099573511
Вася
2004-11-04 16:05
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский