Dynamisch ein Bild in QRImage laden!



  • Ich habe einen Quickreport erstellt. Darin sollen Datensätze aus einer Datenbank dargestellt werden. Ein Feld der Datenbank beinhaltet für jeden Datensatz einen Pfad zu einer Screenshot-Datei. Jetzt möchte ich diesen Pfad abgreifen und den Screenshot anhand dessen dynamisch für jeden Datensatz laden und in einem QRImage darstellen. Gibt es da eine Lösung?


  • Mod

    Hallo

    moeglicherweise so:

    QRImage1->Picture->LoadFromFile (aBild);

    Mfg
    Klaus



  • Und, wenn ich mich richtig erinnere, kannst Du dafür im QR das Ereignis OnNeedData verwenden, um jeweils das entsprechende Bild zu laden.



  • Laden des Bildes aus einem Pfad ist klar, aber das Ereignis OnNeedData wird irgendwie nicht ausgeführt, wenn ich einen neuen Datensatz lade. Dadurch bekomme ich keinen aktuellen Pfad, den ich an das QRImage weiterleiten kann...



  • Ja, Du hast recht. OnNeedData ist für DataSet-freie Reports...

    Das QRImage liegt doch auf einem QR-Band. Dort gibt es das Ereignis BeforePrint. Dort kannst Du den Pfad aus dem DataSet auslesen und das Bild Laden. Dieses Ereignis wird für jeden zu druckenden Datensatz aufgerufen.



  • Hey super!
    Genau das wollte ich! Vielen Dank!



  • Ich möchte jetzt den Fall absichern, dass die Screenshot-Datei vorhanden ist. Ist dies nicht der Fall, soll das QRImage ausgeblendet werden. Leider funktioniert Visible = false nicht, selbst, wenn ich es zur Entwurfszeit false setze. Auch Enabled = false geht nicht, so wie es beispielsweise bei einem QRLabel funktioniert.



  • Keine Ahnung... Notfalls würde ich Stretch auf true setzen und eine 1 x 1 Pixel große, weisse 'Defaultgrafik' laden.



  • Ich muss das Ganze nochmal ein wenig ergänzen:

    Für die gewünschte Funktion nutze ich beide Funktionen des Parent-Bandes: AfterPrint und BeforePrint.

    void __fastcall TForm_ErgebnisReport::QRBand1AfterPrint(TQRCustomBand *Sender, bool BandPrinted)
    {
    	try
    	{
    		AnsiString ASScreenshotPfad = DM_Daten->AS_InstallDir + "Daten\\Screenshots\\" + Form_ErgebnisReport->QRDBText_DetailScreenshotFile->DataSet->FieldByName(DM_Daten->AS_ErgebnisseScreenshotFile)->AsString;
    		if (FileExists(ASScreenshotPfad))
    		{
    			Form_ErgebnisReport->QRImage_Screenshot->Picture->Bitmap->LoadFromFile(ASScreenshotPfad);
    		}
    	}
    	catch(...)
    	{
    	}
    }
    
    void __fastcall TForm_ErgebnisReport::QRBand1BeforePrint(TQRCustomBand *Sender, bool &PrintBand)
    {
    	try
    	{
    		AnsiString ASScreenshotPfad = DM_Daten->AS_InstallDir + "Daten\\Screenshots\\" + Form_ErgebnisReport->QRDBText_DetailScreenshotFile->DataSet->FieldByName(DM_Daten->AS_ErgebnisseScreenshotFile)->AsString;
    		if (FileExists(ASScreenshotPfad))
    		{
    			Form_ErgebnisReport->QRLabel_ScreenshotNichtVorhanden->Enabled = false;
    		}
    		else
    		{
    			Form_ErgebnisReport->QRLabel_ScreenshotNichtVorhanden->Enabled = true;
    		}
    	}
    	catch(...)
    	{
    	}
    }
    

    Dadurch kann ich im Fall einer nicht vorhanden Screenshot-Datei ein QRLabel anzeigen, das anzeigt, dass die Datei nicht vorhanden ist.


  • Mod

    Hallo

    also es sollte eigentlich so gehen

    QRImage1->Enabled = false/true;
    

    Was spricht der Debugger ?

    Mfg
    Klaus


Anmelden zum Antworten