* RobIII geeft effe wat code gebakken
Visual Basic 6:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| Private Sub OutlineText(ByRef objDraw As Object, _
strText As String, _
iFontsize As Integer, _
Optional iBorderSize As Double = 1, _
Optional lInnerColor As Long = vbWhite, _
Optional lOutlineColor As Long = vbBlack, _
Optional X As Long = -1, _
Optional Y As Long = -1)
Dim lX As Long
Dim lY As Long
Dim R As Integer
Dim I As Double
Const pi = 3.14159265358979
With objDraw
If X < 0 Then X = .CurrentX
If Y < 0 Then Y = .CurrentY
.Enabled = False
.AutoRedraw = True
.FontSize = iFontsize
.ForeColor = lOutlineColor
.ScaleMode = vbPixels
For R = Abs(iBorderSize) To 0 Step -1
For I = 0 To 2 * pi Step 0.1
lX = X + (R * Cos(I))
lY = Y + (R * Sin(I))
.CurrentX = lX
.CurrentY = lY
objDraw.Print strText
Next
Next
.ForeColor = lInnerColor
.CurrentX = X
.CurrentY = Y
objDraw.Print strText
.Enabled = True
End With
End Sub |
Aanroep:
Visual Basic 6:
1
| OutlineText Picture1, "Test", 25, 1.5, vbWhite, vbRed, 25, 25 |
De parameters zijn als volgt:
•
objDraw Het object waarin je wil tekenen
(Meestal een picturebox, maar kan ook anders zijn)
•
iFontsize Font grootte
•
iBorderSize Border grootte
(default 1)
•
lInnerColor Kleur "binnenkant" letters
(default wit)
•
lOutlineColor Kleur "border"
(default zwart)
•
X X-Positie waar de tekst moet komen
(default: huidige .CurrentX van objDraw)
•
Y Y-Positie waar de tekst moet komen
(default: huidige .CurrentY van objDraw)
Hoe werkt het
Als je de code in slow-motion zou bekijken zie je dat de tekst een aantal keren in een cirkel over elkaar wordt geprint in de borderkleur. Vervolgens wordt precies in het midden de juiste tekst 1 maal in de "innercolor" kleur geplaatst.
Simple as that
Thanks curry684 voor je draad (die bracht me op het idee)
Screenshotje van bovenstaand voorbeeld:

En eentje voor de TS:

Nog meer voorbeelden:
Snel testen?
Open een nieuw project, gooi de bovenstaande sub in je code en gooi in je form_load event de volgende code:
Visual Basic 6:
1
2
| Me.FontName = "Arial"
OutlineText Me, "Test", 50, 3, vbWhite, vbBlack, 25, 25 |
Runnen et voila
Overigens wordt anti-aliasing al een stukje moeilijker
Oh, en het default font van objDraw wordt gebruikt. Je zou hier nog een extra parameter van kunnen maken. Gebruik om te testen bijvoorbeeld "Arial". MS Sans serif (default font van VB) geeft geen mooi resultaat. En let op dat de X en Y in
pixels wordt gemeten, niet
twips!
[
Voor 52% gewijzigd door
RobIII op 17-12-2003 18:05
]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij