PDA

Click to See Complete Forum and Search --> : drawing text??


spike232
Jul 6th, 2002, 09:48 AM
i want to put some text over an image, in vb6 i would have just used a label, but labels in .net cant have proper transparency for some reason, i have serched this forum and the only solution is to draw the text on, i have used the following code but the text appers with sight colour round the side the colour changes depending on what part of the text it is. i have seen this happen below with xp's true type and transparency, is this whats causing it and can it be stopped??


Dim g As Graphics = PictureBox1.CreateGraphics
Dim mybrush As New SolidBrush(Color.Black)
Dim myFont As New Font("Microsoft Sans Serif", 8.5, FontStyle.Regular, GraphicsUnit.Point, 5)
g.DrawString(message, myFont, mybrush, 10, 30)
g.DrawString(stext, myFont, mybrush, 10, 40)

stanis
Jul 8th, 2002, 10:54 PM
I think the Image control or whatever it's called now should have a property exposing its device context as an object, like Canvas or something. This canvas should have appropriate methods for outputting text. Otherwise, you can declare TextOut API and draw text using Image1.hDc like we used to do in VB6. You will need to do this at appropriate time so that the image is drawn first, so you will need to do this in Refresh event of the Image or subclass the image control and intercept WM_PAINT message, painting here.

Labels here are really a waste of resources. I heard that there is a StaticText control, try it, maybe it has transparency capabilities.

Best,
Stanislav

stanis
Jul 8th, 2002, 10:58 PM
I haven't really read your question to the end, sorry. What are you saying about transparency issues in XP? Please provide all the code you're using right now, maybe I can help.

Best,
Stanislav

spike232
Jul 9th, 2002, 04:36 AM
all the code is above, the onely other thing is a picture box added to the form.

when the text is drawn their is a slight colourd outline (usualy kind of rainbow colourd)

the text also looks bold when it is not

i have seen simalar things occur with xp's true type when antiatlesing text on a transparent background, but i do not know if this is the cause

stanis
Jul 9th, 2002, 09:27 PM
Hi again,
You should really try to use regular API TextOut or DrawText function. The text is always drawn with transparent background. All you need to do is use SelectObject to select a font handle, set text color and use one of the above functions. If the rainbow color around the text is gone, you will need to consult MSDN on Graphics.DrawString method. Also, the text functions do not need a brush - at least in normal Windows API - instead you use SetTextColor function on the device context. I am not familiar with the NET framework that much, but I think DrawString should have an additional parameter for text color or Graphics object has SetTextColor or similar method for specifying text color.

I also suspect there should be a different method for drawing text since Windows API has at least three different functions for drawing text and all of them accept different parameters (TextOut, TabbedTextOut, DrawText, DrawTextEx).

Hope this helps,
Stanislav

stanis
Jul 9th, 2002, 09:30 PM
Another thing,

I just looked in API-Guide and here's the NET example for DrawText that they provide:

Imports System
Imports System.Windows.Forms
Imports System.Drawing
Public Module modmain
Sub Main()
'The KPD-Team 2001
'URL: http://www.allapi.net/dotnet/
'E-Mail: KPDTeam@Allapi.net
Dim theForm as MainForm = new MainForm()
theForm.Size = new Size(500, 350)
theForm.Text = "Visual Basic.NET"
theForm.ShowDialog()
End Sub
End Module
Public Class MainForm
Inherits Form
Protected Overrides Sub OnPaint(e as PaintEventArgs)
e.Graphics.DrawString("Hello World!", new Font("Verdana", 16), new SolidBrush(Color.Red), new PointF(10, 10))
End Sub
End Class

Hope it helps,
Stanislav

spike232
Jul 10th, 2002, 06:39 AM
that works great, thanks