Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Rahmen in der Kopfzeile von Word zeichnen (OLE) (https://www.delphipraxis.net/117808-rahmen-der-kopfzeile-von-word-zeichnen-ole.html)

little_budda 25. Jul 2008 09:41


Rahmen in der Kopfzeile von Word zeichnen (OLE)
 
Hallo,

ich habe folgenden Code mit dem Makrorecorder von Word aufgezeichnet
Delphi-Quellcode:
// Dies ist VBA Code, aber als Zitat wird er leider nicht eingerückt dargestellt
    With Selection.ParagraphFormat
        .Borders(wdBorderLeft).LineStyle = wdLineStyleNone
        .Borders(wdBorderRight).LineStyle = wdLineStyleNone
        .Borders(wdBorderTop).LineStyle = wdLineStyleNone
        With .Borders(wdBorderBottom)
            .LineStyle = wdLineStyleSingle
            .LineWidth = wdLineWidth050pt
            .ColorIndex = wdAuto
        End With
        With .Borders
            .DistanceFromTop = 1
            .DistanceFromLeft = 4
            .DistanceFromBottom = 1
            .DistanceFromRight = 4
            .Shadow = False
        End With
    End With
Nun habe ich versucht ihn in Delphi umzusetzen
Delphi-Quellcode:
...

var WordApp: OLEVariant;

...

  With WordApp.Selection.ParagraphFormat do
    begin
      Borders(-2 {=wdBorderLeft}).LineStyle := 0; // = wdLineStyleNone
      Borders(-4 {=wdBorderRight}).LineStyle := 0; // = wdLineStyleNone
      Borders(-1 {=wdBorderTop}).LineStyle := 0;  // = wdLineStyleNone
      With Borders(-3 {=wdBorderBottom}) do
        begin
          LineStyle := 1; // = wdLineStyleSingle
          LineWidth := 4; // = wdLineWidth050pt
          ColorIndex := 0; // = wdAuto
        end;
      With Borders do
        begin
          DistanceFromTop := 1;
          DistanceFromLeft := 4;
          DistanceFromBottom := 1;
          DistanceFromRight := 4;
          Shadow := False;
        end;
    end;
Beim Compilieren bringt mir die IDE immer einen fehler "Record, Objekt oder Klassentyp erforderlich" bei
Delphi-Quellcode:
With WordApp.Selection.ParagraphFormat do
Was bitte mache ich denn falsch?

Gruß Holger.
:gruebel:

Sherlock 25. Jul 2008 10:41

Re: Rahmen in der Kopfzeile von Word zeichnen (OLE)
 
Ich würde grundsätzlich erstmal auf das Aufhübschen mit "with" verzichten, das macht das Debuggen leichter.

Dann würde ich nicht per Variant Word einbinden, weil das einfach nur viiiieeeel zu langsam ist. Es gibt doch in Delphi MS-Office Komponenten, falls nicht, kannst Du die OLE-Server selber einbinden. Nimm die, da ist dann alles dabei was Du brauchst, und Codecompletion funktioniert auch.

Edit: Mal davon abgesehen, ist "Selection" eine Property von Document oder ActiveDocument. Du gehst aber auf WordApp. Du müsstest also
Delphi-Quellcode:
WordApp.ActiveDocument.Selection
verwenden.

Sherlock

little_budda 25. Jul 2008 10:46

Re: Rahmen in der Kopfzeile von Word zeichnen (OLE)
 
Hallo,

Zitat:

Du müsstest also ...
WordApp.ActiveDocument.Selection
... verwenden.
Habe ich schon im Vorfeld probiert.
Es wird derselbe Fehler erzeugt.

[Edit]
Die Variante ohne With habe ich auch schon hinter mir.
Bsp: WordApp.Selection.ParagraphFormat.Borders(-2 {=wdBorderLeft}).LineStyle := 0; // = wdLineStyleNone
Klappt auch nicht.
[/Edit]

little_budda 25. Jul 2008 12:58

Re: Rahmen in der Kopfzeile von Word zeichnen (OLE)
 
Ich habe mich vertan, die Fehlemeldung ist nicht dieselbe.
Bei der variante ohne With
Delphi-Quellcode:
WordApp.Selection.ParagraphFormat.Borders(-2 {wdBorderLeft}).LineStyle := 0; // = wdLineStyleNone
kommt : "Borders ist keine Methode".

Sherlock 25. Jul 2008 13:18

Re: Rahmen in der Kopfzeile von Word zeichnen (OLE)
 
Dann setzt die Parameter von Borders in eckige Klammern. Borders ist eine Aufzählung der Border-Objekte.

Vergleiche dazu die VB-Hilfe:
Zitat:

Borders-Eigenschaft
Gibt eine Borders-Auflistung zurück, die alle Rahmen für das angegebene Objekt repräsentiert.

Sherlock

little_budda 25. Jul 2008 13:58

Re: Rahmen in der Kopfzeile von Word zeichnen (OLE)
 
Ne, klappt auch nicht
Mit
Delphi-Quellcode:
  WordApp.Selection.ParagraphFormat.Borders[-2].LineStyle := 0;
Erhalte ich "Items ist keine Eigenschaft".

Sherlock 25. Jul 2008 14:16

Re: Rahmen in der Kopfzeile von Word zeichnen (OLE)
 
Argh...ich erinnere mich, daß das viel rumgespiele war. Wie siehts mit Borders.Border[-2] aus?

Sherlock

little_budda 25. Jul 2008 14:20

Re: Rahmen in der Kopfzeile von Word zeichnen (OLE)
 
Resultat:
"Die Methode 'Border' wird vom Automatisierungsobjekt nicht unterstützt.
:gruebel:

p80286 25. Jul 2008 14:29

Re: Rahmen in der Kopfzeile von Word zeichnen (OLE)
 
Hallo zusammen,

wahrscheinlich dummer Einwand aber -2 als Index?

Gruß
K-H

Sherlock 25. Jul 2008 14:33

Re: Rahmen in der Kopfzeile von Word zeichnen (OLE)
 
Das ist lediglich die Übersetzung der Konstanten
wdBorderLeft ist dann halt -2

Das hat sich einer von Bills Jungs ausgedacht.

Edit: Macht aber natürlich Probleme, weil negative Indizes a bisserl problematisch sein dürften. Oh weh....ich kram mal mein altess Word-Projekt raus.

Sherlock


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:39 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz