Toon posts:

[VB6] positionering (hoogte) van vertikale tekst

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

ik probeer in VB een usercontrol te schrijven die als controlcontainer gaat dienen. Deze container heeft een captionproperty. De titel moet aan de linkerkant van de container komen, en dan vertikaal. Om de tekst vertikaal te krijgen gebruik ik CreateFontIndirect waaraan ik dan een LOGFONT meegeef. Het is dus de bedoeling dat de titel rechtsuitgelijnd wordt, wanneer die vertikaal staat, dus om verwarring te voorkomen:

Afbeeldingslocatie: http://elektron.its.tudelft.nl/~vdhoor46/text.jpg

Hierbij is het einde van de titel dus het 'begin'. Alleen nou kan de titel natuurlijk verschillende lengtes hebben qua String. Hiervoor moeten de coordinaten waar ik de CreateFontIndirect op af stuur veranderd worden. En dat is precies mijn probleem. Voor een horizontale String kan je de lengte berekenen met GetTextExtentPoint32, en eventueel de gemiddelde breedte van een character. Maar blijkbaar gaat dit voor vertikale zaken niet meer op.

Heeft er iemand een idee hoe ik dus de lengte van een vertikale string kan berekenen zodat ik de 'y' voor CreateFontIndirect daarop kan aanpassen en zo dus al naar gelang van de lengte van de titel deze over de y-as kan verschuiven?

Begrijp me niet verkeerd, ik vraag zeker geen kant en klare oplossingen. Ik ben meer geinteresseerd in ideeen en eventuele pointers in de goede richting.

Verwijderd

Misschien kan je hier wat mee. Het printen van de text is natuurlijk alleen als voorbeeld en heb je niet nodig maar met textwidth (en evt. textheight) kan je dan eerst de breedte (en hoogte) van je string in pixels bepalen waarna je die info kunt gebruiken in je andere functie om de tekst uit te lijnen.

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Form_Load()
   Dim sT As String
   sT = "Hello"
   Form1.ScaleMode = 3 ' pixel
   Form1.Show
   Form1.Font = "Arial Bold"
   Form1.FontSize = 10
   Form1.Print sT
   Form1.Print (TextWidth(sT))
   Form1.FontSize = 21
   Form1.Print sT
   Form1.Print (TextWidth(sT))
End Sub