Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];

Вниз

Работа с событиями в KOLEcmListEdit   Найти похожие ветки 

 
hunn   (2005-07-19 09:17) [0]

Вопрос по KOLEcmListEdit. TOnEditChar неверно работает с событиями. Компилируется без ошибок, но когда начинаеш работу переменная Key  пуста. Привожу кусок кода:

program Project1;
{$APPTYPE GUI}
uses
KOLEcmListEdit,Kol;
var frmMain,LE:pControl;
x,i:integer;

procedure ed(Sender: PControl; var Key: Char;
 Shift: Cardinal);
begin
msgok(int2str(i)+key);
i:=i+1;
end;

begin
i:=1;
 Applet := NewApplet("KOL Procedure");
  frmMain := NewForm(nil,"KOL Procedure").SetPosition( 265, 203 ).SetClientSize( 100, 100 );
 LE := NewEcmListEdit( frmMain, lvsDetail, [lvoHideSel, lvoGridLines, lvoRowSelect, lvoOwnerDrawFixed], nil, nil, nil ).SetLVItemHeight(20).SetAlign ( caTop ).SetSize( 70, 70 );
  LE.LVColAdd( "Sum", taLeft, 95);
    for x := 0 to 15 do begin// делаю пустые записи чтобы их потом редактировать
     LE.LVAdd("", 0, [], 0, 0, 0);
  end;
  PEcmListEdit(LE.CustomObj).OnEditChar  :=TOnEditChar(makemethod(nil,@ed));
  Run(frmMain);

end.

Насколько я понимаю событие установлено на EcmListEdit, а перехват события идет по EditBox. Как решить проблему?


 
ECM ©   (2005-07-19 12:02) [1]

Навскидку...неверно используется событие OnEditChar...
Это же легко проверить самостоятельно - просто внимательно присмотритесь к объявлению TOnEditChar:

[KolEcmListEdit.pas]
...
 TOnEditChar     = procedure (Sender: PControl; ACol, ARow: Integer; var Key: Char; Shift: Cardinal) of object;
...
Поэтому процедура Ed (Остальное не присматривался...) должна выглядеть так:

procedure ed(Sender: PControl; ACol, ARow: Integer; var Key: Char; Shift: Cardinal);
begin
...


 
ECM ©   (2005-07-19 12:09) [2]

З.Ы.
Насколько я понимаю событие установлено на EcmListEdit, а перехват события идет по EditBox. Как решить проблему?

Проблемы нет - она уже решена загляните в KOLEcmListEdit.pas...:)


 
hunn   (2005-07-20 09:40) [3]

все равно не могу заставить корректно работать. Компилируется все нормально, но когда запускаю и работаю с клавиатурой выставляет сообщение: Runtime error 216 at ...


 
hunn   (2005-07-22 07:00) [4]

АУ!
Ну может кто рабочим примером поделиться, но только на чистом KOL?


 
_ecm_   (2005-07-22 12:46) [5]

В понедельник гляну... щас нет времени...


 
ECM ©   (2005-07-23 12:47) [6]

2Hunn: В EcmListEdit ошибок нет...Вы неправильно описывали обработчики для событий...Советую внимательнее почитать FAQ.
Например тут http://bonanzas.rinet.ru/r_faq.htm#Q18
...
Как правильно назначить в качестве обработчика события (например, OnMessage) процедуру, не являющуюся методом объекта?
MainForm.OnMessage := TOnMessage(MakeMethod(nil,@OnHotKey)); где процедура OnHotKey описана как: function OnHotKey( var Msg: TMsg; var Rslt: Integer ): Boolean; вызывает ошибку во время исполнения.


Процедура-метод (функция-метод) объекта (класса) отличается от регулярной процедуры (функции) только наличием скрытого первого параметра, представляющего собой переменную Self объекта. Практически все события описаны как procedure(...) of object или function( ... ):... of object, т.е. обработчиком должен быть метод объекта (класса). Если требуется использовать регулярную процедуру или функцию, недостающий параметр должен быть описан явно:

function OnHotKey( Dummy_Self: PObj;
          var Msg: TMsg; var Rslt: Integer ): Boolean;
В этом случае на месте первого параметра правильно передается тот объект, который был задан первым параметром функции MakeMethod (в выше приведенном коде это nil). Если же этот параметр пропущен, то nil передается на месте параметра Msg, из-за чего и происходит ошибка во время исполнения.


Вот как действительно должен выглядеть пример из [1]:

program TestEcmListEditWoMCK;

uses KOLEcmListEdit,Kol;

var
frmMain,LE: pControl;
x,i: Integer;

procedure ca(Dummy_Self: PObj; Sender: PControl; ACol: Integer;
 var ColOption: TEditorOptions);
begin
 ColOption.Options := [eoNumber];
end;

procedure ed(Dummy_Self: PObj; Sender: PControl; ACol, ARow: Integer; var Key: Char; Shift: Cardinal);
begin
 msgok(int2str(i)+":"+key);
 i:=i+1;
end;

begin
 Applet := NewApplet("KOL Procedure");
  frmMain := NewForm(nil,"KOL Procedure").SetPosition( 265, 203 ).SetClientSize( 400, 400 );
  LE := NewEcmListEdit( frmMain, lvsDetail, [lvoHideSel, lvoGridLines, lvoRowSelect, lvoOwnerDrawFixed], nil, nil, nil ).SetLVItemHeight(20).SetAlign ( caClient ).SetSize( 70, 70 );
  LE.LVColAdd( "Sum", taLeft, 120);
  for x := 0 to 15 do LE.LVAdd("", 0, [], 0, 0, 0);
  PEcmListEdit(LE.CustomObj).OnColAdjust :=TOnColAdjust(makemethod(nil,@ca));
  PEcmListEdit(LE.CustomObj).OnEditChar  :=TOnEditChar(makemethod(frmMain,@ed));
  Run(frmMain);
end.


 
hunn   (2005-07-25 07:24) [7]

tnx!



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

Форум: "KOL";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.014 c
2-1141394071
n_sch
2006-03-03 16:54
2006.03.19
Помогите разобраться с DBRichEdit !!!


1-1139728566
Vacek
2006-02-12 10:16
2006.03.19
Мгновенный доступ к node, компонента ttreeview.


2-1141445966
anubis
2006-03-04 07:19
2006.03.19
Дайте пожалуста свойства компомента TTable


15-1140601946
Compton's G
2006-02-22 12:52
2006.03.19
Сетевой эмулятор


15-1141104682
PARUS
2006-02-28 08:31
2006.03.19
Место





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский