Delphi-PRAXiS
Seite 1 von 2  1 2      

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 VST - KeyEreignisse (https://www.delphipraxis.net/112796-vst-keyereignisse.html)

OG Karotte 27. Apr 2008 12:33


VST - KeyEreignisse
 
Hallo,
ich habe derzeit ein seltsames Problem mit dem VST:

Ich möchte z.B. die Taste VK_DELETE abfangen, um einige Aktionen durchzuführen. Dabei ist mir folgendes Aufgefallen:

1. Wenn ein Knoten, z.B. durch anklicken den Focus hat UND dadurch selektiert ist, dann wird NUR das Keyup ausgelöst (Dann ist der Knoten aus dem VST aber schon gelöscht!!!):gruebel:

2. Wenn ein Knoten NUR den Focus hat, dann werden auch die anderen Keyereignisse ausgelöst

3. Wenn kein Knoten den Focus hat, dann werden auch alle Ereignisse ausgelöst, aber eben nichts gelöscht. :thumb:

Ist das das Standardverhalten oder ein Fehler oder was???

Ich meine ich möchte schon wissen, welcher Knoten gelöscht werden soll (durch Tastendruck) um evtl. dies zu verbieten oder noch ein paar andere Aktionen durchführen zu können (Sicherheitsabfrage o.ä.). :wall:

marabu 27. Apr 2008 12:54

Re: VST - KeyEreignisse
 
Hallo Stefan,

bei nicht-interaktivem Löschen gehört dein Code in die Ereignisbehandlung von OnFreeNode(), bei interaktivem Löschen in eine Action, die du z.B. beim Ereignis OnChange() oder OnFocusChange() aktivierst bzw. deaktivierst.

Freundliche Grüße

OG Karotte 27. Apr 2008 13:05

Re: VST - KeyEreignisse
 
Zitat:

Zitat von marabu
bei nicht-interaktivem Löschen gehört dein Code in die Ereignisbehandlung von OnFreeNode(), bei interaktivem Löschen in eine Action, die du z.B. beim Ereignis OnChange() oder OnFocusChange() aktivierst bzw. deaktivierst.

Bei Nicht-interaktivem ist das auch kein Problem, aber wenn der Nutzer die Entf-Taste drückt, dann ist es imho ein Tastaturereignis, das abzufangen möglich sein sollte. Will sagen, nutze ich z.B. OnChange, dann ist mir nicht bekannt welches Ereignis letztendlich (also in diesem Fall welche Taste) das OnChange auslöst. Eine Sicherheitsabfrage sollte sich schon mit der Taste verbinden lassen.

Oder bin ich hier irgendwie auf'm Holzweg?

marabu 27. Apr 2008 13:12

Re: VST - KeyEreignisse
 
Holzweg finde ich jetzt etwas stark, aber dein Konzept für die Benutzerschnittstelle ist sicher verbesserungsfähig. Bei dir scheint der Code für den Löschvorgang direkt mit dem Tastendruck ENTF verbunden zu sein. Wenn du solche Tastaturbefehle an eine TAction bindest, dann stellt sich dein Problem ganz anders dar, wie ich in meinem vorigen Beitrag versucht habe zu vermitteln.

OG Karotte 27. Apr 2008 13:27

Re: VST - KeyEreignisse
 
Hmm, also alle anderen interaktiven Aktionen (Menüauswahl, Toolbar, Anlegen von Knoten, aber auch Löschen usw.) hängen schon an TActions, nur kenne ich bislang keinen Weg eine bestimmte Aktion (oder ja eigentlich mehrere Aktionen) an ein VST zuhängen. Ich weiss zwar schon, das ich ein TAction an's VST hängen kann, aber wie würde das in dem vorliegenden Fall zu bewerkstelligen sein???
Also wie sage ich z.B. dem VST tue diese Aktion bei dem Tastendruck und jene Aktion bei jenem Tastendruck OHNE die VST-Keyereignisse???

Oder meinst Du ALLE Tastendrücke in der Applikation abfangen und zentral bearbeiten :gruebel:

Sorry, aber ich glaub' ich seh g'rad' den Wald vor lauter Bäumen nicht...

marabu 27. Apr 2008 13:42

Re: VST - KeyEreignisse
 
Der VST ist ja kein Button oder MenuItem, insofern kannst du natürlich die Action nicht direkt einer Property zuweisen. Aber du kannst eine DeleteNodeAction anlegen, der du das Tastaturkürzel ENTF zuweist. Willst du das Löschen eines Knoten verbieten, so hast du jetzt mindestens zwei Alternativen:

(1) Du reagierst auf das Ereignis OnUpdate() der Action und setzt Action.Enabled entsprechend deiner Analyse des aktuellen VST Zustands.

(2) Du reagierst auf das Ereignis OnChange() des VST. setzt du Action.Enabled entsprechend ...

Jeder unbotmäßige Löschversuch wird so zum frühest möglichen Zeitpunkt verhindert.

OG Karotte 27. Apr 2008 14:34

Re: VST - KeyEreignisse
 
Erstmal vielen Dank Achim.
Ich sehe, ich hab' noch einiges aufzuholen, was Aktionslisten und Aktionen angeht. Den grundsätzlichen Ansatz glaube ich, hab' ich, verstanden. Nun will ich mich damit mal "ein wenig" auseinandersetzen.

OG Karotte 28. Apr 2008 17:29

Re: VST - KeyEreignisse
 
So, ich hab' mich nun einwenig mehr eingelesen und festgestellt, das insbesondere der Part 'OnUpdate()' der Actionlist mir einige Arbeit abnimmt.

Leider habe ich aber keinerlei Info's / Ansätze gefunden(oder es ist nur wieder die Sache mit dem Wald und Bäumen und so :oops: ) mit dem sich Dein Vorschlag umsetzten läßt, sprich mir fehlt der Ansatz VST <-> TAction.

Vielleicht könnt' mir da jemand ein wenig auf die Sprünge helfen...

tia

OG Karotte 2. Mai 2008 16:38

Re: VST - KeyEreignisse
 
Ok, hat sich erledigt:

Ich hatte in meinem Code die Standardaktion
Delphi-Quellcode:
TEditDelete
Diese bezog JEDES Betätigen der Taste ENTF auf sich und lies somit keine weitere Abfrage der Taste an anderer Stelle zu. :( Nun habe ich einfach ein "normales" TAction verwendet und es funzt so wie ich es wollte. :-D

generic 2. Mai 2008 19:25

Re: VST - KeyEreignisse
 
Die von dir beschriebene Funktion "Knoten weg" nach "entf" wird durch interne Actions im VST ausgelöst.

Dort sind auch noch paar andere Actions vorgegeben.
Schau doch einfach mal in der VST Source.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 Uhr.
Seite 1 von 2  1 2      

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