Evtl. Problem beim Laden neuer Bitmaps in eine BitBtn-Komponente



  • Hallo,

    auf einem Formular habe ich 40 BitBtn-Objekte. Während der Laufzeit lade ich für all diese ein neues Bitmap in die Eigenschaft Glyph mit folgendem Befehl:

    dynamic_cast<TBitBtn*>(Form1->Components[z2])->Glyph->LoadFromFile("bild.bmp");
    

    Kann es sein, dass der LoadFromFile-Befehl, der ja 40mal hintereinander aufgerufen wird, die Ursache für ein Betriebssystemfehler "Die Anweisung in ... verweist auf Speicher in ... Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden." sein kann?

    Danke!



  • Hallo,

    Ich glaube eher, daß eines der Components auf Form1 kein TBitBtn ist.
    Oder überprüfst Du das vorher ?

    Nash



  • Ja, anhand des Komponentennamens.



  • Hallo,

    Naja, ich glaube das hier ist sicherer :

    if (dynamic_cast<TBitBtn*>(Form2->Components[z2]) != NULL)
        dynamic_cast<TBitBtn*>(Form2->Components[z2])->Glyph->LoadFromFile("bild.bmp");
    

    Ich hab das gerade mal mit 45 BitBtn versucht und das funktioniert.

    Aber mal 'ne andere Frage, wieso benutzt Du LoadFromFile ? Pack doch lieber die benötigten Bilder in eine ImageList und lade die von da.

    Nash



  • Ein cast reicht

    TBitBtn* btn(dynamic_cast<TBitBtn*>(Form2->Components[z2]));
    if ( btn)
       btn->Glyph->LoadFromFile("bild.bmp");
    


  • Ist es von Nachteil, wenn man zu oft hintereinander cast benutzt?

    Das mit der Imageliste muss ich mir einmal ansehen, Danke!



  • teacherwilli schrieb:

    Ist es von Nachteil, wenn man zu oft hintereinander cast benutzt?

    Ja, es macht den Code unleserlicher. 🙂
    Es gibt da noch einen kleinen Performancenachteil, der hier aber wohl nicht ins Gewicht fällt.


Anmelden zum Antworten