Einzelnen Beitrag anzeigen

mjenke

Registriert seit: 28. Mär 2003
Ort: Bonn
131 Beiträge
 
#3

Re: AddIn funktioniert nicht richtig (Word2003)

  Alt 9. Jan 2007, 12:05
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
Matthias Jenke
  Mit Zitat antworten Zitat