Fenster-Animation: Form oder Panel aus der Bildschirmmitte aufziehen
-
Hallo zusammen,
ich möchte ein Fenster realisieren, das sich aus der Bildschirmmitte quasi explosionsartig aufzieht (aufzoomt).
Dazu habe ich es zunächst mit einer for-Schleife in der Show-Methode des Formulars versucht. Bei einer Schleife mit z.B. 100 Schritten zeigte sich nur das Endergebnis. Es gelingt mir nicht, per Form->Repaint() oder Form->Update() die Zwischenschritte anzuzeigen.
Auch mittels einer Timer-Komponente erreiche ich nicht das gewünschte Ergebnis.
Hat jemand eine Idee?!Gruß
Leo
-
Schau Dir mal
Application->ProcessMessages()
an
-
MichelRT schrieb:
Schau Dir mal
Application->ProcessMessages()
an
Das hatte ich bereits probiert, leider ohne Erfolg!
int iWidth_merk = Panel1->Width; int iHeight_merk = Panel1->Height; float fFaktor = (float)Panel1->Width/(float)Panel1->Height; int iGrz = iHeight_merk; for(int i=0; i<iGrz; i++){ Panel1->Height = i; Panel1->Width = RoundTo(i * fFaktor, 0); Label1->Caption = IntToStr(i); //Panel1->Repaint(); //Panel1->Update(); Application->ProcessMessages(); //Sleep(1); }
Gibt's weitere Ideen?
Gruß
Leo
-
Wo rufst du denn diesen Code auf? Und ein Timer wäre auf jeden Fall die bessere Alternative...
-
Du verschiebst das Panel1 wolltest du nicht die Form aufziehen?
-
Sorry, hatte einen blöden Anfängerfehler drin (vergessen die Laufvariable hochzuzählen, schäm).
Mit der Timer-Variante funktioniert's, sogar ohne Repaint, Update oder Application->ProcessMessages().
So läuft's:
void __fastcall TForm_Growing::FormShow(TObject *Sender) { mfFaktor = (float)Panel1->Width/(float)Panel1->Height; miGrz = Panel1->Height; // merkt die Panel-Höhe miLauf = 0; Timer1->Enabled = true; } //-------------------------------------------------------- void __fastcall TForm_Growing::Timer1Timer(TObject *Sender) { Panel1->Height = miLauf; Panel1->Width = RoundTo(miLauf * mfFaktor, 0); Label1->Caption = IntToStr(miLauf); if(miLauf >= miGrz){ Timer1->Enabled = false; }else{ miLauf++; } } //--------------------------------------------------------
Besten Dank für's Mitdenken!
Leo