Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TSplitter mit Doppelklick ansprechen (https://www.delphipraxis.net/125949-tsplitter-mit-doppelklick-ansprechen.html)

RWarnecke 15. Dez 2008 14:36


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.

worker 15. Dez 2008 15:53

Re: TSplitter mit Doppelklick ansprechen
 
TSplitter ist ein Kind von TControl
Also ableiten und Property veröffentlichen.

Delphi-Quellcode:
   TDblClickSplitter = Class(TSplitter)
   published
      Property OnDblClick;
   End;
Und in Zukunft nicht so kompliziert denken ;)

uligerhardt 15. Dez 2008 16:04

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;

RWarnecke 16. Dez 2008 19:12

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:
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.
Warum funktioniert das Beipsiel nicht ?

toms 16. Dez 2008 19:24

Re: TSplitter mit Doppelklick ansprechen
 
Zitat:

Zitat von RWarnecke
Warum funktioniert das Beipsiel nicht ?

Was sollte nicht gehen? Wird das Ereignis nicht ausgelöst?

RWarnecke 16. Dez 2008 19:44

Re: TSplitter mit Doppelklick ansprechen
 
Zitat:

Zitat von toms
Zitat:

Zitat von RWarnecke
Warum funktioniert das Beipsiel nicht ?

Was sollte nicht gehen? Wird das Ereignis nicht ausgelöst?

Jepp, das Ereignis wird nicht ausgelöst.

toms 16. Dez 2008 19:56

Re: TSplitter mit Doppelklick ansprechen
 
Seltsam. Funktioniert mit D6 / D2009.

RWarnecke 16. Dez 2008 20:51

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.

RWarnecke 22. Dez 2008 14:50

Re: TSplitter mit Doppelklick ansprechen
 
Zitat:

Zitat von RWarnecke
Ich habe es mit einem RAD Studio 2007 ausprobiert. Mit 2007 funktioniert es nicht und mit Turbo Delphi Explorer funktioniert es wieder.

Ich habe das ganze jetzt nochmals getestet unter RAD Studio 2007. Wenn ich dort den Sourcecode compiliere, funktionert es nicht mit dem Doppelklick auf den Splitter. Wird der gleiche Sourcecode unter Turbo Delphi 2006 Explorer kompiliert, funktioniert der Doppelklick auf den Splitter. Hat jemand eine Idee, warum das so ist ?

RWarnecke 25. Dez 2008 17:08

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*

Christian Seehase 25. Dez 2008 17:35

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.

RWarnecke 25. Dez 2008 17:38

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.

RWarnecke 25. Dez 2008 18:22

Re: TSplitter mit Doppelklick ansprechen
 
Ich bin jetzt ein bisschen weitergekommen. Wenn ich unter Delphi 2007 den Aufruf :
Delphi-Quellcode:
TDblClickSplitter(Splitter1).OnDblClick := Splitter1DblClick;
ein einen ButtonClick setze, funktioniert es. Nur in FormCreate und FormShow nicht. Warum ?

Edit: Revidiere, diesen Eintrag. In FormCreate funktioniert es nicht, es muss in FormShow stehen.

Gehstock 25. Dez 2008 19:41

Re: TSplitter mit Doppelklick ansprechen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
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;
D2007 keine Probleme bei OnCreate tut was es soll

Edit hab grad gemerkt das es auf die Größe der Panels ankommt ist eins davon sehr schmal dann hakt es

RWarnecke 25. Dez 2008 20:08

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