Einzelnen Beitrag anzeigen

Partikelecho

Registriert seit: 2. Dez 2011
14 Beiträge
 
Delphi 6 Enterprise
 
#1

Nach BringToFront wieder über Tasten navigieren?

  Alt 13. Apr 2012, 11:32
Hallo liebe DPler,
ich schreibe gerade eine kleine Anwendung für einen Freund in Lazarus (0.9.30.4). Im Prinzip werden nur ein paar Werte in eine Liste gepackt (per Button) und abhängig von den bisherigen Werten verschiedene Möglichkeiten in Betracht gezogen. Das tut auch nichts zur Sache.

Wichtig bei dieser Anwendung wäre allerdings, dass es sich nach dem "Deaktivieren" durch Klick auf ein anderes Fenster wieder in den Vordergrund bringt und auch wieder per Tastatur steuerbar ist.

Folgende Tastatureingaben werden über das KeyDown-Event des Hauptformulars abgefangen und rufen die OnClick-Prozeduren von 4 Buttons auf.
Delphi-Quellcode:
procedure Tfrm_main.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
  37: // Aktion für VK_LEFT;
  40: // Aktion für VK_DOWN;
  39: // Aktion für VK_RIGHT;
  38: // Aktion für VK_UP;
  end;
end;
Das Formular ist momentan aus BorderStyle bsDialog und FormStyle fsNormal eingestellt und wird wie folgt im OnShow-Event geTOPMOSTet:
Delphi-Quellcode:
procedure Tfrm_main.FormShow(Sender: TObject);
begin
  SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
end;
Da das aber allein nicht funktioniert hat, habe bringe ich das Fenster mit Hilfe eines Timers immer wieder in den Vordergrund. Das ist die Stelle die mir ganz und garnicht gefällt und sicher nicht zum guten Stil gehört.
Im OnTimer-Event wird also immer wieder BringToFront ausgelöst.
Delphi-Quellcode:
procedure Tfrm_main.Timer1Timer(Sender: TObject);
begin
  if GetForeGroundWindow <> Handle then
  begin
    frm_main.BringToFront;
  end;
end;
Nochmal das Ziel: Dieses kleine Formular soll auch nach Aktion in einem anderen Fenster (ist soweit ich weiß kein Spiel und auch nicht maximiert/Vollbild, ...) wieder durch die Pfeiltasten navigierbar sein.
Soweit ich weiß, lassen sich Anwendungen nicht mehr den Focus stehlen. Damit dürfte es dann nicht gehen.
  Mit Zitat antworten Zitat