Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi WordApp ActiveDocument Width (https://www.delphipraxis.net/135104-wordapp-activedocument-width.html)

GoTo0815 4. Jun 2009 22:58


WordApp ActiveDocument Width
 
Hallo,

ich arbeite gerade an einer Anwendung die eine Tabelle in eine Word Dokument überträgt. (OLE Automation)
Das funktioniert auch alles prächtig. Nur eine Sache konnte ich bisher nicht finden.

Wie kann ich feststellen, wie die Breite (Width) des aktiven Dokuments (WordApp.ActiveDocument) ist?

Beispiel: Die Tabelle hat z.B. 6 Spalten (Cols).
Nun setze ich die letzten 5 Spalten auf eine Breite von 20.

Delphi-Quellcode:
  iRows := 10;
  iCols := 6;
  WordTable := WordApp.ActiveDocument.Tables.Add(WordApp.Selection.Range, iRows, iCols);
  {...}
  for i := 2 to 6 do
  begin                    
    WordTable.Columns.Item(i).Width := 20;
  end;
Die erste Spalte würde ich nun gern auf die maximale (Rest)Größe setzen. Also auf Restgröße = Gesamtbreite - 5 * 20.


Gruß

Hendrik

mkinzler 4. Jun 2009 23:26

Re: WordApp ActiveDocument Width
 
Dies ist keine Eigenschaft des Dokumentes, sondern der Seite

omata 4. Jun 2009 23:33

Re: WordApp ActiveDocument Width
 
Vielleicht hilft dir ja...
Delphi-Quellcode:
WordApplication.MillimetersToPoints(...)
...weiter, A4 = 210 mm - Rechter Einzug - Linker Einzug - Epsilon = Maximale Breite für die Tabelle


Zitat:

Zitat von mkinzler
Dies ist keine Eigenschaft des Dokumentes, sondern der Seite

Guter Hinweis, siehe...
Delphi-Quellcode:
WordDocument.PageSetup.PageWidth

p80286 5. Jun 2009 12:14

Re: WordApp ActiveDocument Width
 
Hallo zusammen,

man muß aber auch noch den Drucker beachten auf dem ausgedruckt werden soll. Leider hält Word sich da sehr bedeckt. Und ein "PDF-Drucker" verhält sich anders als ein lokal angeschlossener, und dieser wiederum anders als ein Netzdrucker. Auf 10 Seiten Text kann das manchmal eine halbe Seite mehr oder weniger ausmachen.

Wenn man millimetergenau das Papierblatt ausnutzen will, dann ist man ziemlich verlassen.
Ich würde empfehlen Breite und Höhe um 10mm zu verringern, damit bin ich bisher ganz gut gefahren.

Gruß
K-H

mkinzler 5. Jun 2009 12:19

Re: WordApp ActiveDocument Width
 
Deshalb passt Word das Dokument auch bei Änderung des Druckers an. Der obige Code greift also auf die aktuellen Werte zu.

p80286 5. Jun 2009 15:54

Re: WordApp ActiveDocument Width
 
Wenn Du aber das Dokument erstellst, weißt Du dann mit Sicherheit welcher Drucker derjenige ist der als Drucker ausgewählt wird?
So gesehen ist das eingestellte Papierformat nur ein "Näherungswert", aber Hendrik möchte ja wissen wieviel Platz er "genau" hat. Und wenn der Rechner auf dem das Dokument erstellt wird, ein anderer ist als der auf dem es weiter ver/bearbeitet wird, könnte er ein Problem haben.

Gruß
K-H

mkinzler 5. Jun 2009 15:58

Re: WordApp ActiveDocument Width
 
das Programm scheint das Dokument allerdings dynamisch zu erzeugen

GoTo0815 7. Jun 2009 09:45

Re: WordApp ActiveDocument Width
 
Hallo again,

habe das nun dank dem Hinweis von omata so umgesetzt und das reicht zu diesem Zeitpunkt für meine Zwecke:

Delphi-Quellcode:
  WordTable.Columns.Item(1).Width := WordApp.ActiveDocument.PageSetup.PageWidth - (icols-1)*16
                  - WordApp.ActiveDocument.PageSetup.LeftMargin - WordApp.ActiveDocument.PageSetup.RightMargin;

  for i := 2 to iCols do
  begin
    WordTable.Cell(1,i).Range.Orientation := wdTextOrientationUpward; // zum Vertikalen anzeigen der Schrift
    WordTable.Columns.Item(i).Width := 16;
  end;
Grüße
Hendrik


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:07 Uhr.

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