Delphi-PRAXiS

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/)
-   -   Denksportaufgabe: Spaß mit Aktionen (https://www.delphipraxis.net/188392-denksportaufgabe-spass-mit-aktionen.html)

PeterPanino 27. Feb 2016 17:52

Denksportaufgabe: Spaß mit Aktionen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Leute!

Ich habe heute am Samstag Nachmittag mal ein bisschen mit den eingebauten Aktionslisten herumgespielt. Ich habe in einem VCL-Forms-Projekt eine TActionList, 2 TEdit, eine TImageList und einen TButton auf die Form geworfen. Die Imageliste wurde mit der Aktionsliste verknüpft.

In der Aktionsliste habe ich zwei Standard-Aktionen eingefügt, eine Copy- und eine Paste-Aktion:

http://i.imgur.com/xxwguJb.png

Dann habe ich den Button mit der Copy-Aktion verbunden und das Programm gestartet.

Nach dem Start ist der Button natürlich disabled, weil es ja nichts zu kopieren gibt. Aber sobald ich in einem der Edit-Felder einen Text auswählte, war der Button automatisch enabled, was natürlich eine feine Sache ist, weil man dadurch keine Event-Handler selbst implementieren muss. ABER: Sobald ich auf den jetzt so genannten Copy-Button klicke, wird nicht etwa der im Edit-Feld ausgewählte Text in die Zwischenablage kopiert, sondern ganz einfach der Button disabled.

Ich schlussfolgere also mal gleich: Man sieht ja, dass beim Klicken auf den Button das Edit-Feld den Fokus verliert, somit die Auswahl im Edit-Feld aufgehoben und deshalb folgerichtig der Button deswegen disabled wird.

Also flugs in beiden Edit-Feldern die Eigenschaft HideSelection auf False gesetzt und das Ganze nochmals probiert. Aber denkste! Es funktioniert wieder nicht, obwohl die Auswahl im Edit-Feld trotz des Klickens auf den Button erhalten bleibt. Aber das ist wohl nur optisch vorgetäuscht, damit der Benutzer noch weiß, welchen Text er zuletzt ausgewählt hat.

Dem geneigten Leser bleibt noch überlassen, das Ganze analog mit der Paste-Aktion zu versuchen und dabei ebenso frustriert zu werden.

Wie kann man also die beiden Clipboard-Aktionen auf die dargelegte Weise zum Funktionieren bringen? Wer löst die Denksportaufgabe?

Sir Rufo 27. Feb 2016 21:26

AW: Denksportaufgabe: Spaß mit Aktionen
 
Die Cut/Copy/Paste Aktionen beziehen sich immer auf das derzeit aktive Control.

Welches Control ist aktiv, wenn du auf den Button klickst? Richtig, der Button.
Ist bei dem Button etwas ausgewählt? Nein, kann man auch gar nicht.

Also gibt es in der gegenwärtigen Situation kein Copy/Cut/Paste -> Aktion ist disabled.

Und wie lösen wir das Problemchen?

Wir nehmen einen Button, der nicht den Fokus erhält und damit zum aktiven Control wird: Delphi-Referenz durchsuchenTSpeedButton :wink:

PeterPanino 27. Feb 2016 21:53

AW: Denksportaufgabe: Spaß mit Aktionen
 
Du hast meine Anerkennung!

Es ist immer wieder erstaunlich, wie logisches und folgerichtiges Denken (aber auch Wissen) in manchen Bereichen zur Lösung von Problemen (oder Problemchen) führen können!

Wünsche noch einen schönen Abend!

PeterPanino 27. Feb 2016 22:09

AW: Denksportaufgabe: Spaß mit Aktionen
 
Übrigens: Könnte man den TButton nicht irgendwie dazu bewegen, die Abfolge der Ereignisse zu verändern?

Man müsste ihn also irgendwie dazu bringen, vorher seine Aktion auszuführen und dann erst im Sinne der Windows Fensterhierarchie zum aktiven Control zu werden.

Wäre das möglich?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:09 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