View previous topic :: View next topic |
Author |
Message |
grikon
Joined: 07 Sep 2006 Posts: 2
|
Posted: Thu Sep 07, 2006 4:52 pm Post subject: Events |
|
|
Подскажите, как назначить обработчик и обрабатывать события во время исполнения программы. Например, я положил Button на форму, и хочу обработать ее OnClick. Как это проще всего сделать?
В папке DEMO имеется подпапка <dsn_events>, как я понял, там используется FastScript? Однако законченного проекта я там не обнаружил. Просьба выложить небольшой законченный пример с обработчиком. |
|
Back to top |
|
|
econtrol Site Admin
Joined: 09 Jun 2006 Posts: 202
|
Posted: Sat Sep 09, 2006 12:20 pm Post subject: |
|
|
Данная задача решается путем использования специально редактора процедурных свойств (sc_methProp.pas) и обработчиков TzFormDesigner.OnGetScriptProc, TzFormDesigner.OnSetScriptProc.
Code: | // Возвращаем имя процедуры скрипта связанной с заданым свойством
// FEvents: TStringList - содержит строки следующего вида:
// <ObjectName>.<PropertyName>=<ScriptProcedure>, например
// Button1.OnClick=Button1Click
procedure TForm1.FormDesignerGetScriptProc(Sender, Instance: TObject;
pInfo: PPropInfo; var ProcName: String);
begin
ProcName := '';
if Instance is TComponent then
if {TzFormDesigner(Sender).Root}Self = Instance then
ProcName := FEvents.Values[PInfo^.Name]
else
ProcName := FEvents.Values[(Instance as TComponent).Name + '.' + PInfo^.Name];
end; |
Когда пользователь создает метод (путем ввода его имени или двойном щелчке мышью в инспекторе), то редактор свойств вызывает TzFormDesigner.OnSetScriptProc.
Типовое решение:
Code: | procedure TForm1.FormDesignerSetScriptProc(Sender, Instance: TObject;
pInfo: PPropInfo; const EventProc: String);
var idx: integer;
pn: string;
begin
if Instance is TComponent then
begin
if Self = Instance then
pn := PInfo^.Name
else
pn := (Instance as TComponent).Name + '.' + PInfo^.Name;
idx := FEvents.IndexOfName(pn);
if idx <> -1 then
FEvents.Delete(idx); // Удаляем, если идет переименование
if EventProc <> '' then
FEvents.Add(pn + '=' + EventProc); // создаем ассоциацию
end;
end; |
Демонстрационные примеры будут в версии 1.40 |
|
Back to top |
|
|
grikon
Joined: 07 Sep 2006 Posts: 2
|
Posted: Sat Sep 09, 2006 4:19 pm Post subject: Re |
|
|
Благодарю, какой-то свет появился в конце тоннеля.
Однако, при попытке подключить модуль sc_methProc.pas к проекту ругается транслятор на
В Help про IzDesigner практически нет информации, такое впечатление, что этот тип устарел и больше не поддерживается ?
И еще вопрос - когда примерно можно ожидать версияю 1.40 ? |
|
Back to top |
|
|
econtrol Site Admin
Joined: 09 Jun 2006 Posts: 202
|
Posted: Mon Sep 11, 2006 9:52 am Post subject: |
|
|
Пожалуйста, вышлите запрос на support@econtrol.ru для получения обновленной версии файла sc_methProc.pas.
Версия 1.40 будет в этом году.
Михаил. |
|
Back to top |
|
|
|