Hallo, alle miteinander!
Die Font-Probleme (betraf auch das ParagraphFormat) sind jetzt gelöst. Folgender Code funktioniert sowohl in Word2000 als auch in Word2003:
Delphi-Quellcode:
function TWordSettings.Style_Create(Format: TFormat): Style;
var
_Type: OleVariant;
MF: TWordFont;
MP: TWordParagraphFormat;
TemplateIdx: OleVariant;
LevelIdx: OleVariant;
LG: ListGallery;
srvIntfFont, _MF: _Font;
srvIntfPara, _MP: _ParagraphFormat;
[...]
begin
Result := nil;
_Type := wdStyleTypeParagraph;
if Assigned ( Format ) then begin
if HasActiveDocument then begin
Result := Style_GetStyle ( Format.StyleInfoAF.Name );
if Result = nil then
Result := FWord.ActiveDocument.Styles.Add ( Format.StyleInfoAF.Name, _Type );
// In Result können jetzt die Werte eingetragen werden...
with Format.StyleInfoAF do begin
// Allgemein
try
Result.Set_LanguageID ( LanguageID );
except
end;
// Link 2 List
if Format.Link2ListSet then begin
try
LG := FWord.ListGalleries.item(LinkToList.GalleryIdx.Value);
LevelIdx := LinkToList.LevelIdx.Value;
TemplateIdx := LinkToList.TemplateIdx.Value;
Result.LinkToListTemplate ( LG.ListTemplates.item(TemplateIdx), LevelIdx );
// Und in die Listgallery eintragen
LG.ListTemplates.item(TemplateIdx).ListLevels.Item(LevelIdx).Set_LinkedStyle ( Name );
except
end;
end;
// Font
try
// Verbindung herstellen - Dazu wird ein Objekt
// Einer CoClass gebildet und mit dem Font-Interface des
// Styles verbunden
MF := TWordFont.Create ( nil );
srvIntfFont := Result.Font as Word_TLB._Font;
if srvIntfFont <> nil then begin
MF.ConnectTo ( srvIntfFont as Word_TLB._Font );
end else begin
if FDebug then ShowMessage ( 'Kein Font-Interface' );
end;
// Erstaunlicherweise reicht die CoClass nicht, sondern man muss
// ein Duplikat des Interfaces erzeugen. Dieses Duplikat kann man
// bearbeiten und dem Style später wieder zuweisen...
_MF := MF.Duplicate;
// Werte eintragen
with Font do begin
_MF.Name := Name.Value;
_MF.Size := Size.Value;
if Bold.Value then _MF.Bold := 1 else _MF.Bold := 0;
if Italic.Value then _MF.Italic := 1 else _MF.Italic := 0;
if Underline.Value then _MF.Underline := 1 else _MF.Underline := 0;
[...]
end;
Result.Font := _MF;
MF.Destroy;
Ein weiteres Problem stellen aber die Positionsrahmen innerhalb des Styles dar. Hier gibt es keine CoClass, die ich verwenden kann. Außerdem kann ich im Style den Frame nur LESEN und nicht SCHREIBEN...
Matthias