Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Komponente darf keinen Focus erhalten (https://www.delphipraxis.net/44907-komponente-darf-keinen-focus-erhalten.html)

prov171 26. Apr 2005 16:32


Komponente darf keinen Focus erhalten
 
Hallo, ich habe schon hier im Forum gesucht, aber nicht wirklich etwas gefunden, das funktioniert hat.

Ich habe auf meinem Formular mehrere Edit Felder in die etwas eingegeben werden soll.
Über einen HotKey habe ich es realisiert, in einer anderen Komponente, die mittels eines
Frames eingebunden ist z.B. bei einer tif Datei eine Seite weiter zu blättern. Nur verliert
das Edit Feld dabei den Focus, soll es aber nicht.
Ich habe schon bei der Komponente als auch dem Frame die Eigenschaft TabStop auf False gestellt,
aber das hat nicht geholfen. Sobald ich den HotKey auslöse verliert das aktuell focusierte Edit Feld
den Focus.
Falls das wichtig sein sollte, der HotKey ist Strg + Pfeil Rechts bzw. Links

Ich hoffe einer von euch hat eine Idee, ich bin nämlich so langsam am verzweifeln.

Union 26. Apr 2005 17:05

Re: Komponente darf keinen Focus erhalten
 
Wie hast Du denn den Hotkey realisiert? Vielleicht setzt die Komponente auch selber den Focus. Bei folgendem Beispiel (ein Edit und ein Memo zum Testen) verliert das Edit jedenfalls nicht den Focus, das Memo scrollt ordnungsgemaess:
Delphi-Quellcode:
procedure TFormHotKeyTest.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   if shift = [ssCtrl] then
   begin
      case key of
      VK_LEFT :
         begin
            MemoScroll.Perform(WM_KEYDOWN, VK_HOME,0);
            key := 0;
         end;
      VK_RIGHT :
         begin
            MemoScroll.Perform(WM_KEYDOWN, VK_END,0);
            key := 0;
         end;
      end;
   end;
end;

prov171 26. Apr 2005 17:21

Re: Komponente darf keinen Focus erhalten
 
Ich habe die HotKeys als Systemweite HotKeys deklariert, da die Komponente sonst
wenn ich die Pfeiltaste drücke die seite auch in die Richtung verschiebt.

Wenn ich die Viewer Komponente deaktiviere (Enabled := false) funktioniert es, aber ich
kann dann z.B. nicht mehr auf den Zoom der Komponente zugreifen.
Ich habe auch schon probiert die Komponente zu disabeln, die die Funktion
nächste Seite aufrufen auszuführen und die Komponente danach wieder zu enablen.
Aber das funktioniert auch nicht, da die Komponente dann schon wieder aktiviert ist
wenn sie noch die Seite weiter springt.

Union 26. Apr 2005 17:29

Re: Komponente darf keinen Focus erhalten
 
Zitat:

Zitat von prov171
Ich habe die HotKeys als Systemweite HotKeys deklariert, da die Komponente sonst
wenn ich die Pfeiltaste drücke die seite auch in die Richtung verschiebt.

Wenn ich die Viewer Komponente deaktiviere (Enabled := false) funktioniert es, aber ich
kann dann z.B. nicht mehr auf den Zoom der Komponente zugreifen.
Ich habe auch schon probiert die Komponente zu disabeln, die die Funktion
nächste Seite aufrufen auszuführen und die Komponente danach wieder zu enablen.
Aber das funktioniert auch nicht, da die Komponente dann schon wieder aktiviert ist
wenn sie noch die Seite weiter springt.

Und was ist wenn Du das Übel ganz gemein an der Wurzel packst und nach dem Aufruf der Scrollfunktion mit:
Delphi-Quellcode:
TWinControl(Sender).SetFocus;
Wieder das ürpsprüngliche Edit selektierst?

prov171 26. Apr 2005 17:51

Re: Komponente darf keinen Focus erhalten
 
Delphi-Quellcode:
procedure TfrmMain.Set_Global_Hotkeys(var Message: TMessage);
var notify:string;
begin
   notify:='';
   if Message.Msg=WM_Hotkey Then begin
     SetTimer(Self.Handle,Message.WParam,Hotkeys[Message.WParam-$BFF0].Interval*1000,nil);
     SendMessage(GetActiveWindow,WM_KEYDOWN,Hotkeys[Message.WParam-$BFF0].Modify,Hotkeys[Message.WParam-$BFF0].Key);
     SendMessage(GetActiveWindow,WM_KEYUP,Hotkeys[Message.WParam-$BFF0].Modify,Hotkeys[Message.WParam-$BFF0].Key);
     notify:='';
   end
   else if Message.Msg=WM_TIMER Then Begin
    if HotKeys[Message.WParam-$BFF0].Notify<>'' Then
     begin
      notify:='';
      notify:=HotKeys[Message.WParam-$BFF0].Notify;
      end;
    KillTimer(Self.Handle,Message.WParam);
   end
   else WndProc(Message);

   if sametext(notify,'left') then
      viewer1.Previous.Execute;
   if sametext(notify,'right') then
      viewer1.Next.execute;
   notify:='';
end;
Ich habe die HotKeys wie gesagt systemweit erzeugt, damit der Viewer nicht auch die Position es Bildes verändert.
und daher habe ich keinen sender. und die methode nächste Seite ist in dem Frame deklariert und wird über eine
ActionList angesteuert, die auch in dem Frame deklariert ist.
aus diesen gründen bekomme ich auch keinen sender, da ich ja nicht das keydown ereignis benutze.

deine lösung wäre super, genau das, was ich wollte. es soll einfach das edit feld focusiert bleiben.

SirThornberry 26. Apr 2005 18:49

Re: Komponente darf keinen Focus erhalten
 
dann wirst du wohl den Viewer abändern (von der komponente ableiten und die focusmessage überschreiben) müssen denn da wird irgendwo drin stehen das er beim mouseown etc. sich den focus aneignet.

Hansa 26. Apr 2005 19:38

Re: Komponente darf keinen Focus erhalten
 
Was ist das für eine Komponente ? Was soll die genau machen ? Inwiefern kommen da Frames ins Spiel ? Fragen über Fragen... 8)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz