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
Fukiszo
(Gast)

n/a Beiträge
 
#1

AW: Key wird nicht gelöscht, warum?

  Alt 30. Jan 2018, 12: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
 
#2

AW: Key wird nicht gelöscht, warum?

  Alt 30. Jan 2018, 12: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
Fukiszo
(Gast)

n/a Beiträge
 
#3

AW: Key wird nicht gelöscht, warum?

  Alt 30. Jan 2018, 12: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 12:22 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Key wird nicht gelöscht, warum?

  Alt 30. Jan 2018, 12: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.588 Beiträge
 
Delphi 12 Athens
 
#5

AW: Key wird nicht gelöscht, warum?

  Alt 30. Jan 2018, 12: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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Fukiszo
(Gast)

n/a Beiträge
 
#6

AW: Key wird nicht gelöscht, warum?

  Alt 30. Jan 2018, 12:33
ok nochmal ausführlicher:
in meiner TForm hab ich einen Knopf der permanent den Fokus bekommt wenn nicht gerade ein "Edit" passiert.
Alle funktionen enden damit den knopf den fokus zu geben (ist von hause aus DefaultButton)
Ob nun ein Escape darin vorkommt oder nicht lass ich jetzt mal so im raum stehen da ja mein problem die Return-Taste ist.

Hat jemand einen konstruktiven Vorschlag wie ich Return da rausbekommen kann?
Oder muss ich eine Button class erstellen die sowas verhindert, sich "normal wie unter windows" zu benehmen?

Grüße und verzeiht falls ich das eine oder andere falsch versteh
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Key wird nicht gelöscht, warum?

  Alt 30. Jan 2018, 12:43
Vorschlag:
Nicht der Button bekommt den Fokus, sondern die Form, also Form.SetFocus oder besser Form.ActiveControl:=nil; .

Der Knopf bekommt nicht Default=True. hat der Knopf den Fokus, dann kann Enter/Space/Maus das OnClick normal auslösen.
Space wird im OnKeyPress/Down/Up der Form behandelt. (KeyPreview=False)
Und das ESC kann über Cancel=True eines anderen Buttons oder auch über OnKeyPress/Down/Up der Form behandelt werden.



Die Dialog-Standard-Funktionen (Cancel und Default) werden über die ganze Form/Dialog behandelt.
Nur z.B. Memos behandeln ihr [ENTER] vorher und geben es nicht an die Form weiter.
Wie gesagt, ENTER/ESC haben Sonderaufgaben und werden von Windows bissl anders behandelt. Ist wie beim Strg+Alt+Entf, was sich auch nicht so leicht abschalten/überschreiben lässt.
Ein Therapeut entspricht 1024 Gigapeut.

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

n/a Beiträge
 
#8

AW: Key wird nicht gelöscht, warum?

  Alt 30. Jan 2018, 12:49
Das klingt gut, danke fürs umdenken.
Jetzt muss ich den knopf eh umarbeiten da er momentan nur sichtbar wird wenn er den fokus bekommt.
teufelskreis hehe aber ich pflanz den nun immer sichtbar rein und versuch es so wie du vorgeschlagen hast.

Danke!

Wie gesagt, ENTER/ESC haben Sonderaufgaben und werden von Windows bissl anders behandelt danke auch nochmals für erläuterung!

Geändert von Fukiszo (30. Jan 2018 um 12:52 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.600 Beiträge
 
Delphi 7 Professional
 
#9

AW: Key wird nicht gelöscht, warum?

  Alt 30. Jan 2018, 12:50
Eventuell im Form KeyPreview auf True und dann im OnKeyDown des Forms bei Return Key auf 0 setzen?
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  KeyPreview := True; // Kann man auch im Objektinspektor setzen.
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  case key of
    // Windows.VK_SPACE : ZeigeWas; // ist nicht erforderlich, da beim Betätigen der Leertaste,
    // mit Focus auf dem Button, sowieso das OnClick des Buttons ausgelöst wird.
    Windows.VK_RETURN : key := 0;
    // Windows.VK_ESCAPE : Application.Terminate;
    Windows.VK_ESCAPE : Close; // Halte ich für sinnvoller.
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Key wird nicht gelöscht, warum?

  Alt 30. Jan 2018, 12: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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:20 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-2025 by Thomas Breitkreuz