vbPixels, Height und CurrentY

17/02/2010 - 00:22 von Heinz-Mario Frühbeis | Report spam
Hi,

es geht um ein OCX dessen ScaleMode ich auf vbPixels gesetzt habe.
Ich prüfe in einer Sub, ob der Text in die Höhe des OCX passt, durch
TextHeight(Text). Der SingleWert ist in vbPixels, aber die Höhe zeigt mir
das UC scheinbar in vbTwips an. (TextHeight= 45; Height = 540) Das "regele"
ich mit ScaleY(Val, vbPixels, vbTwips).
Wende ich nun UC.Print Text an und setze zuvor CurrentY auf 1 (da das UC
ScaleMode = vbPixels ist) (für eine bißchen Luft), wird der Text aber
ungefàhr auf Y=7 ausgedruckt. Das habe ich getestet mit CurrentY = -7. Dann
passt der Text "exakt".

Woher kommt diese Differenz?
Was mache ich falsch?

Ich habe das schon immer so gemacht, aber immer nur UC.ScaleMode = vbTwips.
Ob es an vbPixels liegt?

Bei CurrentX kommt das so nicht vor. Da druckt das UC den Text, wie gewollt
(CurrentX = 1) aus.

viele Grüße
Heinz-Mario
 

Lesen sie die antworten

#1 Peter Götz
17/02/2010 - 08:41 | Warnen spam
Hallo Heinz-Mario,

es geht um ein OCX dessen ScaleMode ich auf vbPixels gesetzt habe.
Ich prüfe in einer Sub, ob der Text in die Höhe des OCX passt, durch
TextHeight(Text).



Ich rate mal Du meinst

DeinOCX.TextHeight(Text)

Der SingleWert ist in vbPixels, aber die Höhe zeigt mir das UC scheinbar
in vbTwips an. (TextHeight= 45; Height = 540) Das "regele" ich mit
ScaleY(Val, vbPixels, vbTwips).



DeinOCX.Textheight(Text)

liefert Dir die Texthöhe in dem für DeinOCX gültigen
ScaleMode.

DeinOCX.Height

bekommst Du im ScaleMode, der für die Form, auf
dem Dein OCX liegt aktuell ist.


Wende ich nun UC.Print Text an und setze zuvor CurrentY auf 1 (da das UC
ScaleMode = vbPixels ist) (für eine bißchen Luft), wird der Text aber
ungefàhr auf Y=7 ausgedruckt. Das habe ich getestet mit CurrentY = -7.
Dann passt der Text "exakt".

Woher kommt diese Differenz?



Dieser Versatz ist abhàngig vom phys. Druckrand
des jeweiligen Druckers.

Was mache ich falsch?



Du verwechselst die jeweils akt. ScaleModes Deiner
verschiedenen Objekte (Forms, OCX).


Ich habe das schon immer so gemacht, aber immer nur UC.ScaleMode =
vbTwips. Ob es an vbPixels liegt?



Der Versatz beim Drucken hat nichts mit Deinen vbPixels
zu tun, sondern wie schon erwàhnt mit dem für den
jeweiligen Drucker vorgegebenen phys. Druckrand.

Viele Drucker können nicht bis an den phys. Papierrand
drucken, sondern haben links, rechts, oben und unten
jeweils einen von Drucker zu Drucker verschieden breiten
nicht bedruckbaren Bereich. Je nach Druckertyp können
diese nicht bedruckbaren Bereiche sehr unterschiedlich
hoch bzw. breit sein.
Diese nicht bedruckbaren Bereiche kann man für den
jeweiligen Drucker mit Hilfe der Api-Funktion

GetDeviceCaps()

ermitteln. Ein Beispiel hierzu findest Du unter

www.gssg.de -> Visual Basic -> VB.classic
-> Drucken
-> phys. Druckrànder


Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen