Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Objektgröße zur Laufzeit ändern (https://www.delphipraxis.net/164098-objektgroesse-zur-laufzeit-aendern.html)

Anubarak 28. Okt 2011 14:18

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:
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;
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...
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

DeddyH 28. Okt 2011 14:40

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.

stahli 28. Okt 2011 14:46

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.

Anubarak 28. Okt 2011 15:28

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:

Welche Delphi-Version hast Du denn?
eigentlich Delphi 7 aber da mein eigentlicher PC kaputt ist und ich kein Geld für einen neuen habe (das Programmieren jedoch nicht aufgeben will) musste ich einen 11 Jahre alten Windows 2000 Rechner nutzen und auf dem läuft nur lazarus und kein Delphi (für XP reicht die Hardware nicht)

Zitat:

Vielleicht könntest Du statt dem Sleep das Parent deines PageControls Refreshen und damit die schwarzen Striche reduzieren?
klappt, perfekt, danke für den Hinweis
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