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