AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Objektgröße zur Laufzeit ändern

Ein Thema von Anubarak · begonnen am 28. Okt 2011 · letzter Beitrag vom 28. Okt 2011
Antwort Antwort
Anubarak

Registriert seit: 23. Okt 2011
2 Beiträge
 
#1

Objektgröße zur Laufzeit ändern

  Alt 28. Okt 2011, 14:18
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Objektgröße zur Laufzeit ändern

  Alt 28. Okt 2011, 14:40
Hallo und Willkommen in der 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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Objektgröße zur Laufzeit ändern

  Alt 28. Okt 2011, 14:46
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Anubarak

Registriert seit: 23. Okt 2011
2 Beiträge
 
#4

AW: Objektgröße zur Laufzeit ändern

  Alt 28. Okt 2011, 15:28
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz