![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
KOLEditBox : действия при потере фокуса. [Delphi, KOL, Windows]
серый мЫш © (2005-04-09 04:12:00)Как можно Edit заставить что-то выполнить перед тем, как передать фокус другому элементу приложения?
Я считал, что для этого нужно событие OnLeave, но, похоже, ошибся.
thaddy (2005-04-16 22:24:00) [1]See my example above: use the focus messages
серый мЫш (2005-04-16 22:05:00) [2]М-да... Я и забыл, что OnLeave уже в других случаях использовал и он работает :). Но проблема все равно есть, так как он работает не везде (как в моем случае). А может, это особенности операционной системы, с которыми я еще не ознакомился... В общем, проблема вот какая: есть Grid и есть control, с помощю которого осуществляется ввод данных в Grid. Так вот, этот контрол не имеет OnLeave, по крайней мере, если его пытаться создать стандартно (двойное нажатие на поле OnLeave на вкладке Events в Inspector Object).
P.S.
Я, конечно, нашел выход, но хотелось бы знать правильное решение. Так как control в моем случае невидимый, то я дожидался, пока он исчезнет и проводил нужные операции. Такой способ может не всегда пригодится, поэтому я и спросил здесь: как правильно?
Владимир Кладов (2005-04-09 22:15:00) [3]I improved it and on first 3 tests it is faster then FastMM from the pack about 30% even without translating code to asm. But on 4th I get Out of memory, and on some other it loose sometimes 7 times (700%). So I decided stop this work for some time and return to collapse project. At least, FastMM3 seems working not bad. Thanks for a link.
thaddy (2005-04-09 17:59:00) [4]Oversight... Sorry Vladimir! Your new MM improved already?
thaddy (2005-04-09 17:59:00) [5]Oversight... Sorry Vladimir! Your new MM improved already?
Владимир Кладов (2005-04-09 13:19:00) [6]вообще то OnLeave есть и он работает в KOL.
thaddy (2005-04-09 08:53:00) [7]You can trap WM_KILLFOCUS in an onmessage handler:
procedure NewForm1( var Result: PForm1; AParent: PControl );
begin
New(Result,Create);
with Result^ do
begin
Form:= NewForm(AParent,'KOLForm').SetSize(600,400).centeronparent.Tabulate;
Applet:=Form;
Edit:=Neweditbox(form,[]);
Edit1:=Neweditbox(form,[]).placedown;
Edit.OnMessage:=DoMessage;
Form.Add2AutoFree(Result);
end;
end;
function TForm1.DoMessage(var Msg:TMsg;var Rslt:integer):Boolean;
begin
Result:=false;
if msg.message = WM_KILLFOCUS then
Edit.Caption := 'LostFocus' else
if msg.message = WM_SETFOCUS then
Edit.Caption:='HasFocus';
end;
thaddy (2005-04-09 08:52:00) [8]You can trap WM_KILLFOCUS in an onmessage handler:
procedure NewForm1( var Result: PForm1; AParent: PControl );
begin
New(Result,Create);
with Result^ do
begin
Form:= NewForm(AParent,'KOLForm').SetSize(600,400).centeronparent.Tabulate;
Applet:=Form;
Edit:=Neweditbox(form,[]);
Edit1:=Neweditbox(form,[]).placedown;
Edit.OnMessage:=DoMessage;
Form.Add2AutoFree(Result);
end;
end;
function TForm1.DoMessage(var Msg:TMsg;var Rslt:integer):Boolean;
begin
Result:=false;
if msg.message = WM_KILLFOCUS then
Edit.Caption := 'LostFocus' else
if msg.message = WM_SETFOCUS then
Edit.Caption:='HasFocus';
end;