Приложение Delphi теряет фокус - PullRequest
2 голосов
/ 14 апреля 2011

Я использую эту шевронную панель инструментов в своем приложении, и она прекрасно работает;однако, когда я щелкаю по любому пункту в меню, мое приложение теряет фокус.Даже если я наведу курсор мыши на угол формы, курсор не изменится на ручку изменения размера.Мне нужно нажать на форму или приложение, чтобы восстановить фокус, что мне не хотелось бы делать.Вызов MainForm.Setfocus после вызова пункта меню не помогает.Я хотел бы, чтобы фокус автоматически фокусировался на моем приложении, чтобы моим пользователям не нужно было нажимать на форму, прежде чем делать то, что им нужно.

Любая идея о том, как восстановить фокус на форме и/ или приложение?

Спасибо

1 Ответ

0 голосов
/ 14 апреля 2011

Перехватить сообщение WM_KillFocus.

псевдокод
без Delphi на этом терминале, заполнит пробелы, когда вернется домой.

type
  TForm1 = class(TForm)
  ...
  protected
    procedure WMKillFocus(message: TWM_Killfocus); message WM_KillFocus;
  ...

procedure TForm1.WMKillFocus(message: TWM_Killfocus);
begin
  //do stuff to prevent the focus from shifting.
  //do *NOT* call SetFocus, it confuses Windows/Delphi and leads to suffering
  //Call PostMessage or handle the KillFocus message
  //From MSDN
  //While processing this message, do not make any function calls that display
  //or activate a window. This causes the thread to yield control and can
  //cause the application to stop responding to messages. For more information 
  //see Message Deadlocks. 
  //Also don't use SendMessage, PostMessage is OK though.        

  //Suggestion:
  PostMessage(Self.handle, WM_SETFOCUS, 0, 0); 
end;
...