Prpgressbar bei Bilderladen!



  • TPicture hat ein Ereignis OnProgress!(als Property ansprechbar)

    Du musst eine Funktion dafuer implementieren.

    Der Property OnProgress des TImage->Picture muss diese Funktion zugewiesen werden.

    In der Funktion steuerst Du die Progressbar!

    PS: Ich such mal, ob ich mein Beispiel finde.



  • Die Funktion kann so aussehen:

    void __fastcall TForm1::ImageLoadProgress(TObject *Sender,
          TProgressStage Stage, BYTE PercentDone, bool RedrawNow,
          const TRect &R, const AnsiString Msg)
    {
      ProgressBar1->Position=10 + (90 * PercentDone) / 100;
      if (Stage==psEnding)
        ProgressBar1->Position=0;
    }
    

    Vergiss nicht in Headerdatei die Deklaration auch aufzunehmen. (private der Form)

    Bei OnActivate() der Form1 machst Du den:

    Image1->OnProgress=ImageLoadProgress;

    Dann sollte das gehen.

    PS: bei kleinen Bildern haste keine Anzeige - geht zu schnell, da wird OnProgress nicht gerufen!



  • Vielen Dank! Funzt!! :p



  • DerAltenburger schrieb:

    PS: bei kleinen Bildern haste keine Anzeige - geht zu schnell, da wird OnProgress nicht gerufen!

    Was ist bei dir "klein"? Hier feuert OnPrograss auch bei einem 130 MB Bitmap nicht. Jedenfalls nicht beim LoadFromFile, und das dauert etliche Sekunden.

    TPicture hat ein Ereignis OnProgress!(als Property ansprechbar)
    Du musst eine Funktion dafuer implementieren.

    Warum das, warum nicht einfach das OnProgress-Ereignis von TImage direkt verwenden?

    Bei mir funktionieren jedenfalls beide Varianten nicht.



  • Jansen schrieb:

    <fullquote gelöscht>

    Also bei mir funktioniert alles wunderbar!!! Den Ladebalken sieht man zwar bei kleineren Bildern bis ca. 600kB kaum, aber ab 1MB sieht man ihn schön aufbauen 😃

    Edit:
    Zitate bitte auf das Notwendigste beschränken. Danke!



  • Jansen schrieb:

    Was ist bei dir "klein"? Hier feuert OnPrograss auch bei einem 130 MB Bitmap nicht.

    Warum das, warum nicht einfach das OnProgress-Ereignis von TImage direkt verwenden?

    Bei mir klappt das 😉 😕

    Soweit ich gelesen hab', geht das aber nicht bei BMP- Dateien. Nur JPG und ev GIF.

    Das mit TImage->OnProgress hatte ich im Beispielcode schon korrigiert! 🕶



  • VCL-Referenz schrieb:

    beim Laden großer komprimierter Grafiken

    Ich tippe mal, es funktioniert nur bei komprimierten Grafikformaten. Zu denen das Standard-Windows-bmp meines Wissens nach nicht wirklich zählt.



  • Die Hilfe schreibt "z.B. beim Laden großer komprimierter Bilder", schliesst also unkomprimierte Bilder nicht ausdrücklich aus. Funktionieren tut es aber trotzdem nur bei komprimierten Bildern, was die Nützlichkeit der Funktion doch stark einschränkt.

    DerAltenburger schrieb:

    Das mit TImage->OnProgress hatte ich im Beispielcode schon korrigiert!

    Ähm, ich sehe keine Änderungen an deinen Beiträgen!?



  • @Jansen:
    Mein Beitrag vom 14.4.04 14:14

    DerAltenburger schrieb:

    .
    .
    .
    Bei OnActivate() der Form1 machst Du den:

    Image1->OnProgress=ImageLoadProgress;

    Dann sollte das gehen.
    .
    .
    .

    PS: ist keine Aenderung, hab's gleich anders formuliert im Folgebeitrag! 😃



  • DerAltenburger schrieb:

    Bei OnActivate() der Form1 machst Du den:

    Image1->OnProgress=ImageLoadProgress;

    Hmm, das ist doch der springende Punkt: wozu eine extra Funktion und diese dann Image->OnProgress zuweisen, anstatt OnProgress selbst zu benutzen?



  • @Jansen

    OK! Da haste natuerlich recht! Ich hab' das Speibiel aus ner Komponente gezogen, wo das TImage dynamisch erzeugt wird - daher die Zuweisung! 🕶

    Das ist natuerlich hier nicht noetig.


Anmelden zum Antworten