Einzelnen Beitrag anzeigen

Ralf Stehle

Registriert seit: 8. Aug 2003
124 Beiträge
 
Delphi 7 Professional
 
#1

Word / OLE: Linie an aktueller Cursor-Position zeichnen

  Alt 7. Jul 2007, 10:36
Ich möchte mit Delphi in Microsoft-Word eine Linie an der aktuellen Cursorposition zu zeichnen.
Im Forum habe ich keinen Beitrag gefunden. Hier nach längerer Suche die Lösung.

In dem Beispiel-Code sind weitere OLE-Funktionen zu sehen:
Öffnen eines neuen Worddocumentes oder öffnen einer vorhandenen Datei
Einstellung der Tabulatoren und Seitenränder
Sprung zu einer Textmarke
Seitenumbruch


Delphi-Quellcode:
procedure WordOLE();
var
  VarFileName,Background, Append, Range, SaveChs: OleVariant;
  Position,Leader,Alignment, Seitenumbruch: OLEVariant;
  vParam, vBookmark, vWhat: OLEVariant;
  cDoc: string;
  i: integer;
begin
  MainForm.WordApplication1.Connect;
  MainForm.WordApplication1.Visible := true;

  //neues Dokument öffen
  MainForm.WordApplication1.Documents.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam);
  MainForm.WordDocument1.ConnectTo(MainForm.WordApplication1.ActiveDocument);

  {
  oder vorhandenes Document öffen:
  //Pfad muss in OLE-Variant umgewandelt werden
  cDoc := BriefPfad + BriefName; vParam := cDoc; 

  MainForm.WordApplication1.Documents.Open(vParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
  }


  Background:=false; Append:=false; Range:=wdPrintAllPages;

  With MainForm.WordApplication1.Selection do begin
    Alignment:= wdAlignTabLeft;
    Leader:=wdTabLeaderSpaces;
    PageSetup.Orientation := wdOrientPortrait;

    {*****       Seitenränder einrichten          *****}
    PageSetup.TopMargin := 42; // = 29; 0,035 * 29 = 1,015 cm 0,035 * 42 = 1,48 cm
    PageSetup.BottomMargin := 42;
    PageSetup.LeftMargin := 42; // = 42;
    PageSetup.RightMargin := 42;
    PageSetup.HeaderDistance := 0;
    PageSetup.FooterDistance := 0;

    {*****       Tabulatoren einrichten          *****}
    ParagraphFormat.TabStops.ClearAll;
    Position := 60; ParagraphFormat.Tabstops.Add(Position, Alignment, Leader);
    Position := 170; ParagraphFormat.Tabstops.Add(Position, Alignment, Leader);
    Position := 250; ParagraphFormat.Tabstops.Add(Position, Alignment, Leader);
    Position := 315; ParagraphFormat.Tabstops.Add(Position, Alignment, Leader);
    Position := 390; ParagraphFormat.Tabstops.Add(Position, Alignment, Leader);

    Font.Name:='Arial';
    Font.Bold:=integer(True);
    Font.Size :=11; TypeText('Dies ist ein Beispieltext in FETTDRUCK' + #13);
    Font.Bold:=integer(False);
    Font.Size :=9; TypeText('Schriftart 9' + #13 + #13);
 
    {*****       Linie zeichnen an aktuellen Zeilenposition      *****}
    i := Information[wdVerticalPositionRelativeToPage];
    // i enthält jetzt die aktuelle zum Programmierzeitpunkt unbekannte Cursors-Position
    MainForm.WordApplication1.ActiveDocument.Shapes.AddLine(50, i, 550, i, EmptyParam);

    TypeText('weiterer Text' + #13);
    TypeText('weiterer Text' + #13);
    TypeText('weiterer Text' + #13);

    {*****       Seitenumbruch          *****}
    Seitenumbruch := wdPageBreak;
    //Weitere Optionen: wdColumnBreak wdSectionBreakNextPage wdSectionBreakContinuous
    InsertBreak(Seitenumbruch); //Absatz fortlaufend einfügen

    Font.Name:='Arial'; Font.Size:=14; Font.Bold:=integer(True);
    TypeText(#13 + 'Zugänge der Inneren Abteilung' + #13); Font.Bold:=integer(False);

    
    {*****       zu Textmarke springen        *****}
    vBookmark:='Name der Textmarke'; vWhat:=wdGotoBookmark;
    GoTo_(vWhat,EmptyParam,EmptyParam,vBookmark);

  end; //With WordApplication1.Selection

  //MainForm.WordDocument1.PrintOut(Background, Append, Range);
  //SaveChs := wdDoNotSaveChanges;
  //MainForm.WordApplication1.ActiveDocument.Close(SaveChs, EmptyParam, EmptyParam);
  MainForm.WordDocument1.Disconnect;
  MainForm.WordApplication1.Disconnect;
end;
Ralf Stehle
ralfstehle@yahoo.de
  Mit Zitat antworten Zitat