servus
Moniker? Sie geben deinen Daten innerhalb einer Datei einen "Namen". Wenn du nen Word Dokument hast und da ne Excel Tabelle einbettest, dann wird beides in die DOC Datei gespeichert. Mit Hilfe von Monikern kannst du nun nur die Excel Tabelle öffnen, ohne Word zu starten. Oder was ganz anderes:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| Var bc: IBindCtx; m: IMoniker; iu: IUnknown; Doc: WordDocument; Begin OleCheck(CreateBindCtx(0, bc)); OleCheck(CreateFileMoniker('c:\xxx.doc'#0, m));
OleCheck(m.BindToObject(..., IUnknown, iu)); // Ole32 hat jetzt die doc datei geöffnet und "bemerkt", dann sie die // classid von Word enthält. also startet Ole32 nun Word und gibt mir // einen IUnknown zeiger darauf zurück.
OleCheck(iu.QueryInterface(WordDocument, Doc));
// Nun hat man einen Zeiger auf Word. Bis dahin noch nichts // besonderes aber man kann jetzt ohne weiteres aus der c:\xxx.doc // ne c:\xxx.xls oder aber auch http://delphi-forum.de machen. // moniker starten dann immer die entsprechende anwendung und // geben den benötigten zeiger zurück. // zellbereich in excel: c:\parts.xls!A7:H6, bekommst du nen ICellRange // interface zurück.
bc := Nil; m := Nil; iu := Nil; Doc := Nil; End; { nicht getestet } |
das ganze ist aber bitte nicht mit shellexecute oder so zu verwechseln was ja bekanntlich auch ne anwendung startet.
Wie man die Dinger benutzt weiß ich (siehe oben). Wie man son objekt definiert was man so laden und speichern kann auch aber ich kann es ebend nur mit "kompletten dateien". ich will das es mit teilen einer datei auch klappt. sowieso ist das ganze Persistente Zeugs von MS ziemlich undurchsichtig für mich.
dachte hier weiß einer weiter.
ase