Splitter Doppelklick funzt nur mit ShowMessage

Für Fragen rund um die Ide und zum Debugger
Antworten
Werner
Beiträge: 3
Registriert: Mo 28. Okt 2019, 09:55

Splitter Doppelklick funzt nur mit ShowMessage

Beitrag von Werner »

Hallo Forum,

habe leider ein Problem mit dem Ereignis DblClick für Splitter. Ich möchte, dass beim Doppelklick auf den Splitter das entsprechende Panel aus- und bei erneutem Doppelklick wieder eingeblendet wird oder alternativ die Breite auf 0 verkürzt bzw. verbreitert wird. Was mit einem Button wunderbar funktioniert, ist mit dem Splitter nur möglich, wenn im entsprechenden Code ShowMessage aufgerufen wird.

Ich bin blutiger Anfänger und vermute, dass das Problem mit Moved zusammenhängt und die Anweisung ShowMessage dieses vielleicht kurzfristig außer Kraft setzt.

Damit mein Problem leichter nachvollziehbar ist, habe ich ein einfaches Formular mit 5 TPanels, 2 TSplittern und 2 TButtons erstellt:
Die Komponenten erhielten folgende Namen und Eigenschaften:
PanelTop: align alTop
PanelLeft: align alLeft
PanelRight: align alRight
PanelBottom: align alBottom
SplitterLeft: align alLeft
SplitterRight: align alRight
PanelCenter: align alClient
ButtonLeft und ButtonRight: (beide in PanelTop)

Hier der Code der unit:

Code: Alles auswählen

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    ButtonLeft: TButton;
    ButtonRight: TButton;
    PanelTop: TPanel;
    PanelLeft: TPanel;
    PanelRight: TPanel;
    PanelBottom: TPanel;
    PanelCenter: TPanel;
    SplitterLeft: TSplitter;
    SplitterRight: TSplitter;
    procedure FormCreate(Sender: TObject);
    procedure ButtonLeftClick(Sender: TObject);
    procedure ButtonRightClick(Sender: TObject);
    procedure SplitterLeftDblClick(Sender: TObject);
    procedure SplitterRightDblClick(Sender: TObject);
  private
 
  public
 
  end;
 
   TDoubleClickSplitter = class(TSplitter)
       Property OnDblClick;
   end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  TDoubleClickSplitter(SplitterLeft).OnDblClick := @SplitterLeftDblClick;
  TDoubleClickSplitter(SplitterRight).OnDblClick := @SplitterRightDblClick;
end;
 
procedure TForm1.SplitterLeftDblClick(Sender: TObject);
begin
  if PanelLeft.width > 1 then
    begin
       PanelLeft.width :=0;
       ShowMessage(''); // ohne Message verschwindet Panel kurz, dann wieder sichtbar
    end
  else
     begin
       PanelLeft.width := 150;
       ShowMessage(''); // ohne Message blitzt Panel kurz auf, verschwindet dann wieder
     end;
end;
 
procedure TForm1.ButtonLeftClick(Sender: TObject);
begin
  if PanelLeft.width > 1 then
    begin
       PanelLeft.width :=0;
    end
  else
     begin
       PanelLeft.width := 150;
     end;
end;
 
procedure TForm1.SplitterRightDblClick(Sender: TObject);
begin
  if PanelRight.visible = true then
    begin
       PanelRight.visible := false;
    end
  else
     begin
       PanelRight.visible := true;
       ShowMessage(''); // ohne Message blitzt Panel kurz auf, verschwindet dann wieder
     end;
end;
 
procedure TForm1.ButtonRightClick(Sender: TObject);
begin
  if PanelRight.visible = true then
    begin
       PanelRight.visible := false;
    end
  else
     begin
       PanelRight.visible := true;
     end;
end;
 
end.


Für Lösungsvorschläge wäre ich ausgesprochen dankbar.

mfg Werner

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Splitter Doppelklick funzt nur mit ShowMessage

Beitrag von theo »

Auf welchem Betriebssystem / Widget Set ist das denn?
Kann es sein, dass das Event 2x ausgelöst wird?

Werner
Beiträge: 3
Registriert: Mo 28. Okt 2019, 09:55

Re: Splitter Doppelklick funzt nur mit ShowMessage

Beitrag von Werner »

Hallo Theo,

vielen Dank für die Nachricht.
Das Problem tritt sowohl unter Linux Mint als auch unter Windows 7 auf, in beiden Fällen mit Lazarus 2.0.4. Und ja, ich denke auch, dass der Event zweimal ausgelöst wird. Nur, wie unterbinde ich das?

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Splitter Doppelklick funzt nur mit ShowMessage

Beitrag von fliegermichl »

Ich finde, daß das Verhalten bei mehr als einem Splitter innerhalb eines Parents fast unvorhersagbar ist.
Ich mach bei so etwas zwei Panels in das Formular mit einem Splitter dazwischen und dann in jedes dieser Panels wiederum 2 Panels mit Splitter dazwischen. Das kann man beliebig fortsetzen und dann ist das Verhalten auch eindeutig.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Splitter Doppelklick funzt nur mit ShowMessage

Beitrag von theo »

@Werner: Naja, offiziell ist dieses Feature (OnDblClick) für TSplitter nicht unterstützt, deshalb musstest du es auch reinmogeln via TDoubleClickSplitter.
Da braucht man sich nicht wundern, wenn es nicht funktioniert, da niemand behauptet hat, dass es funktioniert. :wink:
Gibt es keine bessere Lösung für dein Problem? (Edit: Siehe z.B. fliegermichl)

Werner
Beiträge: 3
Registriert: Mo 28. Okt 2019, 09:55

Re: Splitter Doppelklick funzt nur mit ShowMessage

Beitrag von Werner »

Vielen Dank für den Tipp.

Habe mal PanelRight und SplitterRight entfernt und damit ist nur noch ein Splitter im Formular. Aber das Problem besteht leider nach wie vor.
Jepp, ich habe den Doppelklick reingemogelt und gehofft, dass ich dieses Feature dann nutzen könnte.

Und ja, ich habe eine andere Lösung. In meinem "richtigen" Formular sitzt im linken Panel ganz oben ein Button, der bei Klick dieses Panel auf 56 Pixel verkleinert bzw. wieder in die ursprüngliche Breite vergrößert. Wenn es also nicht anders geht, verzichte ich auf den Splitter-Doppelklick.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Splitter Doppelklick funzt nur mit ShowMessage

Beitrag von theo »

Werner hat geschrieben:Jepp, ich habe den Doppelklick reingemogelt und gehofft, dass ich dieses Feature dann nutzen könnte.


Das ist immer etwas gefährlich und unbefriedigend.
Selbst wenn du es auf dem einen Betriebssystem hinbiegen kannst, heißt das noch lange nicht, dass es dann auf anderen Systemen auch läuft.
Es wird nicht offiziell unterstützt und das hat wahrscheinlich Gründe.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Splitter Doppelklick funzt nur mit ShowMessage

Beitrag von wp_xyz »

Ich habe das eben in Delphi nachgespielt und erhalte dasselbe Verhalten, auch für ShowMessage.

Antworten