CHtmlView ?



  • Hallo Forum.

    Wie kann ich ein HTML-Dokument, welches in meiner Anwendung durch CHTMLView dargestellt wird mit Daten füttern?

    Konkret:

    Ich möchte in einem HTML-Dokument eine Tabelle anzeigen, welche Daten aus einer Datenbank aufnehmen soll. Wie kann ich die Daten von meiner Anwendung in das GTML-Dokument übertragen?

    P.S.: Die anzahl der zeilen der Tabelle ändert sich.

    Ich bitte um ein paar Vorschläge.



  • Ok, scheint nicht so einfach zu sein.

    Wie kann ich Das selbe mit einem Word Dokument machen?



  • Hmm.. Ich glaube kaum, das man das CHTMLView direkt mit eigenen HTML Commandos füttern kann. Der absolute Notfallweg wäre dann noch, selbst eine Datei mit den HTML Commandos zu erstellen und das HTMLView Control dann diese anzeigen zu lassen, sobald sie fertig ist.



  • Ich hatte mal ein ähnliches Problem, sieh Dir mal die Dokumentation von CHTMLView::GetHtmlDokument() IHTMLDokument2 und IHTMLElement an. Damit kann man eine ganze Menge anfangen. Hier gleich noch 2 Beispielfunktionen. Die erste ersetzt den Inhalt eines HTML-Tags durch einen beliebigen Text. Die zweite gibt einen Zeiger auf ein Html-Element mit einer bestimmten ID zurück.

    void CHtmlFenster::do_ersetzen(_bstr_t ID,_bstr_t text){
        CComPtr<IHTMLElement> element;
    	if (getHtmlElement(ID,element)) element->put_innerText(text);
    }
    
    bool CHtmlFenster::getHtmlElement(_bstr_t ID,CComPtr<IHTMLElement> &elem){
    	LPDISPATCH dokument;
    	CComPtr<IHTMLDocument2> spHTMLDoc2;
    	LPDISPATCH element;
    	HRESULT b=E_NOINTERFACE;
    	CComPtr<IHTMLElementCollection> spHTMLcoll;
    	LONG anzObj;
    	BSTR id;
    	_bstr_t idtest;
    	VARIANT varIndex;
    	VARIANT var2;
    
    	dokument=GetHtmlDocument();
    
    	if (dokument!=NULL) b=dokument->QueryInterface(IID_IHTMLDocument2, (void**) &spHTMLDoc2);
    	if (b==S_OK) {
    		b=spHTMLDoc2->get_all(&spHTMLcoll);
    		if (b==S_OK){
    			b = spHTMLcoll->get_length(&anzObj);
    			if (b==S_OK){ 
    				for ( int i=0; i< anzObj; i++ ) { 
    					varIndex.vt = VT_UINT;
    					varIndex.lVal = i;
    					VariantInit( &var2 );
    					b = spHTMLcoll->item( varIndex, var2, &element ); 
    					if (b==S_OK){
    						b=element->QueryInterface(IID_IHTMLElement, (void**) &elem);
    						if (b==S_OK){
    							elem->get_id(&id);
    							idtest=id;
    							if (idtest==ID) return true;
    							elem.Release();
    						}
    					}
    				}
    			}
    		}
    	}
    	return false;
    }
    


  • Danke für die Hilfe.
    Ich glaube ich werde eine kombinierte Lösung realisieren.

    Eine Frage noch (ist jetzt mehr HTML spezifisch, möchte aber dewegen keinen neuen Thread anfangen): Wie kann ich im Html-Dokument den Namen der Datei anzeigen?
    Müsste irgend wie mit VBScript gehen, oder?



  • Mit irgeneinem Script würde das wahrscheinlich schon irgendwie gehen, aber wenn du ihm die Commandos ja sowieso selber schickst, warum schickst du ihm dann nicht einfach auch den Namen der HTML Datei. (den müsste dein C Programm doch derart kennen, oder;))



  • Ja schon. Aber ich will den Dateinamen einfach als Text anzeigen. Und auf den kann ich nicht zugreifen, weil er keine Id hat. Oder doch?

    Wie kann ich, wenn ich mir jetzt eine tabelle geholt habe, diese mit Daten füttern?


Anmelden zum Antworten