Einblendbares Tab Control

Forum für alles rund um die MSEide und MSEgui
Antworten
Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Einblendbares Tab Control

Beitrag von fliegermichl »

Kann man mit Bordmitteln so etwas erreichen wie mit der Windows Taskbar?

Normalerweise brauche ich so viel wie möglich Platz für die Zeichnung.
Wenn man nun ein neues Dach zu dem Projekt hinzufügen will, dachte ich mir, man fährt mit der Maus ganz an den rechten Bildschirmrand und dann blendet sich ein Tabpage ein, daß sich wieder ausblendet wenn man es mit der Maus verlässt.

Erwin
Beiträge: 286
Registriert: Mi 16. Sep 2009, 14:15
OS, Lazarus, FPC: Xubuntu 22.04 / x86_64_linux-gtk 2 / L 2.2.0 / FPC 3.2.2

Re: Einblendbares Tab Control

Beitrag von Erwin »

Suchst Du vielleicht so was in der Art?

Code: Alles auswählen

 
procedure TForm1.Panel1MouseEnter(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Panel1.Width:=100;
  Panel1.Left:=400;
end;
 
procedure TForm1.Panel1MouseLeave(Sender: TObject);
begin
  Panel1.Width:=5;
  Panel1.Left:=495;
end;
 

Das Panel ist am Anfang nur 5 Pixel breit. Kann man ja vielleicht noch etwas schmaler machen, wenn es eh dann am äußerstem Rand ist.
So bald man dann drüber führt, wird es 100 Pixel breit und verschiebt sich um 100 Pixel minus vorherige Breite (5) in den Bildschirm rein.
So bald man mit dem Mauszeiger das Panel verlässt, wird es wieder 5 Pixel schmal und verschiebt sich zurück an den Rand.

Oder wenn es einem nicht stört, dass es über den Rand hinaus geht, solte man es auch so machen können:

Code: Alles auswählen

 
procedure TForm1.Panel1MouseEnter(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Panel1.Left:=400;
end;
 
procedure TForm1.Panel1MouseLeave(Sender: TObject);
begin
  Panel1.Left:=495;
end;
 


Edit:
Panel1MouseMove im Code durch Panel1MouseEnter ersetzt, was noch einfacher und sinnvoller sein dürfte, und auch den Code schmaler machte.
Lazarus 2.2.0 / FP 3.2.4

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

Re: Einblendbares Tab Control

Beitrag von fliegermichl »

Ja klar, auf die einfachste Lösung kommt man nicht :-)
Danke

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Einblendbares Tab Control

Beitrag von mse »

Nimm ein teventwidget als Container (tab 'Widget', das Symbol mit dem roten Pfeil). teventwidget hat alle zur Verfügung stehende event-Eigenschaften als published Versionen. Dazu ein ttimer mit "options:= to_single". Setze buttoncontainer.OnChildMouseEvent und OnMouseEvent auf buttoncontainerOnMouseEvent_OnChildMouseEvent().

Code: Alles auswählen

 
procedure tmainfo.showbuttons();
begin
 hidetimer.enabled:= false;
 buttoncontainer.left:= width - buttoncontainer.width;
end;
 
procedure tmainfo.hidebuttons();
begin
 buttoncontainer.left:= width - 10;
end;
 
procedure tmainfo.hidetimerOnExecute(const sender: TObject);
begin
 hidebuttons();
end;
 
procedure tmainfo.buttoncontainerOnMouseEvent_OnChildMouseEvent(
              const sender: twidget; var ainfo: mouseeventinfoty);
begin
 case ainfo.eventkind of
  ek_mouseenter: begin
   showbuttons();
  end;
  ek_mouseleave: begin
   hidetimer.restart();
  end;
 end;
end;
 

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

Re: Einblendbares Tab Control

Beitrag von fliegermichl »

Ja so hab ich das jetzt gemacht und den Timer gleich noch dazu verwendet, den buttoncontainer animiert raus und rein zu fahren.

Danke

Antworten