Hallo, ich habe einen merkwürdigen Effekt beim Setzen von Document Properties festgestellt. Wenn ich eine eigene Datei erzeuge, den DocSummary-Stream anlege, klappt daß setzen von (String)-Properties nur wie folgt:
<pre>
FillChar (Prop, SizeOf (TPropVariant), #0);
Prop.vt := VT_LPWSTR; (müßte eigentlich VT_LPSTR sein, geht aber nur so!)
Prop.pszVal := PChar (Value);
FPropertyStorage.WriteMultiple (1, FPSpec, @Prop, PID_FIRST_USABLE)
</pre>
Öffne ich dagegen z.B. eine Word-Datei, klappt das Setzen nur so:
<pre>
FillChar (Prop, SizeOf (TPropVariant), #0);
Prop.vt := VT_LPSTR;
GetMem (Prop.pszVal, Length (Value)+1);
StrPCopy (Prop.pszVal, Value);
FPropertyStorage.WriteMultiple (1, FPSpec, @Prop, PID_FIRST_USABLE)
FreeMem (Prop.pszVal, Length (Value)+1);
</pre>
Kann es sein, daß es unterschiedliche Versionen des DocSummary-Strings gibt? Value ist in beiden Fällen ein WideString. Mit der 2. Variante klappt es bei eigenen Dateien nicht, und mit der 1. bei Office-Dateien nicht. Außerdem kann ich problemlos bei Office-Dateien die Properties HeadingPairs und TitlesOfParts lesen und schreiben, bei eigenen Dateien klappt es aber nicht, obwohl die Routine fehlerfrei durchläuft.
Danke
Matze
<pre>
FillChar (Prop, SizeOf (TPropVariant), #0);
Prop.vt := VT_LPWSTR; (müßte eigentlich VT_LPSTR sein, geht aber nur so!)
Prop.pszVal := PChar (Value);
FPropertyStorage.WriteMultiple (1, FPSpec, @Prop, PID_FIRST_USABLE)
</pre>
Öffne ich dagegen z.B. eine Word-Datei, klappt das Setzen nur so:
<pre>
FillChar (Prop, SizeOf (TPropVariant), #0);
Prop.vt := VT_LPSTR;
GetMem (Prop.pszVal, Length (Value)+1);
StrPCopy (Prop.pszVal, Value);
FPropertyStorage.WriteMultiple (1, FPSpec, @Prop, PID_FIRST_USABLE)
FreeMem (Prop.pszVal, Length (Value)+1);
</pre>
Kann es sein, daß es unterschiedliche Versionen des DocSummary-Strings gibt? Value ist in beiden Fällen ein WideString. Mit der 2. Variante klappt es bei eigenen Dateien nicht, und mit der 1. bei Office-Dateien nicht. Außerdem kann ich problemlos bei Office-Dateien die Properties HeadingPairs und TitlesOfParts lesen und schreiben, bei eigenen Dateien klappt es aber nicht, obwohl die Routine fehlerfrei durchläuft.
Danke
Matze
Comment