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/)
-   -   TCategoryButtons extern Klick simulieren (https://www.delphipraxis.net/216386-tcategorybuttons-extern-klick-simulieren.html)

hes 19. Dez 2024 01:47

TCategoryButtons extern Klick simulieren
 
Hallo Zusammen,

Wie kann man bei den TCategoryButtons einen externen Click simulieren, also wie wenn man den Button mit der Maus drückt um es aus einer Funktion anzuwählen/umzuschalten.

Unter ...\Samples\Object Pascal\VCL findet man das "SplitView" Beispiel. Wenn man den Style auf einen anderen als Windows wechselt sieht man schön wie der gedrückte Button hinterlegt wird.

Leider habe ich es bis jetzt nicht geschafft das Problem alleine zu lösen. Weis jemand Rat?

peterbelow 20. Dez 2024 12:37

AW: TCategoryButtons extern Klick simulieren
 
Naja, die Items in der Liste (TButtonItem) haben eine Eigenschaft Bounds, die Position und Grösse des "Buttons" angibt, vermutlich in Client-Koordinaten der TCategoryButton-Komponente. Mit dessen ClientToScreen-Methode könnte man das in Screen-Koordinaten umrechnen, den Mauszeiger dort positionieren (Mouse.CursorPos, hat einen Setter) und einen Mouse down simulieren (API-Funktion SendInput oder direkt entsprechende Messages (WM_LBUTTONDOWN) an die Komponente senden.

hes 20. Dez 2024 20:35

AW: TCategoryButtons extern Klick simulieren
 
@peterbelow

das hab ich sogar schon vor der Fragestellung hier gemacht, aber mit dem auf und zuklappen ist das so ne Sache. Funktioniert auch bedingt.

Zum Test kann man sich einen Button einbauen, wo man sieht wurde schon was gedrückt. BtnItem.OnClick auslösen geht, aber optisch passiert leider nichts. Aus dem Quellcode der Komponente bin ich noch nicht schlau geworden wo ich ansetzen muss.

procedure TSplitViewForm.Button1Click(Sender: TObject);
var
BtnItem: TButtonItem;
begin
BtnItem := catmenuitems.categories[0].items[1];

if Assigned (catMenuItems.CurrentCategory) then
ShowMessage (catMenuItems.CurrentCategory.CategoryButtons.Sele ctedItem.Caption);
end;

himitsu 20. Dez 2024 23:21

AW: TCategoryButtons extern Klick simulieren
 
Ich würde mal sagen du nimmst dir einen Style (deinen aktuellen) und passt dort das Jeweilige an.
Da es in andern Styles geht, muß es schließlich unterschiedliche Grafiken für geben.

Also irgendwie weiß man hier anfangs und letztendlich garnicht, worum es hier gehn soll.
* das Drücken soll man physisch sehen
* programmseitig drücken (Aktion ausführen)
* programmseitig drücken und es dabei auch so aussehen zu lassen, als wenn "gedrückt" wird
* ?

hes 20. Dez 2024 23:59

AW: TCategoryButtons extern Klick simulieren
 
@himitsu

Vielleicht das Beispiel von Embacadero ansehen, dort sieht man wenn man einen Button drückt wie er unterlegt wird und aktiviert bleibt. Der Button soll einfach angewählt angezeigt werden. Also ähnlich wie bei einem normalen Button ein Button.Click.


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