Absturz beim laden von Bild



  • Hey,

    Ich hab in meinem Programm 2 verschiedene Funktionen die ein Bild hochladen sollen doch irgendwie funktionieren die zusammen nicht, also einzeln gehen beide ohne Probleme. Ich hab keine Ahnung warum die sich zusammen nicht vertragen?

    b = new Graphics::TBitmap();
    b->LoadFromFile("Test.bmp");
    
    OpenPictureDialog->Execute();
    

    Eigentlich ist es komplexer aber ich hab es auf das reduziert und es stürzt immer noch ab 😮

    Fehlermeldung: EFOpenError, Test.bmp kann nicht geöffnet werden.

    Kann mir da jemand von euch helfen? Danke im voraus 🙂


  • Mod

    Hallo

    tja, ich sage mal diese Datei existiert (an der Stelle) nicht
    (richtiges Verzeichnis ?)

    Mfg
    Klaus



  • Hallo

    Auf jedenfall ist aus deinen Quellcodeauszügen kein Syntaktischer Fehler zu erkennen...
    Der Fehler ergibt sich also erst durch den Zusammenhang bzw. die Zusammenarbeit.
    Außerdem wird nicht klar was du mit Hochladen meinst.
    Der genannte Fehler kommt aber aus dem Dateisystem und bedeutet entweder das die Datei überhauptnicht an der angegeben Stelle ist, beschädigt ist oder kein gültiges BMP ist.

    bis bald
    akari



  • Danke für die schnelle Antwort.

    Das Problem ist nur das jedes einzeln wunderbar klappt, nur wenn ich beide nacheinander ausfür geht nichts mehr und kommt die Fehlermeldung.



  • Ich hab noch mal ein ganz neues geschrieben, hier tritt auch der selbe Fehler auf. Solang ich nur ein Button drück läuft es so wie es soll doch so bald ich den 2ten drück stürz es mit entsprechender Fehlermeldung ab 😞

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     try{
         if(OpenPictureDialog1->Execute()) {
              b->LoadFromFile(OpenPictureDialog1->FileName);
              Image1->Picture->Bitmap = b;
         }
     }catch(...){
     }
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
     try{
        b->LoadFromFile("Test.bmp");
        Image1->Picture->Bitmap = b;
     }catch(...){
     }
    }
    


  • Nochmal gesagt.
    Das Bild scheint dann an dieser Stelle nicht zu existieren.
    Eventuell solltest du den Pfad zur Datei mit angeben.



  • Jo du hast recht mit

    b->LoadFromFile("c:\\Neuer Ordner\\Test.bmp");
    

    geht es!
    Danke erst mal, aber das ist mir etwas zu statisch, da kann man ja nicht mal mehr den Ordner verschieben oO habt ihr dafür auch eine Lösung?



  • Hallo

    Nicht eventuell, sondern ganz bestimmt. LoadFromFile sucht immer im aktuellen Arbeitspfad wenn kein Pfad angegeben wird. Das heißt der erste Zugriff klappt noch weil beim Anfang der Arbeitspfad noch der Programmpfad ist. Aber mit dem TOpenDialog stellst du den Arbeitspfad um, und Test.bmp wird in dem neuen Arbeitspfad nicht gefunden.

    Du solltest also immer im Quellcode Pfadangaben verwenden, entweder feste oder vom User eingegebene.

    /Edit : Du must wie gesagt den Pfad eben vom User eingeben lassen oder aus einer festen Konfigurationsdatei/Registry auslesen.

    bis bald
    akari



  • Ok hab meine Frage selbst beantwortet 😃

    b->LoadFromFile("..\\Neuer Ordner\\Test.bmp");
    

    Vielen Dank an alle :p


Anmelden zum Antworten