![]() |
TSplitter mit Doppelklick ansprechen
Hallo zusammen,
Mein erster Gedanke war, auf die Message WM_LBUTTONDBLCLK und den Focus von TSplitter zu reagieren. Nur leider gibt es bei der Komponente keine Methode oder Property, die den Focus abfragt. Deshalb suche ich noch nach anderen Ideen, wie ich einen Doppelklick auf TSplitter abfangen kann und dann eine Aktion ausgeführt wird. |
Re: TSplitter mit Doppelklick ansprechen
TSplitter ist ein Kind von TControl
Also ableiten und Property veröffentlichen.
Delphi-Quellcode:
Und in Zukunft nicht so kompliziert denken ;)
TDblClickSplitter = Class(TSplitter)
published Property OnDblClick; End; |
Re: TSplitter mit Doppelklick ansprechen
Oder der übliche protected-friend-Trick:
Delphi-Quellcode:
type
THACK_Splitter = class(TSplitter); procedure TForm1.FormCreate(Sender: TObject); begin THACK_Splitter(Splitter1).OnDblClick := Splitter1DblClick; end; |
Re: TSplitter mit Doppelklick ansprechen
Danke erstmal für eure Antworten. Ich habe jetzt mal ein bisschen rumprobiert und ich bekomme es nicht zu laufen. Das mein aktuelles Beipsieli dafür :
Delphi-Quellcode:
Warum funktioniert das Beipsiel nicht ?
unit Unit8;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm8 = class(TForm) Panel1: TPanel; Panel2: TPanel; Splitter1: TSplitter; procedure FormCreate(Sender: TObject); private { Private declarations } procedure Splitter1DblClick(Sender: TObject); public { Public declarations } end; TDblClickSplitter = class(TSplitter); var Form8: TForm8; implementation {$R *.dfm} procedure TForm8.Splitter1DblClick(Sender: TObject); begin Panel1.Width := Round(Form8.Width / 2); end; procedure TForm8.FormCreate(Sender: TObject); begin TDblClickSplitter(Splitter1).OnDblClick := Splitter1DblClick; end; end. |
Re: TSplitter mit Doppelklick ansprechen
Zitat:
|
Re: TSplitter mit Doppelklick ansprechen
Zitat:
|
Re: TSplitter mit Doppelklick ansprechen
Seltsam. Funktioniert mit D6 / D2009.
|
Re: TSplitter mit Doppelklick ansprechen
Ich habe es mit einem RAD Studio 2007 ausprobiert. Mit 2007 funktioniert es nicht und mit Turbo Delphi Explorer funktioniert es wieder.
|
Re: TSplitter mit Doppelklick ansprechen
Zitat:
|
Re: TSplitter mit Doppelklick ansprechen
*push* Hat niemand eine Idee, warum es unter Delphi 6, Turbo Delphi und D2009 funktioniert und unter Delphi 2007 nicht ? *push*
|
Re: TSplitter mit Doppelklick ansprechen
Moin Rolf,
setz' doch mal in das OnDblClick-Event, jeweils zu Beginn und Ende eine Zeile mit OutputDebugString. Dann kannst Du leicht mal nachvollziehen, ob die Ereignisroutine über aufgerufen wird. Ggf. ginge es wohl auch mit einem Breakpoint auf die Zeile in der Routine, aber das könnte den Ablauf beeinflussen. |
Re: TSplitter mit Doppelklick ansprechen
Hallo Christian,
danke für Deine Antwort. Ich habe schon einen Breakpoint in das OnDblClick-Event gesetzt. Nur springt mein Programm niemals in dieses Event. Meine Vermutung geht dahin, dass irgendwas mit dem Ableiten der Klasse nicht richtig funktioniert, so wie ich es gemacht habe. Edit : Der gleiche Sourcecode funktioniert ja unter Delphi 6 / Turbo Delphi und Delphi 2009. Wobei Delphi 6 und Delphi 2009 hat toms getestet. |
Re: TSplitter mit Doppelklick ansprechen
Ich bin jetzt ein bisschen weitergekommen. Wenn ich unter Delphi 2007 den Aufruf :
Delphi-Quellcode:
ein einen ButtonClick setze, funktioniert es. Nur in FormCreate und FormShow nicht. Warum ?
TDblClickSplitter(Splitter1).OnDblClick := Splitter1DblClick;
Edit: Revidiere, diesen Eintrag. In FormCreate funktioniert es nicht, es muss in FormShow stehen. |
Re: TSplitter mit Doppelklick ansprechen
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
D2007 keine Probleme bei OnCreate tut was es soll
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm2 = class(TForm) Splitter1: TSplitter; Panel1: TPanel; Panel2: TPanel; procedure FormCreate(Sender: TObject); private procedure Splitter1DblClick(Sender: TObject); public { Public-Deklarationen } end; TDblClickSplitter = class(TSplitter); var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.Splitter1DblClick(Sender: TObject); begin Panel1.Width := Round(Form2.Width / 2); end; procedure TForm2.FormCreate(Sender: TObject); begin TDblClickSplitter(Splitter1).OnDblClick := Splitter1DblClick; end; Edit hab grad gemerkt das es auf die Größe der Panels ankommt ist eins davon sehr schmal dann hakt es |
Re: TSplitter mit Doppelklick ansprechen
Mmmh, komisch ich verstehe die Welt nichtmehr. Ich habe es vorhin ins FormCreate mit einem OutputDebugString gepackt und es hat nicht funktioniert. Jetzt auf einmal funktioniert es. Irgendwie komisch :gruebel: :glaskugel:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:33 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