gif-Datei in Html mit CDHtmlDialog darstellen



  • Hallo,

    bin jetzt nicht sicher, ob ich im richtigen Forum bin, da meine Frage wohl irgendwo zwischen HTML, DHTML und MFC liegt, aber vielleicht kann mir ja jemand helfen... 🙂

    Ich schreibe mittels der MFC ein Programm, welches einen Dialog der Klasse CDHtmlDialog enthält. Mit diesem Dialog kann man auf einfache Weise DHTML und HTML-Inhalte in einem MFC-Programm darstellen.

    Der Dialog stellt den geschriebenen Html-Code auch fast richtig dar, bis auf ein Bild, dass ich darstellen möchte.

    Die entsprechende Zeile für die Darstellung des Bildes ist:

    "<td align=\"center\"><img src=\"res\pc.gif\" width=\"175\" height=\"141\" border=\"0\" alt=\"\"> </td>" );
    

    Die \ Zeichen vor " brauche ich damit das Programm einwandfrei vom Kompiler kompiliert wird.
    Ohne diese würde die "reine" HTML-Anweisung also wie folgt aussehen:

    <td align="center"><img src="res\pc.gif" width="175" height="141" border="0" alt=""> </td>
    

    Diesen Code alleine in einem HTML-Editor ausgeführt öffnet auch das Bild im relativen Pfad ...Projektordner\res

    Ebenso sieht es auch beim MFC-Projekt aus:
    Das Projekt liegt in x:\ECClient22 und das Bild liegt in x:\ECClient22\res\

    Wenn ich das Programm jetzt starte, sehe ich auch den Bereich des Bildes mit der def. Größe, allerdings ist das Bild nicht da.
    Wenn ich die Eigenschafen des Bildes anschaue, kann ich im Pfad folgendes sehen:

    res://x:\ECClient22\Debug\ECClient22.exe/respc.gif

    Der hier gültige Projektordner wäre das Verzeichnis Debug, das hier die Exe für das Programm liegt.

    Was mich jetzt sehr stutzig macht, ist dass das das Bild in "x:\ECClient22.exe/respc.gif" sein soll.
    😕

    Offensichtlich habe ich also einen anderen Pfad als den angegebenen, aber warum?

    Hat vielleicht irgendjemann einen Tip für mich

    Danke Mutche



  • Ich vermute mal Du sagst uns nicht ganz die Wahrheit 😉
    Ich vermute mnal Du versuchst noch den aktuellen Pfad reinzubauen...
    Zeig doch mal den "richtigen" Code...

    HTML macht nicht plötzlich aus Deinem String einen anderen, oder?



  • Das mit den Escapezeichen vor Anführungszeichen stimmt ja schon mal. Du musst aber auch eins vor Backslashes machen. Dein Kompiler sollte dich da eigentlich gewarnt haben.
    Richtig müsste es also so aussehen:

    "<td align=\"center\"><img src=\"res[b][/b]\pc.gif\" width=\"175\" height=\"141\" border=\"0\" alt=\"\"> </td>"
    


  • Habe die Änderung mit dem \ im Pfad gemacht, leider hat das keine Änderung bewirkt.

    void CLockedDialog::DrawUserHtml(void)
    {
    
            // recreate the filelist table
    	CComPtr<IHTMLElement> spfileList;
    	//register html side to container
    	GetElementInterface(_T("CLockedDialog"), IID_IHTMLElement, (void **) &spfileList);
    
    	if (spfileList == NULL)
    		return;
    
    	CString strTable,str;
    
    //einfügen des Html-Codes
    
    strTable=	_T("<table height=\"10%\" bordercolordark=\"#000000\" bordercolorlight=\"#2F2F2F\" border=\"3\" width=\"100%\">")
    
            _T("<tr>")
     		_T("<td>");
    
    strTable +=	_T("<table height=\"10%\" border=\"0\" width=\"100%\">")
    						_T("<tr>");
    strTable +=	_T("<td align=\"center\"><img src=\"res\\pc.gif\" width=\"175\" height=\"141\" border=\"0\" alt=\"\"> </td>" );
    
    strTable +=	_T("<td align=\"center\"><font size=\"10\"color=\"#9F0000\">Client zur Zeit gesperrt</font> <br> Clientname: VARIABLE_CLIENTNAME </td>")
    		_T("</tr>")
    		_T("</table>");
    
    strTable +=	_T("<hr noshade color=\"#000000\" size=\"2\">")
    		_T("<table height=\"10%\" border=\"0\" width=\"100%\">")
    		_T("<tr>")
    		_T("<td align=\"center\">2. Tabellen Zeile </td>")
    		_T("</tr>")
    		_T("</table>")
    	        _T("</td>")
    		_T("</tr>")
    		_T("</table>")
    
    ;//end strTable= .,..
    
    strTable += _T("</TABLE>");
    
    	BSTR bstrTable = strTable.AllocSysString();
    
    	spfileList->put_innerHTML(bstrTable);
    
    	SysFreeString(bstrTable);
    }
    

    Was mich allerding stutig mach ist, dass nach der Änderung in der Eigenschaft des Bild in Dialog für den Pfad folgendes steht

    res://x:\ECClient22\Debug\ECClient22.exe**/res\pc.gif**

    Was mich sehr wunder ist, dass der relative Pfad für das Bild dem MFC-Programm wie ein Übergabeparameter angehängt wird.

    Normalerweise müsste unter den Eigenschaften des Bildes im MFC-Programm eigentlich folgendes stehen.

    res://x:ECClient22\res\pc.gif



  • Du hast recht, das ist in der Tat seltsam. Aber nicht weiter schlimm. Versuch es so:

    CString GetProgramPath()
    {
        char buf[256]; 
        GetModuleFileName(NULL, buf, 255); 
        CString strPfad; 
        strPfad.Format("%s", buf); 
        int nTmp = strPfad.ReverseFind('\\'); 
        strPfad.Delete(nTmp,strPfad.GetLength()-nTmp);
        return strPfad;
    }
    
    ...
    strTable +=    _T("<td align=\"center\"><img src=\""+GetProgramPath()+"\\res\\pc.gif\" width=\"175\" height=\"141\" border=\"0\" alt=\"\"> </td>" );
    
    ...
    


  • Cool danke das geht.

    Gruß Mutche 😃


Anmelden zum Antworten