Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Wasserzeichen-Problematik

151 views
Skip to first unread message

Lothar Geyer

unread,
Mar 22, 2009, 1:03:37 PM3/22/09
to
Vor längerer Zeit hatte ich hier gefragt, wie man es aus einer
VB-Anwendung am besten anstellt, einen großen Schriftzug (z.B. "Kopie"
oder "Entwurf") quer über das ganze Blatt zu erstellen. Das Ergebnis war
damals der VB-Kode am Schluss.

Diese Routine wird in folgender Schleife aufgerufen:

For Each sec In myDocument.Sections
For i = wdHeaderFooterPrimary To wdHeaderFooterEvenPages
'For i = 1 To sec.Headers.Count
Set hdr = sec.Headers(i)
If tDruckenAls = vdaEntwurf Then
applyWasserzeichen hdr, "Entwurf"
Else
applyWasserzeichen hdr, "Kopie"
End If
Next i
Next sec

Sinn sollte sein, das Wasserzeichen auf allen Seiten eines Dokuments
anzubringen. Das funktionierte aber nicht - und wir fanden auch keine
Lösung. Nur am Monitor wird die Wasserzeichen-Schrift entsprechend oft
generiert.

Hat sich da an der Sachlage was geändert?

Lothar Geyer


-----------------------------------
Private Sub applyWasserzeichen(ByVal hdr As Word.HeaderFooter _
, wzText As String)
Dim shp As Word.Shape
Const msoTextEffect1 As Long = 0
Const msoTextEffect2 As Long = 1

On Error GoTo errHandler

' original aus NG war: FontName:="Arial Black"
Set shp = hdr.Shapes.AddTextEffect( _
PresetTextEffect:=msoTextEffect1, _
Text:=wzText, _
FontName:="Arial", _
FontSize:=36, _
FontBold:=msoTrue, _
FontItalic:=msoFalse, _
Left:=100, _
Top:=100, _
Anchor:=hdr.Range)

With shp
'.Visible = False
.TextEffect.NormalizedHeight = False
.Line.Visible = False
With .Fill
.Visible = True
.Solid
.ForeColor = wdColorAqua
End With
.LockAnchor = True
.RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
.RelativeVerticalPosition = wdRelativeVerticalPositionPage
.LockAspectRatio = True
.Height = MSWord.CentimetersToPoints(6)
.Width = MSWord.CentimetersToPoints(16)
.Left = wdShapeCenter
.Top = wdShapeCenter
.Rotation = 315
With .Shadow
.Visible = True
.ForeColor = wdColorGray65
End With
.ZOrder msoSendToBack
'.Visible = True
End With

Exit Sub

errHandler:
If ErrMustStop Then Debug.Assert False: Resume
ErrorIn "clsMSOffice.applyWasserzeichen(hdr,wzText)", Array(hdr, wzText)
End Sub

Lisa (Nora Richter)

unread,
Mar 22, 2009, 2:34:55 PM3/22/09
to
Hallo Lothar

> Vor längerer Zeit hatte ich hier gefragt, wie man es aus einer
> VB-Anwendung am besten anstellt, einen großen Schriftzug (z.B. "Kopie"
> oder "Entwurf") quer über das ganze Blatt zu erstellen. Das Ergebnis war
> damals der VB-Kode am Schluss.

> Das funktionierte aber nicht - und wir fanden auch keine


> Lösung. Nur am Monitor wird die Wasserzeichen-Schrift entsprechend oft
> generiert.

Bei mir funktioniert der gepostete Code einwandfrei. Sowohl Am Monitor
als auch auf dem Ausdruck ist der Schriftzug zu sehen. Auch beim PDF-
Erstellen wird er mitgenommen. Was funktioniert denn nicht?

Gruß
Lisa
_____
http://www.schreibbuero-richter.de/vba.html

Lothar Geyer

unread,
Mar 22, 2009, 6:26:52 PM3/22/09
to
Hallo Lisa,

Lisa (Nora Richter) schrieb:
> ...


>> Das funktionierte aber nicht - und wir fanden auch keine
>> Lösung. Nur am Monitor wird die Wasserzeichen-Schrift entsprechend oft
>> generiert.
>
> Bei mir funktioniert der gepostete Code einwandfrei. Sowohl Am Monitor
> als auch auf dem Ausdruck ist der Schriftzug zu sehen. Auch beim PDF-
> Erstellen wird er mitgenommen. Was funktioniert denn nicht?

Der Kode ist schon in Ordnung. Aber ein Wasserzeichen wird nur auf der
ersten Seite ausgegeben - und nicht auf allen Seiten eines Dokuments.
Dafür wird er (entsprechend der Schleife) auf der ersten Seite mehrmals
ausgegeben.

Lothar Geyer

Kowalski

unread,
Mar 25, 2009, 1:30:01 AM3/25/09
to

"Lothar Geyer" schrieb:

Hallo Lothar,

ich hatte das gleiche Problem - das es nicht funktioniert ist ein Fehler von
Word.
Ich habe mir so geholfen, dass ich das Wasserzeichen nicht im Kopf eingefügt
habe, sondern einzeln auf jeder Seite.

Gruß Kowalski

Lothar Geyer

unread,
Mar 25, 2009, 1:48:06 AM3/25/09
to
Hi,

Kowalski schrieb:
> ...


> Ich habe mir so geholfen, dass ich das Wasserzeichen nicht im Kopf eingefügt
> habe, sondern einzeln auf jeder Seite.

hast Du dazu ein paar Zeilen Kode? Ich kenne mich mit den Word-Objekten
nicht wirklich aus.
Danke.

Lothar Geyer

Kowalski

unread,
Mar 25, 2009, 2:21:01 AM3/25/09
to
"Lothar Geyer" schrieb:

Hallo Lothar,

hier der Codeausschnitt, du müsstest nur noch ein paar Variablen definieren

Set mR = ActiveDocument.Range(0, 0)
Set mRo = mR.Duplicate

iAb = 1
ReDim Preserve objStempel(iAb)
Set objStempel(1) = ActiveDocument.Shapes.AddTextEffect(msoTextEffect1,
Text$, "Arial", 24, False, False, 0, 0, mR)
objStempel(1).Rotation = Winkel$
objStempel(1).name = "RP20040205" & iAb
objStempel(1).ZOrder msoBringToFront
objStempel(1).RelativeVerticalPosition = wdRelativeVerticalPositionPage
objStempel(1).RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
objStempel(1).Left = PosLinks$
objStempel(1).Top = PosOben$
objStempel(1).Fill.Transparency = 1
objStempel(1).Line.ForeColor.RGB = RGB(Rot$, Grün$, Blau$)
objStempel(1).PickUp

Do
Set mR = mR.GoTo(wdGoToPage, wdGoToNext)
If mR.IsEqual(mRo) Then Exit Do
iAb = iAb + 1
ReDim Preserve objStempel(iAb)
Set mRo = mR.Duplicate
Set objStempel(iAb) = ActiveDocument.Shapes.AddTextEffect(msoTextEffect1,
Text$, "Arial", 24, False, False, 0, 0, mR)
objStempel(iAb).Apply
objStempel(iAb).Rotation = Winkel$
objStempel(iAb).Left = PosLinks$
objStempel(iAb).Top = PosOben$
objStempel(iAb).name = "RP20040205" & iAb
Loop
End Sub

Lisa (Nora Richter)

unread,
Mar 26, 2009, 5:32:32 PM3/26/09
to
Hallo Lothar,

> Der Kode ist schon in Ordnung. Aber ein Wasserzeichen wird nur auf der
> ersten Seite ausgegeben - und nicht auf allen Seiten eines Dokuments.
> Dafür wird er (entsprechend der Schleife) auf der ersten Seite mehrmals
> ausgegeben.

ja, Du hast recht. Ich habe es jetzt gründlich durchprobiert. Die von
Dir verwendete Schleife war quick and dirty. Sobald im Dokument
mehrere Abschnitte vorhanden sind, in denen in einigen Erste Zeile
anders aktiviert ist, in anderen nicht, einige davon "mit
vorhergehendem verknüpft" sind und andere nicht, funktioniert diese
Schleife nicht mehr und fügt nur auf der ersten Seite ein. Man muss
also nicht nur durch alle Sections schleifen und durch die Header,
sondern bei jedem Header noch testen, ob er existiert, und außerdem,
ob er mit dem vorhergehenden verknüpft ist. Diese "saubere Schleife",
die beides checkt, habe ich jetzt mal gebaut:

Sub Aufruf()

Dim sec As Word.Section
Dim myDocument As Word.Document
Dim hdr As Word.HeaderFooter
Dim tDruckenAls
Const vdaEntwurf As String = "xx"

Dim strEintrag As String
Dim bErsteAnders As Boolean
Dim bLinksRechts As Boolean
Dim i As Long

If tDruckenAls = vdaEntwurf Then

strEintrag = "Entwurf"
Else
strEintrag = "Kopie"
End If

Set myDocument = ActiveDocument

If myDocument.PageSetup.OddAndEvenPagesHeaderFooter = True Then
bLinksRechts = True
myDocument.PageSetup.OddAndEvenPagesHeaderFooter = False
End If

For i = 1 To myDocument.Sections.Count
If myDocument.Sections
(i).PageSetup.DifferentFirstPageHeaderFooter = True Then
bErsteAnders = True
myDocument.Sections
(i).PageSetup.DifferentFirstPageHeaderFooter = False
End If
If i = 1 Then
Set hdr = myDocument.Sections(i).Headers
(wdHeaderFooterEvenPages)
applyWasserzeichen hdr, strEintrag
Else
If myDocument.Sections(i).Headers
(wdHeaderFooterEvenPages).LinkToPrevious = False Then
Set hdr = myDocument.Sections(i).Headers
(wdHeaderFooterEvenPages)
applyWasserzeichen hdr, strEintrag
End If
End If
If i = 1 Then
Set hdr = myDocument.Sections(i).Headers
(wdHeaderFooterPrimary)
applyWasserzeichen hdr, strEintrag
Else
If myDocument.Sections(i).Headers
(wdHeaderFooterPrimary).LinkToPrevious = False Then
Set hdr = myDocument.Sections(i).Headers
(wdHeaderFooterPrimary)
applyWasserzeichen hdr, strEintrag
End If
End If
If bErsteAnders Then
If i = 1 Then
myDocument.Sections
(i).PageSetup.DifferentFirstPageHeaderFooter = True
Set hdr = myDocument.Sections(i).Headers
(wdHeaderFooterFirstPage)
applyWasserzeichen hdr, strEintrag
Else
If myDocument.Sections(i).Headers
(wdHeaderFooterFirstPage).LinkToPrevious = False Then
myDocument.Sections
(i).PageSetup.DifferentFirstPageHeaderFooter = True
Set hdr = myDocument.Sections(i).Headers
(wdHeaderFooterFirstPage)
applyWasserzeichen hdr, strEintrag
End If
End If
End If
Next i

If bLinksRechts Then
myDocument.PageSetup.OddAndEvenPagesHeaderFooter = True
End If

End Sub
___
Hier wird jede Kopfzeile nur einmal bestückt. Denn verbundene
Kopfzeilen verwenden ja dieselbe Kopfzeile, in das Wasserzeichen nur
einmal eingefügt werden muss. Solange das Dokument nicht die Option
Gerade/ungerade Seiten anders verwendet, arbeitet diese Schleife mit
der von Dir verwendeten Wasserzeichenprozedur auch.

ABER: Sobald Gerade/ungerade Seiten anders im Dokument verwendet ist,
wird das Wasserzeichen auf den geraden Seiten nicht mehr eingefügt.
Die Ursache liegt NICHT in der Schleife, sondern in AddTextEffect. Das
WordArt-Object sträubt sich hier dagegen, auf den geraden Seiten
eingefügt zu werden. Das kann man leicht testen, indem man meine
Schleife statt mit einem WordArt-Effect mit einem einfachen Textfeld
mit dem Wort Kopie (also einer normalen Shape) durchlaufen lässt. Dazu
diese Prozedur verwenden:

Private Sub applyWasserzeichen(ByVal hdr As Word.HeaderFooter, _
ByVal wzText As String)

Dim shp As Word.Shape

Set shp = hdr.Shapes.AddTextbox( _
msoTextOrientationHorizontal, _
100#, 100#, 200#, 100#, _
hdr.Range.Paragraphs(1).Range)

With shp.TextFrame.TextRange.Paragraphs(1).Range
.Text = wzText
.Font.Name = "Arial"
.Font.Size = 60
.Font.Outline = True
.Font.Color = wdColorGray30
End With
shp.Line.Visible = msoFalse

Set shp = Nothing

End Sub
____

In Zusammenarbeit mit der obigen umfangreichen Schleife wird das
Wasserzeichen auf allen Seiten eingefügt, und in jeder existierenden
Kopfzeile auch nur einmal. Das hat auch den Nebeneffekt, dass es
deutlich schneller läuft als Deine ursprüngliche Schleife, je nach
Umfang des Dokuments.

Fazit: Solange Dokumente ohne Rechte/linke Seiten anders sind, kann
man den WordArtEffect als Wasserzeichen verwenden. Ansonsten geht nur
ein Wasserzeichen, das ohne diesen Effekt auskommt.

Ach so, wichtig noch: Testumgebung Word 2002 (XP) SP 3 unter Windows
2000.

Ich bin auch an Erfahrungen interessiert, ob das WordArt-Object sich
anderen Word-Versionen möglicherweise weniger kratzbürstig zeigt. ;)

Lisa (Nora Richter)

unread,
Mar 27, 2009, 8:11:35 AM3/27/09
to
On 26 Mrz., 22:32, "Lisa (Nora Richter)" <l...@schreibbuero-

Thomas Gahler

unread,
Mar 27, 2009, 3:22:54 PM3/27/09
to
Hallo Lothar


> Vor längerer Zeit hatte ich hier gefragt, wie man es aus einer
> VB-Anwendung am besten anstellt, einen großen Schriftzug (z.B. "Kopie"
> oder "Entwurf") quer über das ganze Blatt zu erstellen. Das Ergebnis war
> damals der VB-Kode am Schluss.

Woher hast du den Code. Kommt mir ein wenig bekannt vor. Ist der aus unserem
Buch (Seite 807-809)?

Das wäre ja soweit ok, doch in der Auflage 1 ist gerade hier ein Bug drin
(Sorry an alle Leser). Denn das einfügen des Logos als WordArt-Objekt geht
nicht :-(
Was geht ist folgendes:
- anstelle eines Wordart-Objekts eine Grafikdatei verwenden
oder
- ich müsste dir eine alte Mail raussuchen (sofern noch vorhanden), denn ich
hatte einem Leser, der sich bei uns gemeldet hat verschiedene
Lösungsvorschläge gemacht, weiss aber selber nicht mehr welche

Was hälst du vom Vorschlag mit der Grafikdatei?


--
Thomas Gahler
MVP für Word
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows Vista (SP1), Office 2007 (SP?)


Lothar Geyer

unread,
Apr 1, 2009, 1:39:19 AM4/1/09
to
Hallo Thomas,

Thomas Gahler schrieb:


>> Vor längerer Zeit hatte ich hier gefragt, wie man es aus einer
>> VB-Anwendung am besten anstellt, einen großen Schriftzug (z.B. "Kopie"
>> oder "Entwurf") quer über das ganze Blatt zu erstellen. Das Ergebnis
>> war damals der VB-Kode am Schluss.
> Woher hast du den Code. Kommt mir ein wenig bekannt vor. Ist der aus
> unserem Buch (Seite 807-809)?

Leider nein. Wenn ich mich recht erinnere, hast Du den Kode damals in
dem Thread vorgeschlagen. Und den werde ich wohl etwas modifiziert
übernommen haben.

> Das wäre ja soweit ok, doch in der Auflage 1 ist gerade hier ein Bug
> drin (Sorry an alle Leser). Denn das einfügen des Logos als
> WordArt-Objekt geht nicht :-(

Also ich verwende diesen Kode und es läuft einwandfrei (bis auf einen
Fehler, den ich gerade in der VB-Gruppe gepostet habe). Ich füge aber
auch weder ein Logo noch eine andere Datei ein, sondern den Text "Kopie"
oder "Entwurf".

> Was geht ist folgendes:
> - anstelle eines Wordart-Objekts eine Grafikdatei verwenden
> oder
> - ich müsste dir eine alte Mail raussuchen (sofern noch vorhanden), denn
> ich hatte einem Leser, der sich bei uns gemeldet hat verschiedene
> Lösungsvorschläge gemacht, weiss aber selber nicht mehr welche

Und was heißt das nun für mich, unter Berücksichtigung dessen, was
Lisa/Nora getestet hat?

Lothar Geyer

Thomas Gahler

unread,
Apr 1, 2009, 4:50:17 AM4/1/09
to
Hallo Lothar


> Also ich verwende diesen Kode und es läuft einwandfrei (bis auf einen
> Fehler, den ich gerade in der VB-Gruppe gepostet habe).

Einwandfrei? Wenn ich dich richtig verstanden habe, ist das Wasserzeichen
immer auf der gleichen Seite statt im ganzen Dokument verteilt?

>> Was geht ist folgendes:
>> - anstelle eines Wordart-Objekts eine Grafikdatei verwenden
>> oder
>> - ich müsste dir eine alte Mail raussuchen (sofern noch vorhanden), denn
>> ich hatte einem Leser, der sich bei uns gemeldet hat verschiedene
>> Lösungsvorschläge gemacht, weiss aber selber nicht mehr welche
>
> Und was heißt das nun für mich, unter Berücksichtigung dessen, was
> Lisa/Nora getestet hat?

Was das für dich bedeutet ist folgendes:
- du wirst mit dem .AddTextEffect (=Wordart-Objekt) keinen Erfolg haben, das
hat Lisa so bestätigt, habe ich zig Abende versucht und nicht hingekriegt
und war auf einer InternetSeite, die es jetzt nicht mehr gibt, so
beschrieben.
- du wirst Erfolg haben, wenn du mittels .Selection von Kopfzeile zu
Kopfzeile springst, dann kannst du das .AddTextEffect verwenden
- also stimmt auch die Ausage/Erkenntnis von Lisa
- Meine Lösungsvorschläge, die ich damals zusammengestellt habe finde ich
nicht mehr :-(

Mein Vorschlag für dich:
- packe dein "Entwurf" und "Kopie" in eine Datei (.bmp oder besser .wmf) und
verwende somit eine externe Grafikdatei, die du in das Dokument einbindest.
(Nachteil du musst zusätzliche Dateien installieren, aber du baust ja eine
Applikation, also hast du sicher mehr als eine Datei und auch ein Setup,
Vorteil du könntest auf Kundenwünsche reagieren, wenn jemand ein rotes statt
blaues Wasserzeichen möchte)
Falls du das so machen willst, dann schiebe ich dir den Code aus dem
Buch auf dein privates Mail (musste mir aber hier "bestellen" sonst kommt
nichts)

- Du kannst auch mit einer .AddTextbox arbeiten, dann geht es ohne extrerne
Datei, du kannst den Text formatieren, kriegst nicht alle Effekte hin und
schrägstellen kannst du das Ding auch nicht. (das geht auch mit deiner
Schlaufe)

Noch was zum Code von Lisa, den habe ich nur kurz überflogen aber da hat es
eine gefähliche Stelle drin
- If myDocument.PageSetup.OddAndEvenPagesHeaderFooter = True Then
hier wird nur sauber ermittelt, wenn das Dokuement *einen* Abschnitt hat
oder *alle* Abschnitte die gleiche Ausrichtung haben.
Und wenn auf dem .StoryRange aufgebaut würde, dann könnte der Loop wohl
kleiner sein.


--
Thomas Gahler
MVP für Word
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows XP (SP3), Office XP (SP3)


Lisa (Nora Richter)

unread,
Apr 1, 2009, 7:52:00 AM4/1/09
to
Hallo Thomas,

> Noch was zum Code von Lisa, den habe ich nur kurz überflogen aber da hat es
> eine gefähliche Stelle drin
> - If myDocument.PageSetup.OddAndEvenPagesHeaderFooter = True Then
> hier wird nur sauber ermittelt, wenn das Dokuement *einen* Abschnitt hat
> oder *alle* Abschnitte die gleiche Ausrichtung haben.

Ich habe das auch eine ganze Weile getestet und konnte keinen
Unterschied feststellen. Man kann OddAndEvenPagesHeaderFooter zwar für
jeden Abschnitt einzeln abfragen (ich hatte das zwischendurch auch
innerhalb der Sections-Schleife. Es gibt aber keinen Unterschied im
Verhalten. Wenn für irgendeinen Abschnitt des Dokuments die
Einstellung True ist, ist sie auch für alle anderen Abschnitte des
Dokuments True. Also wenn ich im 5. Abschnitt Rechte/linke Seite
anders aktiviere, gibt es auch im 1. Abschnitt (und in allen anderen)
einen Unterschied zwischen geraden und ungeraden Kopfzeilen. Wie
gesagt, unter Word 2002 (XP) SP 3, Windows 2000.
Deswegen habe ich die Abfrage dann aus der Schleife herausgenommen und
vorher angeordnet.

> Und wenn auf dem .StoryRange aufgebaut würde, dann könnte der Loop wohl
> kleiner sein.

Ja, das hatte ich zunächst auch probiert (noch mit AddTextEffect).
Weil das (offenbar wegen AddTextEffect) nicht ging, hatte ich dann die
andere Schleife gebaut, um die Sache gründlich zu testen. Könnte
auch gehen, wenn man den Type abfragt und nur die "Header-StoryRanges"
bearbeitet. (Vielleicht komme ich heute abend dazu, das zu probieren.)

Lothar Geyer

unread,
Apr 1, 2009, 2:56:19 PM4/1/09
to
Hallo Thomas,

Thomas Gahler schrieb:
> ...


>> Also ich verwende diesen Kode und es läuft einwandfrei (bis auf einen
>> Fehler, den ich gerade in der VB-Gruppe gepostet habe).
> Einwandfrei? Wenn ich dich richtig verstanden habe, ist das Wasserzeichen
> immer auf der gleichen Seite statt im ganzen Dokument verteilt?

Das einwandfrei bezog sich rein auf den Kode, nicht auf das, was dann im
Dokument rauskommt.

>>> Was geht ist folgendes:
>>> - anstelle eines Wordart-Objekts eine Grafikdatei verwenden

Das läuft dann so wie in OpenOffice. Aber das möchte ich eigentlich
nicht. Wieder eine Datei mehr, die geprüft werden muss, ob sie vorhanden
ist. Da ist es mir lieber, z.B. die Farbe (wie Du das weiter unten
geschrieben hast) in der Konfiguration setzen zu lassen - falls das denn
doch einer ändern wollte.

>>> <snipp>


> - du wirst Erfolg haben, wenn du mittels .Selection von Kopfzeile zu
> Kopfzeile springst, dann kannst du das .AddTextEffect verwenden

Also so wie jetzt (ohne zusätzliche Datei), nur dass ich die Schleife
von Lisa verwenden muss.

> - packe dein "Entwurf" und "Kopie" in eine Datei (.bmp oder besser .wmf) und
> verwende somit eine externe Grafikdatei, die du in das Dokument einbindest.
> (Nachteil du musst zusätzliche Dateien installieren, aber du baust ja eine
> Applikation, also hast du sicher mehr als eine Datei und auch ein Setup,
> Vorteil du könntest auf Kundenwünsche reagieren, wenn jemand ein rotes statt
> blaues Wasserzeichen möchte)

Ein Setup gibt es natürlich - und eine weitere Datei einzubauen wäre
nicht das Problem - aber siehe oben.

> Falls du das so machen willst, dann schiebe ich dir den Code aus dem
> Buch auf dein privates Mail (musste mir aber hier "bestellen" sonst kommt
> nichts)

Ich werde das jetzt erstmal testen (und vorher durchdenken). Und falls
notwendig komme ich gerne auf Dein Angebot zurück.

Lothar Geyer

Lisa (Nora Richter)

unread,
Apr 1, 2009, 5:59:59 PM4/1/09
to
Hallo Thomas,

ich komme nochmal hierauf zurück:

> Und wenn auf dem .StoryRange aufgebaut würde, dann könnte der Loop wohl
> kleiner sein.

Bis jetzt ist mir das nicht gelungen. Der StoryRange, der eigentlich
nur ein Range ist, bietet keine Methode zum Hinzufügen einer Shape.
Das gelingt mir nur im Hauptteil (ActiveDocument.Range) und in
Headers. In ActiveDocument.StoryRanges(1) gibt es keine Methode dazu.
Wie meinst Du das?

@Lothar:

> Also so wie jetzt (ohne zusätzliche Datei), nur dass ich die Schleife
> von Lisa verwenden muss.

Das wird nur gehen, wenn es eben kein TextEffect ist, sondern ein
normales Textfeld (ohne Rand) mit dem Text darin.

Thomas Gahler

unread,
Apr 2, 2009, 2:09:59 AM4/2/09
to
Hallo Lothar


>>>> Was geht ist folgendes:
>>>> - anstelle eines Wordart-Objekts eine Grafikdatei verwenden

> [...] Aber das möchte ich eigentlich nicht. Wieder eine Datei mehr,


> die geprüft werden muss, ob sie vorhanden ist.

Daran kann es ja kaum liegen, das ist schnell gemacht


Public Function funcExistiertDatei(ByRef CDateiName As String) As Boolean
'Stellt fest, ob eine spezielle Datei auf dem System vorhanden ist.
Dim bFlag As Boolean
If Not Len(Dir$(CDateiName)) = 0 Then
funcExistiertDatei = True
End If
End Function

> Da ist es mir lieber, z.B. die Farbe (wie Du das weiter unten geschrieben
> hast) in der Konfiguration setzen zu lassen - falls das denn doch einer
> ändern wollte.

Vielleicht soll ja nicht nur die Farbe gewechselt werden, sondern auch die
Gösse, Schrifart oder was auch immer.


> Ich werde das jetzt erstmal testen (und vorher durchdenken). Und falls
> notwendig komme ich gerne auf Dein Angebot zurück.

Aus meiner Sicht ist die Art mit der Grafikdatei, jene die den schönsten und
stabilsten Code liefert. Zusammen mit dem Nachteil, dass ich ein externe
Datei einbinden muss.
Mehr Argumente habe ich nicht.

Lisa [Nora Richter]

unread,
Apr 5, 2009, 11:53:01 AM4/5/09
to
Hallo Thomas,

da meine letzte Antwort offenbar wieder verschwunden ist, neuer Versuch:

> > Und was heißt das nun für mich, unter Berücksichtigung dessen, was
> > Lisa/Nora getestet hat?
> Was das für dich bedeutet ist folgendes:
> - du wirst mit dem .AddTextEffect (=Wordart-Objekt) keinen Erfolg haben, das
> hat Lisa so bestätigt

Eben, es geht nur mit einem Textfeld, nicht mit AddTextEffect.

> - Du kannst auch mit einer .AddTextbox arbeiten, dann geht es ohne extrerne
> Datei, du kannst den Text formatieren, kriegst nicht alle Effekte hin und
> schrägstellen kannst du das Ding auch nicht. (das geht auch mit deiner
> Schlaufe)

Das stimmt zwar, nur bei der ersten Schleife durch alle Header aller
Abschnitte wird das Textfeld x-mal eingefügt, weil gar nicht getestet wird,
ob die Abschnitte "mit vorhergehendem" verknüpft sind. Deswegen teste ich das
ja explizit in dieser Schleife:
___
Sub Aufruf()

Dim sec As Word.Section
Dim myDocument As Word.Document
Dim hdr As Word.HeaderFooter
Dim tDruckenAls
Const vdaEntwurf As String = "xx"

Dim sty As Word.Range



Dim strEintrag As String
Dim bErsteAnders As Boolean
Dim bLinksRechts As Boolean
Dim i As Long

If tDruckenAls = vdaEntwurf Then

strEintrag = "Entwurf"
Else
strEintrag = "Kopie"
End If

Set myDocument = ActiveDocument

If myDocument.PageSetup.OddAndEvenPagesHeaderFooter = True Then

bLinksRechts = True
myDocument.PageSetup.OddAndEvenPagesHeaderFooter = False
End If

For i = 1 To myDocument.Sections.Count
If myDocument.Sections(i).PageSetup.DifferentFirstPageHeaderFooter =

True Then
bErsteAnders = True
myDocument.Sections(i).PageSetup.DifferentFirstPageHeaderFooter
= False
End If
If i = 1 Then
Set hdr = myDocument.Sections(i).Headers(wdHeaderFooterEvenPages)
applyWasserzeichen hdr, strEintrag
Else
If

myDocument.Sections(i).Headers(wdHeaderFooterEvenPages).LinkToPrevious =

False Then
Set hdr =
myDocument.Sections(i).Headers(wdHeaderFooterEvenPages)
applyWasserzeichen hdr, strEintrag
End If
End If
If i = 1 Then
Set hdr = myDocument.Sections(i).Headers(wdHeaderFooterPrimary)
applyWasserzeichen hdr, strEintrag
Else
If

myDocument.Sections(i).Headers(wdHeaderFooterPrimary).LinkToPrevious = False
Then
Set hdr =
myDocument.Sections(i).Headers(wdHeaderFooterPrimary)


applyWasserzeichen hdr, strEintrag
End If
End If
If bErsteAnders Then
If i = 1 Then

myDocument.Sections(i).PageSetup.DifferentFirstPageHeaderFooter = True
Set hdr =
myDocument.Sections(i).Headers(wdHeaderFooterFirstPage)


applyWasserzeichen hdr, strEintrag
Else
If

myDocument.Sections(i).Headers(wdHeaderFooterFirstPage).LinkToPrevious =
False Then

myDocument.Sections(i).PageSetup.DifferentFirstPageHeaderFooter = True
Set hdr =
myDocument.Sections(i).Headers(wdHeaderFooterFirstPage)


applyWasserzeichen hdr, strEintrag
End If
End If
End If
Next i

If bLinksRechts Then
myDocument.PageSetup.OddAndEvenPagesHeaderFooter = True
End If

End Sub
_____

Damit wird bei einem Dokument mit 12 Abschnitten, die miteinander verknüpft
sind, nämlich nur im 1. Abschnitt eingefügt und nicht 12 mal auf allen drei
denkbaren Headern, so dass im Header des 1. Abschnitts 36 Shapes stehen. Das
hat ja nicht nur den Aspekt, dass es viel schneller geht, sondern auch, dass
das Dokument viel kleiner bleibt. (Man kann das sehr schön nachvollziehen,
indem man die 1. Schleife durchlaufen lässt und hinterher "von Hand" die
Wasserzeichen wieder entfernt.)

> Noch was zum Code von Lisa, den habe ich nur kurz überflogen aber da hat es
> eine gefähliche Stelle drin
> - If myDocument.PageSetup.OddAndEvenPagesHeaderFooter = True Then
> hier wird nur sauber ermittelt, wenn das Dokuement *einen* Abschnitt hat
> oder *alle* Abschnitte die gleiche Ausrichtung haben.

Ich habe das auch eine ganze Weile getestet und konnte definitiv keinen


Unterschied feststellen. Man kann OddAndEvenPagesHeaderFooter zwar für
jeden Abschnitt einzeln abfragen (ich hatte das zwischendurch auch

innerhalb der Sections-Schleife). Es gibt aber keinen (!) Unterschied im


Verhalten. Wenn für irgendeinen Abschnitt des Dokuments die
Einstellung True ist, ist sie auch für alle anderen Abschnitte des
Dokuments True. Also wenn ich im 5. Abschnitt Rechte/linke Seite
anders aktiviere, gibt es auch im 1. Abschnitt (und in allen anderen

Abschnitten!)


einen Unterschied zwischen geraden und ungeraden Kopfzeilen.

Deswegen habe ich die Abfrage dann aus der Schleife herausgenommen und
vorher angeordnet.

Hast Du ein Beispiel, dass das geht, nur einen Abschnitt mit Gerade/ungerade
Seite anders zu formatieren?

> Und wenn auf dem .StoryRange aufgebaut würde, dann könnte der Loop wohl
> kleiner sein.

Ja, das interessiert mich sehr! Wie die Schleife aussehen muss, ist mir klar.
_____
Sub Test()

Dim sty As Word.Range

For Each sty In ActiveDocument.StoryRanges
Select Case sty.StoryType
Case 6, 7, 10
applyWasserzeichen2 hdr, strEintrag
End Select
Do While Not (sty.NextStoryRange Is Nothing)
Select Case sty.StoryType
Case 6, 7, 10
'Set hdr = sty
'So geht es nicht! Aber wie könnte man das machen?
applyWasserzeichen2 hdr, strEintrag
End Select
Loop
Next sty

End Sub
_____

Bis jetzt ist mir das jedoch nicht gelungen. Der StoryRange, der eigentlich


nur ein Range ist, bietet keine Methode zum Hinzufügen einer Shape.
Das gelingt mir nur im Hauptteil (ActiveDocument.Range) und in

Headers. In ActiveDocument.StoryRanges(1) gibt es keine Methode, um
irgendeine Shape hinzuzufügen. Wie machst Du das?

@Lothar:

> Also so wie jetzt (ohne zusätzliche Datei), nur dass ich die Schleife
> von Lisa verwenden muss.

Das wird nur gehen, wenn es eben kein TextEffect ist, sondern ein

normales Textfeld (ohne Rand) mit dem Text darin. (So würde ich es machen.)

Thomas Gahler

unread,
Apr 6, 2009, 4:31:37 PM4/6/09
to
Hallo Lisa


>> Noch was zum Code von Lisa, den habe ich nur kurz überflogen aber da hat
>> es
>> eine gefähliche Stelle drin
>> - If myDocument.PageSetup.OddAndEvenPagesHeaderFooter = True Then
>> hier wird nur sauber ermittelt, wenn das Dokuement *einen* Abschnitt hat
>> oder *alle* Abschnitte die gleiche Ausrichtung haben.
>
> Ich habe das auch eine ganze Weile getestet und konnte definitiv keinen
> Unterschied feststellen. Man kann OddAndEvenPagesHeaderFooter zwar für

> jeden Abschnitt einzeln abfragen [...]
Tja, da hast du mich erwischt. Diese Einstellung scheint tatsächlich für
dass ganze Dokument zu gelten und nicht für einzelne Abschnitte (weshalb
auch immer).
Ich weiss einfach, dass "myDocument.PageSetup" grundsätzlich gefährlich ist
und dass ein "myDocument.Sections(x).PageSetup" immer passt. (Zum Testen,
kannst du mal ein Dokument mit unterschiedlicher Hoch/Quer-Ausrichtung so
abfragen "Masgbox ActiveDocument.PageSetup.Orientation" du wirst 9999999
erhalten).

>> Und wenn auf dem .StoryRange aufgebaut würde, dann könnte der Loop wohl
>> kleiner sein.
> Ja, das interessiert mich sehr! Wie die Schleife aussehen muss, ist mir
> klar.

Also mein Code in der Schleife würde so aussehe...


Public Sub procKopfzeileWasserzeichenEinfügen( _
ByVal doc As Word.Document, _
ByVal strWasserzeichenDatei As String)

Dim rng As Word.Range
Dim intHdr As WdHeaderFooterIndex

If fktExistiertDatei(strWasserzeichenDatei) Then
'Alle Kopfzeilen bearbeiten
For intHdr = wdHeaderFooterPrimary To wdHeaderFooterEvenPages
Set rng = doc.Sections(1).Headers(intHdr).Range
procKopfzeileWasserzeichenEinfügen_2 _
rng:=rng, _
strGrafik:=strWasserzeichenDatei

'Nächste Kopfzeile vom gleichen Typ
While Not (rng.NextStoryRange Is Nothing)
Set rng = rng.NextStoryRange
procKopfzeileWasserzeichenEinfügen_2 _
rng:=rng, _
strGrafik:=strWasserzeichenDatei
Wend
Next intHdr
End If
End Sub

> Bis jetzt ist mir das jedoch nicht gelungen. Der StoryRange, der
> eigentlich
> nur ein Range ist, bietet keine Methode zum Hinzufügen einer Shape.
> Das gelingt mir nur im Hauptteil (ActiveDocument.Range) und in
> Headers. In ActiveDocument.StoryRanges(1) gibt es keine Methode, um
> irgendeine Shape hinzuzufügen. Wie machst Du das?

So... (kannst du das nachvollziehen? Mehr möchte ich hier nicht hinhängen,
ansonsten kann ich gelich das ganze Buch veröffentlichen. Aber wenn nichtg
klar, dann kann ich dir ein paar Zeilen mehr zustellen um dass fertig zu
diskutieren)

'Wasserzeichen einfügen
Set shp = ActiveDocument.Shapes.AddPicture( _
FileName:=strGrafik, Anchor:=rng, _
LinkToFile:=False, SaveWithDocument:=True)

--
Thomas Gahler
MVP für Word
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)

Lisa [Nora Richter]

unread,
Apr 6, 2009, 5:29:03 PM4/6/09
to
Lieber Thomas,

> Ich weiss einfach, dass "myDocument.PageSetup" grundsätzlich gefährlich ist
> und dass ein "myDocument.Sections(x).PageSetup" immer passt. (Zum Testen,
> kannst du mal ein Dokument mit unterschiedlicher Hoch/Quer-Ausrichtung so
> abfragen "Masgbox ActiveDocument.PageSetup.Orientation" du wirst 9999999
> erhalten).

Ah, sehr interessant. Das habe ich noch gar nicht probiert. Gut, das zu
wissen.

> Also mein Code in der Schleife würde so aussehe...
>
>
> Public Sub procKopfzeileWasserzeichenEinfügen( _
> ByVal doc As Word.Document, _
> ByVal strWasserzeichenDatei As String)
>
> Dim rng As Word.Range
> Dim intHdr As WdHeaderFooterIndex
>
> If fktExistiertDatei(strWasserzeichenDatei) Then
> 'Alle Kopfzeilen bearbeiten
> For intHdr = wdHeaderFooterPrimary To wdHeaderFooterEvenPages
> Set rng = doc.Sections(1).Headers(intHdr).Range
> procKopfzeileWasserzeichenEinfügen_2 _
> rng:=rng, _
> strGrafik:=strWasserzeichenDatei
>
> 'Nächste Kopfzeile vom gleichen Typ
> While Not (rng.NextStoryRange Is Nothing)
> Set rng = rng.NextStoryRange
> procKopfzeileWasserzeichenEinfügen_2 _
> rng:=rng, _
> strGrafik:=strWasserzeichenDatei
> Wend
> Next intHdr
> End If
> End Sub

Ja, das ist in der Tat viel sehr eleganter, sehr schön.


> So... (kannst du das nachvollziehen? Mehr möchte ich hier nicht hinhängen,
> ansonsten kann ich gelich das ganze Buch veröffentlichen. Aber wenn nichtg
> klar, dann kann ich dir ein paar Zeilen mehr zustellen um dass fertig zu
> diskutieren)

Ja, funktioniert mit der Bildgrafik sehr gut. Jetzt habe ich das verstanden.

Und Du hast natürlich recht. Da habe ich nun beide Auflagen Eures Buchs,
aber das Beispiel mit den Wasserzeichen habe ich mir noch gar nicht
angesehen. Das merke ich jetzt erst.

--

Thomas Gahler

unread,
Apr 7, 2009, 2:53:51 AM4/7/09
to
Hallo Lisa


>> Ich weiss einfach, dass "myDocument.PageSetup" grundsätzlich gefährlich
>> ist

> Ah, sehr interessant. Das habe ich noch gar nicht probiert. Gut, das zu
> wissen.

Sehr gut zu wissen ;-))

> Und Du hast natürlich recht. Da habe ich nun beide Auflagen Eures Buchs,
> aber das Beispiel mit den Wasserzeichen habe ich mir noch gar nicht
> angesehen. Das merke ich jetzt erst.

...und dann wie gesagt im Buch 1 Seite 809 4. Absatz "Für den geneigten
Leser..." kannst du streichen ;-))

--
Thomas Gahler
MVP für Word
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)

Lothar Geyer

unread,
Jun 14, 2009, 1:21:52 PM6/14/09
to
Hallo,

ich muss nochmal an die Problematik mit den Wasserzeichen anknᅵpfen.

Ein wichtiges Ergebnis war, dass ein WordArt-Effekt nicht verwendet
werden konnte - es musste ein Textfeld fᅵr die Aufnahme des
Wasserzeichen-Textes verwendet werden mit dem Nachteil, dass damit
wesentlich weniger Darstellungseffekte mᅵglich sind.

Und da ist mir jetzt noch eine Idee gekommen: Kᅵnnte man nicht innerhalb
des Textfeldes ein WortArt-Element einfᅵgen und damit diese Restriktion
umgehen? Manuell habe ich es zumindest hingebracht, in einem Textfeld
eine schrᅵge Schrift zu produzieren - allerdings nicht in einer
Kopfzeile. Per Programm ist mir das aber nicht geglᅵckt - und natᅵrlich
auch nicht in einer Kopfzeile. Geht das nicht oder mache ich nur etwas
falsch?

Im Prinzip habe ich versucht

Set shp1 = hdr.Shapes.AddTextbox( ...
Set shp2 = shp1.AddTextEffect( ...

Aber das klappte eben nicht.

Lothar Geyer

Thomas Gahler

unread,
Jun 15, 2009, 6:17:16 AM6/15/09
to
Gauten Tag Lothar

> Und da ist mir jetzt noch eine Idee gekommen: K�nnte man nicht innerhalb
> des Textfeldes ein WortArt-Element einf�gen und damit diese Restriktion
> umgehen?
Also wenn ich das WordArt im Textfeld einf�ge, dann habe ich kein Shape
sondern eine InlineShape (mit schwarzen Ankerpunkten). Dieses kann ich auch
nicht in ein Shape konvertieren (die H�ndchen im Register Layout sind grau).

Ich sch�tze, das wird wohl nichts :-(

--
Thomas Gahler
MVP f�r Word

Lothar Geyer

unread,
Jun 15, 2009, 7:01:59 AM6/15/09
to
Hallo Thomas,

Thomas Gahler schrieb:
> ...
>> Und da ist mir jetzt noch eine Idee gekommen: Kᅵnnte man nicht innerhalb
>> des Textfeldes ein WortArt-Element einfᅵgen und damit diese Restriktion
>> umgehen?
> Also wenn ich das WordArt im Textfeld einfᅵge, dann habe ich kein Shape

> sondern eine InlineShape (mit schwarzen Ankerpunkten). Dieses kann ich auch

> nicht in ein Shape konvertieren (die Hᅵndchen im Register Layout sind grau).
>
> Ich schᅵtze, das wird wohl nichts :-(

Schade, ich hatte mich schon gefreut, einen Weg gefunden zu haben, um
Word auszutricksen ...

Lothar Geyer

Lothar Geyer

unread,
Jun 15, 2009, 1:51:43 PM6/15/09
to
Hallo Thomas,

ich muss doch noch etwas lᅵstig sein, denn ich bekomme die Schrift nicht
mehr so hin wie ich sie mit dem TextEffekt hatte. Was muss ich tun, um
eine beliebige Zeichenkette so in einem Shape (Textbox) unterzuringen,
dass es diesen komplett ausfᅵllt?

Meine applyWasserzeichen sieht momentan so aus:

Set shp = hdr.Shapes.AddTextbox( _

msoTextOrientationUpward, _
50#, 50#, 400#, 650#, _
hdr.Range.Paragraphs(1).Range)

With shp.TextFrame.TextRange.Paragraphs(1).Range
.Text = wzText
.Font.Name = "Arial"

.Font.Size = 240
.Font.Outline = False


.Font.Color = wdColorGray30
End With
shp.Line.Visible = msoFalse

Vielen Dank schon mal im voraus.

Lothar Geyer

Thomas Gahler

unread,
Jun 16, 2009, 1:18:22 AM6/16/09
to
Hallo Lothar

> ich muss doch noch etwas l�stig sein, denn ich bekomme die Schrift nicht

> mehr so hin wie ich sie mit dem TextEffekt hatte. Was muss ich tun, um
> eine beliebige Zeichenkette so in einem Shape (Textbox) unterzuringen,

> dass es diesen komplett ausf�llt?
Ich bin nicht ganz sicher ob ich deine Frage richtig verstehe.

Also einen TextEffekt hast du im Textfeld keinen, das ist dem WordArt
vorbehalten. Mit ganz ausf�llen meinst du wohl, dass du unabh�ngig vom Text
(wzText) diesen immer auf deiner ganzen Fl�che hast. Das geht wohl auch
nicht, denn im Textfeld hast du einen Fliesstext.
Ich w�rde die Ausrichtung des Absatz auf zentriert setzen
(.Paragraphs(1).Alignment = wdAlignParagraphCenter). Die breite des
Textfeldes auf die gr�sse der Schriftart optimieren und diese zentriert auf
der Seite positionieren.


Und bei deiner Gr�sse des Textfeldes, denk dran, manchmal haben die Anwender
die Ausrichtung auf Quer gesetzt, dann passt dein Wasserzeichen pl�tzlich
nicht mehr auf die Seite.


Und so nebenbei. Das Grau30 ist meiner Ansicht nach zu stark. Und mit einer
extrenen Grafik als Wasserzeichen k�nnten diverse deiner W�nsch umgesetzt
werden. �ber die Vor- und Nachteile hatten wir uns auch schon aus gelassen.

Lothar Geyer

unread,
Jun 16, 2009, 3:43:10 AM6/16/09
to
Guten Morgen Thomas,

Thomas Gahler schrieb:
> ...
>> ich muss doch noch etwas lᅵstig sein, denn ich bekomme die Schrift nicht

>> mehr so hin wie ich sie mit dem TextEffekt hatte. Was muss ich tun, um
>> eine beliebige Zeichenkette so in einem Shape (Textbox) unterzuringen,

>> dass es diesen komplett ausfᅵllt?


> Ich bin nicht ganz sicher ob ich deine Frage richtig verstehe.
>
> Also einen TextEffekt hast du im Textfeld keinen, das ist dem WordArt

> vorbehalten. Mit ganz ausfᅵllen meinst du wohl, dass du unabhᅵngig vom Text
> (wzText) diesen immer auf deiner ganzen Flᅵche hast. Das geht wohl auch

> nicht, denn im Textfeld hast du einen Fliesstext.

> Ich wᅵrde die Ausrichtung des Absatz auf zentriert setzen

> (.Paragraphs(1).Alignment = wdAlignParagraphCenter). Die breite des

> Textfeldes auf die grᅵsse der Schriftart optimieren und diese zentriert auf
> der Seite positionieren.

Ich habe mir zwar gedacht, dass sich das so verhᅵlt, wie Du es nun
beschrieben hast. Da ich aber im Umgang mit den Word-Objekten und mit
deren Mᅵglichkeiten nicht sicher umgehen kann, versuche ich es halt
immer wieder ...

> Und bei deiner Grᅵsse des Textfeldes, denk dran, manchmal haben die Anwender
> die Ausrichtung auf Quer gesetzt, dann passt dein Wasserzeichen plᅵtzlich

> nicht mehr auf die Seite.

Nun, das in meiner Anwendung unterzubringen, wᅵre wahrscheinlich das
geringste Problem, wenn ich wᅵsste, wie ich abfragen kann, ob der
Ausdruck Hoch oder Quer erfolgt.
Und das kᅵnnte dann ja fᅵr jede Seite anders sein.

Nun, die Wahrscheinlichkeit, dass solche Konstrukte vorkommen, ist doch
sehr gering. Diese ganze Mimik wird fᅵr Angebote und Rechnungen
verwendet. Wenn der Status noch nicht auf "Fertig" gestellt wurde, wird
beim Ausdruck der "Entwurf" eingeblendet. War der Status bereits
"Fertig" (und damit ᅵnderungen nur noch einem Admin mᅵglich) und ein
weiteres Exemplar wird gedruckt, wird "Kopie" eingeblendet.

> Und so nebenbei. Das Grau30 ist meiner Ansicht nach zu stark. Und mit einer

> extrenen Grafik als Wasserzeichen kᅵnnten diverse deiner Wᅵnsch umgesetzt
> werden. ᅵber die Vor- und Nachteile hatten wir uns auch schon aus gelassen.

Das Grau30 stammte auch nicht von mir. Ich hatte ursprᅵnglich ein
wdColorAqua, das am Bildschirm schᅵn auffᅵllig war und beim Ausdruck auf
einem s/w-Drucker als Grau kommt.

Lothar Geyer

Thomas Gahler

unread,
Jun 16, 2009, 5:08:29 AM6/16/09
to
Hallo Lothar


> Nun, das in meiner Anwendung unterzubringen, w�re wahrscheinlich das
> geringste Problem, wenn ich w�sste, wie ich abfragen kann, ob der Ausdruck
> Hoch oder Quer erfolgt.
> Und das k�nnte dann ja f�r jede Seite anders sein.
Nicht jede Seite sondern auf jedem Abschnitt.

- doc.sections(x).pagesetup.orientation

> Das Grau30 stammte auch nicht von mir. Ich hatte urspr�nglich ein
> wdColorAqua, das am Bildschirm sch�n auff�llig war und beim Ausdruck auf

> einem s/w-Drucker als Grau kommt.

Ja eine meiner Lieblngsfarben f�r solche Sachen, denn die kommen auch auf
alten 300dpi-Drucken als sch�ne Graustufe

Lothar Geyer

unread,
Jun 16, 2009, 7:13:01 AM6/16/09
to
Hi Thomas,

Thomas Gahler schrieb:
> ...
>> Nun, das in meiner Anwendung unterzubringen, wᅵre wahrscheinlich das
>> geringste Problem, wenn ich wᅵsste, wie ich abfragen kann, ob der Ausdruck
>> Hoch oder Quer erfolgt.
>> Und das kᅵnnte dann ja fᅵr jede Seite anders sein.


> Nicht jede Seite sondern auf jedem Abschnitt.
>
> - doc.sections(x).pagesetup.orientation

Danke.

>> Das Grau30 stammte auch nicht von mir. Ich hatte ursprᅵnglich ein
>> wdColorAqua, das am Bildschirm schᅵn auffᅵllig war und beim Ausdruck auf

>> einem s/w-Drucker als Grau kommt.

> Ja eine meiner Lieblngsfarben fᅵr solche Sachen, denn die kommen auch auf
> alten 300dpi-Drucken als schᅵne Graustufe

Also auch in diesen Kleinigkeiten bist Du bei mir bzw. in meiner
Anwendung verewigt - auch wenn kein Copyright dabei steht ;-)

Noch eine Idee. Bezᅵglich dem Wasserzeichen als Datei.
Die Effekte gehen mir doch etwas ab. Und das Justieren der Schrift ist
mir zu aufwᅵndig. Aber man kᅵnnte doch die Bild-Datei als Resource
einbinden. .bmp und .ico werden explizit unterstᅵtzt und andere Formate
sollten ᅵber user-defined resource eingebunden werden kᅵnnen. Dann
brauche ich nicht zu prᅵfen, ob die Bilddatei vorhanden ist, ob es sich
wirklich um "meine" Bilddatei handelt usw.

Fragen dazu:

Kann ich das Image dann auch einbinden, ohne es vorher in einer Datei
speichern zu mᅵssen? Also so eine Art Memory-Copy.

Kann ich das Image beliebig skalieren?

Auf was muss ich beim Erstellen des Wasserzeichen-Bildes achten? Es soll
ja auf "unterster Ebene" erscheinen und Kopf- und Fuᅵzeilen-Inhalte
nicht ᅵberdecken.

Lothar Geyer

Thomas Gahler

unread,
Jun 16, 2009, 3:29:01 PM6/16/09
to
Hallo Lothar


> Kann ich das Image dann auch einbinden, ohne es vorher in einer Datei
> speichern zu mᅵssen? Also so eine Art Memory-Copy.

Keine Ahnung, doch ich schᅵtze mit genug API-Kenntnissen sollte das mᅵglich
sein. Aber garantieren kann ich dir nichts, wenn du nichts findest, dann
kᅵnnte ich mal in anderen Ecken nachfragen.

> Kann ich das Image beliebig skalieren?

Das sollte eigentlich gehen


> Auf was muss ich beim Erstellen des Wasserzeichen-Bildes achten? Es soll
> ja auf "unterster Ebene" erscheinen und Kopf- und Fuᅵzeilen-Inhalte nicht
> ᅵberdecken.

Dass du das auf msoBehindText legst. (Hᅵndchen "hinter den Text")

--
Thomas Gahler
MVP fᅵr Word
Co-Autor von ᅵMicrosoft Word-Programmierung.
Das Handbuchᅵ (MS Press)


- Windows Vista (SP1), Office 2007 (SP1)


0 new messages