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/)
-   -   Delphi Toolbar mit Toolbutton mit DblClick-Event (https://www.delphipraxis.net/133252-toolbar-mit-toolbutton-mit-dblclick-event.html)

taaktaak 28. Apr 2009 18:46


Toolbar mit Toolbutton mit DblClick-Event
 
Moin, Moin.
Ich benötige eine Toolbar mit Toolbuttons, die auf Doppel-Klick reagieren können. Die Toolbar hat das Event, die Toolbutton aber leider nicht. Eine abgeleitete Klasse, die das gewünschte Event veröffentlicht ist ja nicht das Problem:

Delphi-Quellcode:
TNewToolButton = class(TToolButton)
                   published
                     property OnDblClick;
                   end;
Nützt aber natürlich noch gar nix, da ich ja eine Toolbar-Klasse benötige, die diese neuen Toolbuttons auch verwendet. Tja, und da habe ich nun überhaupt keine Idee wie ich da vorgehen kann - oder funktioniert so etwas ohnehin nicht?

Alternativ sehe ich noch, den Doppelklick "manuell" im zur Verfügung stehenden OnClick() des Toolbuttons "mitzuzählen" - Aber das ist irgendwie "basteln", oder?

Bernhard Geyer 28. Apr 2009 18:49

Re: Toolbar mit Toolbutton mit DblClick-Event
 
Du mußt auch die Toolbar-Klasse ableiten und dort wo mit TToolbutton gearbeitet wird deinen TNewToolButton "einpflanzen".

Beim ElPack (das ich verwende) kann man hierzu einfach die Angabe der zu verwendenden Buttonklasse im Konstruktor der eigenen Toolbar-Klasse. überschreiben

taaktaak 28. Apr 2009 18:54

Re: Toolbar mit Toolbutton mit DblClick-Event
 
Ok, danke für die schnelle Antwort. Dass die Toolbar-Klasse ebenfalls abgeleitet werden muss, liegt auf der Hand - könntest du bitte das "einpflanzen" etwas präzisieren. Genau an dieser Stelle hapert es. Ich verstehe es bisher so, dass (nur?) im Konstruktor der abgeleiteten Toolbar-Klasse die "Pflanzaktion" erfolgt?

Bernhard Geyer 28. Apr 2009 19:03

Re: Toolbar mit Toolbutton mit DblClick-Event
 
Zitat:

Zitat von taaktaak
Ok, danke für die schnelle Antwort. Dass Toolbar-Klasse ebenfalls abgeleitet werden muss, liegt auf der Hand - könntest du bitte das "einpflanzen" etwas präzisieren. Genau an dieser Stelle hapert es. Ich verstehe es bisher so, dass (nur?) im Konstruktor der abgeleiteten Toolbar-Klasse die "Pflanzaktion" erfolgt?

Seh gerade das TToolbar mit TToolbutton fest verwoben ist. Vermutlich musst du den gesamten Toolbar/Toolbutton-Code aus der VCL in eine eigene Unit verfrachten, alles umbennenen und dann entsprechend erweitern.

taaktaak 28. Apr 2009 23:01

Re: Toolbar mit Toolbutton mit DblClick-Event
 
:( - ich hab's befürchtet.
Dann ist's vielleicht doch eine Überlegung, dass im OnClick() "manuell" zu erledigen.
Vielen Dank, damit hast du mir erst einmal unnötige Grübelei erspart.
:hi:

taaktaak 30. Apr 2009 09:41

Re: Toolbar mit Toolbutton mit DblClick-Event
 
Für die Nachwelt eine kurze abschließende Sachstandsmeldung zu diesem Thema:

Habe zunächst doch den Ratschlag von Bernhard befolgt und eine eigene Unit mit allem(?) notwendigen Code aus ComCtrl erstellt, verändert und als neue Toolbar installiert. Danach war aber das Einfügen neuer Toolbuttons mit Hilfe des Toolbar-Popups zur Entwurfszeit nicht verfügbar?! Nachdem die Toolbuttons ebenfalls als eigenständige Komponente installiert wurden, funktionierte das mit dem Popup immer noch nicht, aber das "hineinziehen" eines neuen Buttons in die Toolbar war danach immerhin möglich. Im OI stand auch das DblClick-Event zur Verfügung - leider wurde es aber offenbar nicht aufgerufen.

Da das Thema für mich nicht die oberste Priorität hat, habe ich dann ohne weitere Ursachenforschung die Alternative "Bastellösung" versucht: Da die Toolbutton eine eigene WinProc haben, kann dort mit minimalem Aufwand der Doppel-Klick erkannt und behandelt werden - das funktioniert ohne Probleme gemeinsam mit dem "normalen" Klick zusammen.

Ungelöst blieb aber meine spezielle Anforderung: Normaler Schalter bei einfachem Klick, rastender Schalter nach Doppelklick und Aufheben der Markierung bei nächstfolgendem einfachen Klick. Es ist zwar mit wenig Aufwand gelungen den Schalter nach einem Doppel-Klick einrasten zu lassen. Das Aufheben der Markierung blieb aber ungelöst, da dieses zwar optisch erfolgt, aber dadurch weder ein WM_LButtonDown noch WM_LButtonUp in der WinProc ankommt - somit habe ich bisher keinen Weg gefunden über die Aufhebung des Einrastens informiert zu werden.


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