Delphi 1
Edit: SetFocus в OnExit
Я пробую выполнить editbox.SetFocus и/или editbox.Clear, но
но это не дает никакого эффекта (по крайней мере видимого).
Что я делаю неправильно?
Вы посылаете команду на изменение фокуса внутри обработчика, который сам устанавливает фокус, этим вы получаете банальную рекурсию.
Я избегаю этого путем отправления собственного сообщения в обработчике OnExit, после чего в обработчике моего сообщения выставляю логический флажок, предохраняющий код от рекурсии, поскольку данный флажок контролируется в обработчике OnExit.
Следующие строки содержат необходимый код:
interface
........
const
WM_MyExitRtn = WM_USER + 1001;
........
type
TForm1 = class(TForm)
.........
private
bExitInProgress: Boolean; {предохраняемся от рекурсий сообщений}
public
Procedure WMMyExitRtn(Var msg:TMessage); message WM_MyExitRtn;
end;
.........
implementation
.........
procedure TForm1.DBEdit1Exit(Sender: TObject);
begin
If not bExitInProgress Then
PostMessage(Handle,WM_MyExitRtn,0,LongInt(Sender));
end;
.........
procedure TForm1.WMMyExitRtn(var msg:TMessage);
begin
bExitInProgress := True; { предохраняемся от рекурсивного вызова }
{здесь содержится необходимый код }
bExitInProgress := False; { сбрасываем флаг }
end;
|
[000619]