AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Key wird nicht gelöscht, warum?

Ein Thema von Fukiszo · begonnen am 30. Jan 2018 · letzter Beitrag vom 31. Jan 2018
Antwort Antwort
Seite 1 von 3  1 23      
Fukiszo
(Gast)

n/a Beiträge
 
#1

Key wird nicht gelöscht, warum?

  Alt 30. Jan 2018, 12:44
Hallo, hier mein Aufruf

Delphi-Quellcode:
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;
Also ich reagiere auf einen Knopf und werte Tastenanschläge aus, ist evtl. KeyDown event falsch dafür?
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
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Key wird nicht gelöscht, warum?

  Alt 30. Jan 2018, 12:55
Mal testweise in KeyUp reingehangen?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Key wird nicht gelöscht, warum?

  Alt 30. Jan 2018, 12:58
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 OnClick auch damit belegt hast, oder?

Denn das OnKeyDown-Event wird bei einem Druck auf Return überhaupt nicht ausgelöst, das sieht man eigentlich im Debugger.
  Mit Zitat antworten Zitat
Fukiszo
(Gast)

n/a Beiträge
 
#4

AW: Key wird nicht gelöscht, warum?

  Alt 30. Jan 2018, 13:09
@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
  Mit Zitat antworten Zitat
LTE5

Registriert seit: 13. Nov 2017
355 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: Key wird nicht gelöscht, warum?

  Alt 30. Jan 2018, 13:12
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Key wird nicht gelöscht, warum?

  Alt 30. Jan 2018, 13:16
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.


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.
$2B or not $2B

Geändert von himitsu (30. Jan 2018 um 13:23 Uhr)
  Mit Zitat antworten Zitat
Fukiszo
(Gast)

n/a Beiträge
 
#7

AW: Key wird nicht gelöscht, warum?

  Alt 30. Jan 2018, 13:17
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


per Tastatur [ENTER] beim Drücken also KeyDown event scheint das richtige zu sein, oder versteh ich's falsch?

Geändert von Fukiszo (30. Jan 2018 um 13:22 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Key wird nicht gelöscht, warum?

  Alt 30. Jan 2018, 13:21
- OnClick > ZeigeWas
- Vk.Space > ZeigeWas
- Vk.Return > überspringen
Ich will dich ja nicht zwanghaft konvertieren, aber warum sollte man das tun? Mach es doch einfach so wie sich jede Standard-Windows-Anwendung auch verhält: Buttons lassen sich mit Maus/Touch/Stift drücken und (wenn er den Fokus hat) mit der Tastatur über Enter/Return/Space. Da reicht ein einfaches OnClick .

Escape hat dir himitsu weiter oben schon erklärt wie man das eigentlich "richtig" macht.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: Key wird nicht gelöscht, warum?

  Alt 30. Jan 2018, 13:25
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#10

AW: Key wird nicht gelöscht, warum?

  Alt 30. Jan 2018, 13:28
Hatte meinen Text da oben noch etwas ergänzt.

per Tastatur [ENTER] beim Drücken also KeyDown event scheint das richtige zu sein, oder versteh ich's falsch?
Da kommt es dann darauf an, wo/wie das Standardverhalten der Komponente genau implementiert ist
und vorallem ob es vor oder nach dem KeyPress-Event behandelt wird.

Theoretisch wäre KeyDown schon richtig, um das ENTER abzufangen.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:13 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