![]() |
Key wird nicht gelöscht, warum?
Hallo, hier mein Aufruf
Delphi-Quellcode:
Also ich reagiere auf einen Knopf und werte Tastenanschläge aus, ist evtl. KeyDown event falsch dafür?
procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin case key of Windows.VK_SPACE : ZeigeWas; Windows.VK_RETURN: ; // <- hier soll nichts passieren, tastendruck übersprungen werden, aber "ZeigeWas" wird ausgelöst Windows.VK_ESCAPE: Application.Terminate; end; Key := 0; // <- ich dachte das hier macht exakt das (key puffer leeren) //Application.ProcessMessages; end; Sinn und Zweck soll sein, bei gedrückter Eingabe-Taste soll nichts passieren/ausgelöst werden. Für einen kleinen Anstoss in die richtige Richtung wäre ich dankbar, Grüße |
AW: Key wird nicht gelöscht, warum?
Mal testweise in KeyUp reingehangen?
|
AW: Key wird nicht gelöscht, warum?
Du muss das schon mit richtig mit dem Debugger machen. Deine Beobachtung "Meine Prozedur zweigewas() wird ausgelöst" kommt wohl eher daher dass du dein
Delphi-Quellcode:
auch damit belegt hast, oder?
OnClick
Denn das OnKeyDown-Event wird bei einem Druck auf Return überhaupt nicht ausgelöst, das sieht man eigentlich im Debugger. |
AW: Key wird nicht gelöscht, warum?
@Der schöne Günther: Genau
@TiGü: noch nicht probiert, mach ich gleich mal OnClick und VK.Space sollen beide "ZeigeWas" aufrufen, im OnClick steht nur "ZeigeWas" aber ich will halt das "VK.Return" da raus haben, deswegen das KeyDown Event. Eine Idee wie ich das anstellen kann? Grüße |
AW: Key wird nicht gelöscht, warum?
Das hört sich für mich stark so an, als ob du verzweifelt nach einer Lösung suchst und nur deswegen das KeyDown versuchst zu nutzen.
Wäre es vielleicht nicht sogar das Beste, das nochmal neu zu machen? |
AW: Key wird nicht gelöscht, warum?
OnKeyDown
OnKeyPres OnKeyUp Nicht alle Tastenevents werden an gleicher Stelle behandelt. Manches wird beim Drücken ausgelöst (inkl. Key-Repeat-Calls) und manches erst beim Loslassen. Buttons z.B. : per Tastatur [ENTER] beim Drücken, das [Space] beim Loslassen, deren ShortCuts/HotKeys beim Drücken und per Maus auch erst beim Loslassen. Die SpeedButtons in ScrollBars und beim UpDownButtons reagieren dagegen wieder auf's Drücken, mit RepeatTimer und stoppen beim Loslassen. Wir hatten z.B. ein Fenster im Programm, das ging bei F2-KeyDown zu, aber im übergeordneten Fenster wird es beim beim F2-KeyUp geöffnet, also beim Schließen via F2 wurde es sofort wieder geöffnet. :wall: Aber wieso soll "ein" Knopf verschiedene Funktionen haben? ein Button mit Cancel=True reagiert auf ESC und ein anderer Button mit Default=True auf das Enter. Bei ESC immer. Bei ENTER nur wenn die Knöpfe keinen Fokus haben, ansonsten macht bei Enter/Space jeder Button das, wofür er da ist. |
AW: Key wird nicht gelöscht, warum?
Ja klar, Event ist nur dafür da das VK.Return zu unterbinden/abzufangen.
Wenn ich's neu mach, käm ich doch wieder bei einem Key-Event raus? Ich verstehe bestimmt wiedermal nicht wie ich's anders als mit einem Key-Event zu lösen wäre damit: - OnClick > ZeigeWas - Vk.Space > ZeigeWas - Vk.Return > überspringen als endresultat rauskommt. Grüße
Delphi-Quellcode:
also KeyDown event scheint das richtige zu sein, oder versteh ich's falsch?
per Tastatur [ENTER] beim Drücken
|
AW: Key wird nicht gelöscht, warum?
Zitat:
Delphi-Quellcode:
.
OnClick
Escape hat dir himitsu weiter oben schon erklärt wie man das eigentlich "richtig" macht. |
AW: Key wird nicht gelöscht, warum?
Enter/Space lösen OnClick aus.
Also einfach nur das ENTER blocken und den Rest durchlassen. Aber IMHO ist es eher unglücklich, wenn "Standard"-Komponenten vom standardmäßigen Verhalten des OS abweichen. |
AW: Key wird nicht gelöscht, warum?
Hatte meinen Text da oben noch etwas ergänzt.
Zitat:
und vorallem ob es vor oder nach dem KeyPress-Event behandelt wird. Theoretisch wäre KeyDown schon richtig, um das ENTER abzufangen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 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