Autor | Thema: Wieviel Platz für Stringvariable? | | Datum:08.10.02 14:46 
(chw.szb@freenet.de) | |
Kann mir jemand einen Tip geben, wie ich herausbekommen kann, welchen Platz der Inhalt einer Stringvariable mit x-beliebiger Höhe/Breite/usw. auf dem Bildschirm bzw. auf dem Papier einnehmen wird? Kann man das irgendwie berechnen? Ich programmiere schon seit Jahren gelegentlich mit Profan, aber mir ist eine Lösung dazu noch nicht über den Weg gelaufen. Hab jetzt Version Profan 7.5.
Christian
|
| | | Datum:08.10.02 16:33 
(chw.szb@freenet.de) | |
Eine Antwort in dieser Geschwindigkeit ist ja atemberaubend!
Danke, Alexander, werde es mal damit versuchen.
|
| | Datum: 08.10.02 21:03 
(carlo.keil@web.de) | |
Hallo Christian,
ich habe mal in meiner Wühlkiste gekramt und das Ergebnis unten angehängt.
Gebrauchsanleitung:
Erst speichern, dann lesen, anschliessend ausprobieren und zum Schluß gut finden :)
HTH
Carlo
--------------------------------------------------------------
'Diese Include-Datei stellt folgende Proceduren bereit:
'
'GetStringHeight r$
' Rückgabe: Höhe der Zeichenkette in Pixeln
'GetStringWidth r$
' Rückgabe: Breite der Zeichenkette in Pixeln
'DrawTextCenterH x1, x2, y, r$
' Der String r$ wird zwischen x1 und x2 zentriert in der Pixelzeile y ausgegeben.
'
'DrawTextCenterV x%, y1%, y2%, txt$
' Der String r$ wird zwischen y1 und y2 zentriert in der Pixelspalte x ausgegeben.
'
'DrawTextCenterVH x1%, y1%, x2%, y2%, txt$
' Der String r$ wird vertikal und horizontal zwischen y1 und y2 bzw. x1 und x2 zentriert.
'
'-------------------------------------------------------------------------------
Def GetTextExtentPoint32A(4) !"GDI32","GetTextExtentPoint32A"
Def GetDC(1) !"USER32","GetDC"
Def ReleaseDC(2) !"USER32","ReleaseDC"
Declare Text#, Ergebnis#
Proc GetTextExtent
Parameters r$, Flag% 'Bei Flag = 0 Stringhöhe zurückgeben, sonst Stringlänge
DECLARE Rückgabewert&, DeviceContext&
DIM Text#, @Add(Len(r$), 1)
DIM Ergebnis#, 8
String Text#, 0 = r$
DeviceContext& = GetDC(@GetActiveWindow())
GetTextExtentPoint32A(DeviceContext&, Text#, @Len(r$), Ergebnis#)
Rückgabewert& = @Long(Ergebnis#, 4) 'Breite
Case Flag% : Rückgabewert& = @Long(Ergebnis#, 0) 'Höhe
'Aufräumen:
ReleaseDC(@GetActiveWindow(), DeviceContext&)
Dispose Text#
Dispose Ergebnis#
Return Rückgabewert&
EndProc
Proc GetStringHeight
Parameters r$
GetTextExtent r$, 0
Return &(0)
EndProc
Proc GetStringWidth
Parameters r$
GetTextExtent r$, 1
Return &(0)
EndProc
'-------------------------------------------------------------------------------
Proc DrawTextCenterH
Parameters x1%, x2%, y%, txt$
Declare l&, x%
GetStringWidth txt$
l& = &(0)
x% = (x1% + x2% - l&) / 2
DrawText x%, y%, txt$
EndProc 'DrawTextCenterH
'-------------------------------------------------------------------------------
Proc DrawTextCenterV
Parameters x%, y1%, y2%, txt$
Declare h&, y%
GetStringHeight txt$
h& = &(0)
y% = (y1% + y2% - h&) / 2
'Etwas nach oben rücken, da über der Schrift noch ein kleiner Rand bis zur
'Schriftposition besteht. Beispiel: Bei Verdana 18 und Ausgabe ab Pixelzeile 0
'beginnt ein T erst in Pixelzeile 4.
y% = y% - (h& * 0.11)
DrawText x%, y%, txt$
EndProc 'DrawTextCenterV
'-------------------------------------------------------------------------------
Proc DrawTextCenterVH
Parameters x1%, y1%, x2%, y2%, txt$
Declare l&, h&, x%, y%
GetStringHeight txt$
h& = &(0)
GetStringWidth txt$
l& = &(0)
x% = (x1% + x2% - l&) / 2
y% = (y1% + y2% - h&) / 2
'Etwas nach oben rücken, da über der Schrift noch ein kleiner Rand bis zur
'Schriftposition besteht. Beispiel: Bei Verdana 18 und Ausgabe ab Pixelzeile 0
'beginnt ein T erst in Pixelzeile 4.
y% = y% - (h& * 0.11)
DrawText x%, y%, txt$
EndProc 'DrawTextCenterVH
'-------------------------------------------------------------------------------
|
|
|