Prpgressbar bei Bilderladen!



  • BorlandNewbie schrieb:

    Habe es jetzt auch ohne die Suchfunktion hinbekommen

    Dass bei deiner Lösung die ProgressBar alles mögliche anzeigt, nur nicht den Fortschritt beim Laden des Bildes, dessen bist du dir bewusst!?

    Zu dem "NonStop"-Problem: ich sehe dich nirgendwo den Timer starten, also wird das wohl erst beim Timer1->Enabled = !Timer1->Enabled; geschehen. Und da du den Timer anschliessend nicht stoppst läüft er halt ewig (bzw. bis zum nächsten Klick) weiter.

    Konstrukte wie x = !x sind zwar ganz nett, verleiten aber dazu, logische Fehler zu übersehen. Wenn es wichtig ist, einen definierten Status zu erreichen, dann sollte lieber mit absoluten Zuweisungen gearbeitet werden. Mit Timer1->Enabled = false; wäre dir sicher selbst ein Licht aufgegangen.



  • Hi!

    Das Licht ist mir schon vor deiner Antwort aufgegangen 🙂
    Zu dem Punkt das ich alles andere mache als etwas Laden, bin ich jetzt auch dahinter gekommen. Das Problem ist das ich in meinem Code nur die Progressbar füllen lasse, richtig?

    So nun habe ich nach einer Lösung gesucht, gefunden habe ich LoadFromStream, hierbei wird ja ein Stream ausgelesen und geladen. Nur habe ich das Problem die Hilfe bringt nix und hier im Forum ist glaube ich zu diesem Thema auch nicht viel!

    Hast du vielleicht ein Beispiel wie ich mein Problem realisieren kann?

    Thanx! *BolandNewbie*



  • Keine Ideen? 😕



  • Wie wär's, wenn du dir nochmal den oben verlinkten Thread durchliest?



  • Jansen schrieb:

    Wie wär's, wenn du dir nochmal den oben verlinkten Thread durchliest?

    So jetzt habe ich mir das alles durchgelesen, Hilfe gelesen im Inet gesucht und ich bekomme das nicht hin! Was soll ich den mit fgetc und so....?
    Ich möchte doch per Stream die Datei laden und dann mit der Progressbar verbinden!
    Ich weiß wirklich nicht mehr wie ich das realisieren soll... HILFE!!! 😞



  • Du willst den Fortschritt des BILD- Ladens (eines einzelnen Bildes) darstellen?

    Dann schau Dir mal in der Hilfe zu TPicture an, was zu

    OnProgress

    steht! 😉



  • Hi Leute!!

    Ich finde es ja überhaupt nicht lustig, wenn hier Anfänger verar****t werden 😃

    Erst heißt es "Streams", dann mal wieder ne Variante mit "fgetc" und nun mit "TPicture OnProgress"! Also was den nun? Ich blicke ja jetzt gernicht mehr durch...

    Könnte man sich auf eine Variante einigen und mir eine Hilfe geben? 🙂



  • Dich will hier keiner verar******! 🙄

    Du drueckst Dich nur nicht ganz klar aus. Ich hab' Dir eine Frage gestellt, und fuer den Fall, dass ich richtig vermute, einen Tip gegeben.



  • DerAltenburger schrieb:

    Dich will hier keiner verar******! 🙄

    Du drueckst Dich nur nicht ganz klar aus. Ich hab' Dir eine Frage gestellt, und fuer den Fall, dass ich richtig vermute, einen Tip gegeben.

    Ja ich will den Fortschritt eine Bildes in der Progressbar anzeigen! Aber mit TPiture finde ich da keine Möglichkeit!!! Und nun?



  • 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