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


Anmelden zum Antworten