Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.20;
Скачать: CL | DM;

Вниз

обработчик для динамически созданного компонента   Найти похожие ветки 

 
aser   (2003-11-05 13:58) [0]

привет всем. помогите разобраться.
есть mainForm, для ее onCreate делаю процедуру, в которой создется динамически формочка с edit и button для ввода пароля.

keyForm := TForm.Create(Application);
with keyForm do
begin
BorderStyle := bsDialog;
Position := poScreenCenter;
Width := 180;
Height := 80;
Caption := "Пароль:";
end;

keyEdit := TEdit.Create(self);
with keyEdit do
begin
Parent := keyForm;
Left := 10;
Top := 10;
end;

keyBtn := TButton.Create(self);
with keyBtn do
begin
Parent := keyForm;
Width := 20;
Left := 140;
Top := 10;
Caption := "ok";
// onClick :=
end;

как правильно прицепить на onClick кнопки свою процедуру для обработки ввода ??? Если отдельно обьявляю допустим procedure test и onClick := test; говорит несовместимые типы...


 
ZEE ©   (2003-11-05 14:00) [1]

объявляй procedure test(Sender: TObject);


 
KSergey ©   (2003-11-05 14:00) [2]

http://www.delphikingdom.com/helloworld/runtime_comp.htm

И все статьи из

http://www.delphikingdom.com/asp/section.asp?ID=16

к обязательному прочтению!!!!


 
aser   (2003-11-05 15:11) [3]

Sender ведь нужен только для методов, а по идее отдельной процедуре не нужОн...
иду статьи читать...


 
KSergey ©   (2003-11-05 15:13) [4]

Процедуре вообще - не нужон.
Однако обработчик может быть только определенного вида (типа).


 
ZEE ©   (2003-11-05 15:18) [5]


> aser (05.11.03 15:11) [3]
> Sender ведь нужен только для методов, а по идее отдельной
> процедуре не нужОн...

дык OnClick - эт ж метод формы...


 
KSergey ©   (2003-11-05 15:22) [6]

[5] ZEE © (05.11.03 15:18)
дык OnClick - эт ж метод формы...


Вовсе не обязательно формы. Однако обязательно метод объекта - это да. Причем определенным образом оформленный.

Впрочем, думаю товарисч все это ужо прочитал.


 
ZEE ©   (2003-11-05 15:27) [7]


> KSergey © (05.11.03 15:22) [6]
> Вовсе не обязательно формы. Однако обязательно метод объекта
> - это да. Причем определенным образом оформленный.

да, пардон, в этом случае метод не формы, а кнопки...


 
aser   (2003-11-05 17:05) [8]


> определенным образом оформленный.


прочитал, пошло... спасибо. но ...
обьявляю как в примере в private: procedure OnClickButton(Sender:Tobject);
описую в implementation
procedure TmainForm.OnClickButton(Sender:Tobject);
это как я понимаю метод формы - работает, TButton.OnClickButton(Sender:Tobject) не работает... пожалуйста еще пару слов на тему...


 
KSergey ©   (2003-11-06 07:54) [9]

> [7] ZEE © (05.11.03 15:27)
>
> > KSergey © (05.11.03 15:22) [6]
> > Вовсе не обязательно формы. Однако обязательно метод объекта
>
> > - это да. Причем определенным образом оформленный.
>
> да, пардон, в этом случае метод не формы, а кнопки...

Да почему кнопки?!! Хоть и формы. Хоть и любого другого объекта!

> TButton.OnClickButton(Sender:Tobject) не работает... пожалуйста
> еще пару слов на тему...

Что значит не работает? Как именно и что описывается? Ничего не понимаю.

Есть правда нездоровое подозрение, что пытаетесь написать где-то в коде

TButton.OnClickButton(Sender:Tobject);
begin
..
end;

Но это же сущий бред! Вы можете опеределять только методы своих классов (в данном случае TmainForm - ваш класс (наследник TForm). Изменить же TButton вы не в силах по определению, а вот пронаследовать и что-то иземенить в наследнике - сколько угодно (я не рассматриваю всякие там хитрости).


 
Юрий Зотов ©   (2003-11-06 08:08) [10]

> aser (05.11.03 17:05) [8]

Вам нужно написать метод ФОРМЫ, который будет обрабатывать событие КНОПКИ.

Когда у любого компонента происходит любое событие, он просто вызывает прицепленный к этому событию метод (если таковой имеется). Согласно принятому в Delphi механизму вызова, это должен быть ОБЯЗАТЕЛЬНО метод ОБЪЕКТА, а не просто процедура. Причем это может быть метод ЛЮБОГО обьекта, хоть формы, хоть еще какого угодно. Но раз уж мы в своей программе все равно должны написать класс формы, на которой лежит этот компонент, то самое простое - прицепить к его событию метод этой же самой формы. Что и делает Delphi, когда мы в Инспекторе Объектов дважды щелкаем по событию - но никто не запрещает нам сделать то же самое и вручную, в нашем коде.


 
aser   (2003-11-06 14:40) [11]

вроде доходит... значит, если правильно понимаю, делается так:

1. Создаем класс формы
в разделе type:
keyForm = class(TForm)
keyBtn: tButton;
kyEdit: tEdit;
procedure OnClickButton(Sender: Tobject);
end;

2. описываем метод для типа keyFrom:
в implementation:
procedure TkeyForm.OnClickButton(Sender:Tobject);
begin
...
...
end;

Дальше создаем форму и назначаем для onClick кнопки метод формы - OnClickButton.
Но тут у меня снова упс - когда создается форма
keyForm := TkeyForm.Create(Application) - ругается:

Project mytmpl.exe raised exception class EResNotFound with message "Resource TkeyForm not found". Process stopped. Use Step or Run to continue.
хелп...
или, если достал, - бросьте рабочий пример какой-нибудь попроще (форма+кнопка)...


 
KSergey ©   (2003-11-06 17:26) [12]

Ну дык нельзя просто так вот взять и состряпать класс от TForm и создавать его экземпляр. Надо строить формы в дизайнере.
Ну т.е. можно, конечно, но тогда не забывать, что дизайнер создает еще и ресурс для формы ("комментарий" {R *.res} (ну что-то такое, возможно ошибаюсь на память) в коде формы - это не просто так загибулина).


 
aser   (2003-11-10 19:21) [13]

вроде когда директиву отключал, ту же ошибку давало.
мне уже интересно просто. развиваю вопрос... :)
стряпаю класс кнопки.

type
tkeyBtn = class(tButton)
procedure keyBtnClick(Sender: TObject);
end;

implem...

procedure TkeyBtn.keyBtnClick(Sender: TObject);
begin
ShowMessage("asfsdafas");
end;

создаю форму с кнопкой. для кнопки
OnClick := keyBtnClick;

Урра... флаг мне. работает...
А вопрос такой - как передать параметр?
Вот так
procedure keyBtnClick(Sender: TObject, var myStr: string);

OnClick := keyBtnClick(Sender, dev_key);
дает ошибку любимую
[Error] main.pas(164): Incompatible types: "TNotifyEvent" and "procedure, untyped pointer or untyped parameter"
пожалуйста, что еще не так и как надо ?


 
Reindeer Moss Eater ©   (2003-11-10 19:25) [14]

type
TMyNotifyEvent = procedure(Sender:TObject; AParam : string) of Object;


 
Думкин ©   (2003-11-10 19:35) [15]

keyForm := TForm.CreateNew(....);

Это если без ресурсов.


 
aser   (2003-11-10 20:07) [16]

2 Reindeer Moss Eater
и что ?



Страницы: 1 вся ветка

Текущий архив: 2003.11.20;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.026 c
3-65764
IGORYOK
2003-10-30 19:20
2003.11.20
Про редактирования ячеек


4-66151
SeLarin
2003-09-25 17:49
2003.11.20
WM_DEVICECHANGE


3-65787
ksan
2003-10-29 21:23
2003.11.20
серийный номер


8-66016
Puliay
2003-07-16 15:52
2003.11.20
Проигрывание мультимедиа файлов nonstop


8-66020
Hatawa
2003-07-25 09:53
2003.11.20
Проблема с CopyRect