EControl Ltd. Forum Index EControl Ltd.
VCL libraries and software support forum
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Events

 
Post new topic   Reply to topic    EControl Ltd. Forum Index -> EControl Form Designer
View previous topic :: View next topic  
Author Message
grikon



Joined: 07 Sep 2006
Posts: 2

PostPosted: Thu Sep 07, 2006 4:52 pm    Post subject: Events Reply with quote

Подскажите, как назначить обработчик и обрабатывать события во время исполнения программы. Например, я положил Button на форму, и хочу обработать ее OnClick. Как это проще всего сделать?
В папке DEMO имеется подпапка <dsn_events>, как я понял, там используется FastScript? Однако законченного проекта я там не обнаружил. Просьба выложить небольшой законченный пример с обработчиком.
Back to top
View user's profile Send private message
econtrol
Site Admin


Joined: 09 Jun 2006
Posts: 202

PostPosted: Sat Sep 09, 2006 12:20 pm    Post subject: Reply with quote

Данная задача решается путем использования специально редактора процедурных свойств (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
View user's profile Send private message Send e-mail
grikon



Joined: 07 Sep 2006
Posts: 2

PostPosted: Sat Sep 09, 2006 4:19 pm    Post subject: Re Reply with quote

Благодарю, какой-то свет появился в конце тоннеля.
Однако, при попытке подключить модуль sc_methProc.pas к проекту ругается транслятор на
Code:
 dsn: IzDesigner;

В Help про IzDesigner практически нет информации, такое впечатление, что этот тип устарел и больше не поддерживается ?

И еще вопрос - когда примерно можно ожидать версияю 1.40 ?
Back to top
View user's profile Send private message
econtrol
Site Admin


Joined: 09 Jun 2006
Posts: 202

PostPosted: Mon Sep 11, 2006 9:52 am    Post subject: Reply with quote

Пожалуйста, вышлите запрос на support@econtrol.ru для получения обновленной версии файла sc_methProc.pas.

Версия 1.40 будет в этом году.

Михаил.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic    EControl Ltd. Forum Index -> EControl Form Designer All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group