![]() |
Button überspringt OnKeyDown bei VK_Up / VK_Down
Hallöchen,
ich musste gerade verwundert feststellen, dass ich meine Buttons zwar durchlaufen kann mit VK_Up und VK_Down, aber wenn ich möchte, dass bei OnKeyDown der Knopf gedrückt werden soll, geht das nicht. Um genauer zu sein: Ich habe eine Liste von 5 Buttons in der Vertikalen. Wenn ich nun den obersten Knopf gedrückt habe, möchte ich, dass, wenn ich die Pfeiltaste nach unten drücke, der Button darunter gedrückt und fokusiert wird. Code-Schnipsel:
Delphi-Quellcode:
Es wird nichtmal die ShowMessage angezeigt, wenn ich die Pfeiltasten benutze. Mit Buchstaben funktioniert es natürlich einwandfrei.
procedure TForm1.Button1KeyDown(Sender: TObject; ...);
begin ShowMessage(''); if Key=VK_Down then begin ButtonDarunterAnvisieren; end; end; Habt ihr eine Idee, wie ich das abfangen kann? Liebe Grüße ... |
Re: Button überspringt OnKeyDown bei VK_Up / VK_Down
Die Pfeiltasten gehoeren zu den Dialog-Tasten wie der Tabulator. Sie werden also normalerweise schon vorher abgefangen und bewirken das der Focus auf den naechsten Button wechselt. Mach doch einfach mal eine Form mit ein paar Buttons und probier aus.
|
Re: Button überspringt OnKeyDown bei VK_Up / VK_Down
Ist im OI Deines Forms
Delphi-Quellcode:
Keypreview := True;
|
Re: Button überspringt OnKeyDown bei VK_Up / VK_Down
Zitat:
Delphi-Quellcode:
... hilft mir auch nicht weiter.
KeyPreview:=True
Die Hilfe sagt: Zitat:
|
Re: Button überspringt OnKeyDown bei VK_Up / VK_Down
Ich sehe keinen Sinn in dem was du machen willst. Das Konzept des Fokus und der Standardnavigationstasten fuer den Fokus ist Basis von Windows und damit der VCL. Da ohne Not einzugreifen macht das Programm nur verwirrend.
Warum willst du den Button gleich druecken? Was soll die Programmoberflaeche eigentlich machen? Ich wette die Idee Buttons zu verwenden ist der Aufgabe unangemessen. |
Re: Button überspringt OnKeyDown bei VK_Up / VK_Down
mich interessiert wie Robert der Beweggrund. Der Windowsnutzer erwartet bei Verwendung der Pfeiltasten das Windowsstandardverhalten.
Ich weiß zwar die Lösung, aber noch bin ich nicht gewillt diese raus zu rücken da ich nicht will das irgend ein Nutzer ein böses erwachen erlebt weil plötzlich etwas passiert das eigentlich nur beim klick auf den Button passieren sollte. |
Re: Button überspringt OnKeyDown bei VK_Up / VK_Down
Meine Anforderung scheint ja sehr viel Aufmerksamkeit zu erregen; den Grund verstehe ich aber nicht so genau, da es eigentlich recht trivial ist. Ich habe ja nicht nach Code zu bösartiger Software gefragt.
Hier ein Bild, das meine Oberfläche zeigt: ![]() Ihr seht links die fünf Schalter, die durchlaufen werden können. Je nachdem, welcher Schalter gedrückt wurde, wird ein anderes Panel gezeigt mit anderen Einstellungsmöglichkeiten. Ich habe es realisiert, dass man die Buttons mit 1,2,3,4,5 öffnen kann, aber dass man sie mit den Pfeiltasten nicht erreicht, ist mir ein Dorn im Auge. So, jetzt lasst aber mal hören, wie die Lösung aussieht ;-p [edit] Zitat:
[/edit] |
Re: Button überspringt OnKeyDown bei VK_Up / VK_Down
Hi,
Hilft dir die Routine OnEnter weiter?:
Delphi-Quellcode:
procedure TForm1.Button1Enter(Sender: TObject);
begin if Sender = Button1 then Panel1.Visible := True; end; |
Re: Button überspringt OnKeyDown bei VK_Up / VK_Down
Ah, super, die OnEnter-Routine funktioniert. Vielen lieben Dank :-)
|
Re: Button überspringt OnKeyDown bei VK_Up / VK_Down
Ich hatte auch recht. Das mit Buttons zu loesen ist falsch. Fuer diese Organisationsart ist ein TTabControl zustaendig.
|
Re: Button überspringt OnKeyDown bei VK_Up / VK_Down
TTabControl lässt sich allerdings nicht in eine Horizontale zwängen, weswegen die Button-Lösung die richtige ist ;-p
|
Re: Button überspringt OnKeyDown bei VK_Up / VK_Down
Komisch, sowohl TabControl als auch PageControl lassen sich bei mir umschalten. Dabei wird die Schrift auch noch vertikal geschrieben.
|
Re: Button überspringt OnKeyDown bei VK_Up / VK_Down
Huch, die Eigenschaft TabPosition hab ich gar nicht gesehen. Allerdings ist eine vertikale Schrift alles andere als der Übersichtlichkeit dienlich. Darum ist meine Lösung doch die richtige, solange es keine Lösung gibt, die meine Buttons (o.ä.) in einer vertikalen Anordnung aber mit horizontaler Schrift bietet.
|
Re: Button überspringt OnKeyDown bei VK_Up / VK_Down
Das würde mich jetzt aber doch interessieren.
Kann man irgend wie erzwingen, die Nachrichten VK_DOWN und VK_UP vor den Buttons zu erhalten. Auch wenn es, wie es scheint, gegen das Windowsstandardverhalten ist. In bestimmten Dialogen möchte ich nicht, das mit den Pfeiltasten zwischen den Buttons herumgesprungen wird, sondern eine andere Aktion durchgeführt wird. Und das klappt eben nicht, wenn die Buttons gerade den Fokus haben. Dann kommen die Events nicht mehr durch. |
Re: Button überspringt OnKeyDown bei VK_Up / VK_Down
Erzwingen kann man das schon (ein Memo oder Edit machen das ja), aber man verliert dabei die Navigation zwischen den Buttons.
|
Re: Button überspringt OnKeyDown bei VK_Up / VK_Down
Zitat:
|
Re: Button überspringt OnKeyDown bei VK_Up / VK_Down
|
Re: Button überspringt OnKeyDown bei VK_Up / VK_Down
Zitat:
man könnte die Schrift jedoch selber zeichnen,
Delphi-Quellcode:
ob das ein zufriedenstellendes Ergebnis ist, ist natürlich Ansichtssache.
procedure TForm1.FormCreate(Sender: TObject);
begin TabControl1.OwnerDraw := true; TabControl1.TabPosition := tpLeft; TabControl1.TabWidth := 25; TabControl1.TabHeight := 75; end; procedure TForm1.TabControl1DrawTab(Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect; Active: Boolean); begin if Control is TTabControl then TTabControl(Control).Canvas.TextOut((Rect.Right - Rect.Left - TTabControl(Control).Canvas.TextWidth(TTabControl(Control).Tabs[TabIndex])) div 2, Rect.Top + (Rect.Bottom- Rect.Top - TTabControl(Control).Canvas.TextHeight(TTabControl(Control).Tabs[TabIndex])) div 2, TTabControl(Control).Tabs[TabIndex]); end; EDIT: Der Fehler wurde behoben, dass alle Taps die selbe Caption haben. |
Re: Button überspringt OnKeyDown bei VK_Up / VK_Down
Das sieht doch schonmal sehr nett aus, aber die Tabs haben jetzt alle die selbe Caption :-/
|
Re: Button überspringt OnKeyDown bei VK_Up / VK_Down
Den Code habe ich jetzt abgeändert, es lag wohl an
Delphi-Quellcode:
jetzt müsste es eigentlich funktionieren.
with TTabControl(Control) do
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz