![]() |
Objektgröße zur Laufzeit ändern
hallo liebe Delphi Freunde..
seit einiger Zeit versuche ich eine art Spoiler für Delphi zu erstellen, bisher war ich dabei nicht sehr erfolgreich also habe ich versucht es so gut wie möglich "nachzustellen" indem ich eine Pagecontrol ganz klein gemacht habe, sodass man lediglich die Caption sieht. Jetzt habe ich versucht per OnMouseEnter und OnMouseLeave Event die größe der PageControl zu ändern, dass sie eine vorher im OI festgelegte größe erreicht. Eigentlich alles gar kein Problem, nur sieht das wirklich schei**e aus, wenn die Pagecontrol mit einen mal größer wird. Deswegen wollte ich die Pagecontrol in einer schleife größer machen lassen ungefähr so hier
Code:
Problem hierbei: ohne refresh ändert sich die größe des Objektes erst wenn die schleife durchlaufen war also immernoch ruckartig was unschön aussieht. Mit einen refresh besteht das Problem, dass das OnMouseLeave event direkt gestartet wurde, sodass sich die PageControl direkt wieder verkleinert...
procedure TForm1.PageControl1MouseEnter(Sender: TObject);
var i : integer; begin with sender as TPageControl do begin for i := Constraints.MinHeight to Constraints.MaxHeight do begin Height:=Height+1; width:=width+1; refresh; sleep(10); end; end; end; Außerdem entstehen beim verkleinern des Objektes "schwarze Linien" bzw ein schwarzer Hintergrund nachdem es verkleinert wurde, der erst weg geht, wenn die Procedure endet. Eine Maus position abfrage wollte ich auch erst versuchen und dann darüber bestimmen ob die Maus drüber ist oder eben nicht, da ich allerdings 10 verschiedene pagecontrols habe wäre das etwas aufwendig Ich hoffe sehr, dass mir jemand helfen kann vielen dank |
AW: Objektgröße zur Laufzeit ändern
Hallo und Willkommen in der DP :dp:,
nicht sonderlich elegant, aber versuch es vorerst mal damit: deklarier Dir ein privates Boolean-Feld (z.B. FBusy) und setz das am Anfang des Vergößerns/Verkleinerns auf true, am Ende wieder auf false. Im OnMouseXXX fragst Du dann ab, ob FBusy false ist und nur dann stößt Du die Größenänderung an. Außerdem solltest Du im OnMouseLeave noch abprüfen, ob das Control unter der Maus ein TabSheet ist, sonst kann man mit dem PageControl ja nichts anfangen. |
AW: Objektgröße zur Laufzeit ändern
Welche Delphi-Version hast Du denn?
Vielleicht könntest Du statt dem Sleep das Parent deines PageControls Refreshen und damit die schwarzen Striche reduzieren? Mit einem neueren Delphi könnte man probiren, ob DoubleBuffered:=True im Formular/PageControl/TabSheet etwas bringt. |
AW: Objektgröße zur Laufzeit ändern
Erstmal vielen dank für die Hilfe und danke fürs Willkommen heißen^^
@DeddyH stimmt, dumm von mir ich habe komplett vergessen, wenn die Maus vom PageControl zum TabSheet geht, dass dann das event ausgelöst wird v.v @stahli Zitat:
Zitat:
bisher kannte ich die Funktion des Parent.Refresh gar nicht xD |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 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