TSplitter mit festen Positionen

Rund um die LCL und andere Komponenten
Antworten
Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

TSplitter mit festen Positionen

Beitrag von Socke »

Hallo,
gibt es eine Möglichkeit, bei einem TSplitter nur bestimmte Positionen zuzulassen (d.h. ein Hin- und Herspringen zwischen diesen)?

Um bei einem OnClick die Position zu wechseln, verwende ich folgendes:

Code: Alles auswählen

var
  pos: Integer;
begin
  { pos = untere Position }
  pos := PButtons.Top-PButtons.BorderSpacing.Top-Splitter1.Height-1;
  { wenn der Splitter dort ist, muss die obere Position berechnet und gesetzt werden }
  if Splitter1.GetSplitterPosition = pos then begin
    pos := pos-PExport.Constraints.MaxHeight;
    Splitter1.SetSplitterPosition(pos);
  end else
  { wenn er nicht dort ist, soll er dorthin gehen }
    Splitter1.SetSplitterPosition(pos);
funktioniert soweit. Jetzt wäre es nur schön, wenn beim klassischen Verschieben mit Maus auch nur zwei Positionen möglich wären. Genau für sowas ist anscheinen das OnCanResize-Event vorhanden:

Code: Alles auswählen

 
procedure TFrmMain.Splitter1CanResize(Sender: TObject; var NewSize: Integer;
  var Accept: Boolean);
var
  tpos, bpos: Integer;
begin
  with (Sender as TSplitter) do begin
    // Positionen berechnen
    bpos := PButtons.Top-PButtons.BorderSpacing.Top-Height-1;
    tpos := bpos-PExport.Constraints.MaxHeight;
    { wenn auf dem Weg nach unten }
    if NewSize < GetSplitterPosition then
      { dann NewSize direkt auf das Ende setzten }
      NewSize := bpos else
      { ansonsten (auf dem Weg nach oben), die obere Position auswählen }
      NewSize := tpos;
  end;
  Accept := true;
end;
Das Ergebnis ist, dass der Splitter nicht mehr verschoben werden kann (OnClick funktioniert aber).

Hat sonst noch wer eine Idee?

MfG Socke
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

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

Re: TSplitter mit festen Positionen

Beitrag von theo »

Geht's denn mit dem OnMoved Ereignis nicht? Das würde sich doch anbieten..

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: TSplitter mit festen Positionen

Beitrag von Socke »

OnMoved ist ein einfaches TNotifyEvent, d.h. ich hab nur den Sender (is ja eh mein Splitter). Ich kann also nicht überprüfen, ob der Splitter auf dem Weg nach Unten oder auf dem Weg nach Oben ist. Das Ergebnis ist, ich weiß nicht, in welche Richtung der Splitter bewegt werden soll.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

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

Re: TSplitter mit festen Positionen

Beitrag von theo »

Bei Moved ist die neue Position bekannt, vergleich die halt mit einer gespeicherten alten Position, dann ist die Richtung auch klar.

Antworten