Podobné riešenie bez použitia labelu. Na forme sú 2 pictureboxy Pbox1 a Pbox2. Prvý je základný kde sa vykreslí nejaká grafika na ukážku som tam dal 4 čiary. Pbox2 leží nad Pbox1 a je priehľadný a slúži na posun textu pri posune textu sa pracuje iba s pbox2 čiže netreba neustále prekreslovať Pbox1.
Private Sub GP_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
With PBox2
.Parent = PBox1
.BackColor = Color.Transparent
.BringToFront()
.Top = 0
.Left = 0
.Width = PBox1.Width
.Height = PBox1.Height
End With
Dim G As Graphics
Dim pero As New Pen(Color.Blue, 2)
Dim BMP As Bitmap
BMP = New Bitmap(PBox1.Width, PBox1.Height)
PBox1.Image = BMP
G = Graphics.FromImage(BMP)
G.Clear(PBox1.BackColor)
G.DrawLine(pero, 10, 10, 300, 300)
G.DrawLine(pero, 10, 30, 200, 300)
G.DrawLine(pero, 10, 30, 20, 300)
G.DrawLine(pero, 10, 30, 250, 400)
End sub
Pri pohybe myši sa presúvaný text umiestni tak že kurzor je vodorovne v strede textu, zvisle pod textom.
Private Sub PBox2_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PBox2.MouseMove
Dim pismo As New Font("times new roman", 12, FontStyle.Bold, GraphicsUnit.Point, 235)
Dim textrozmer As SizeF
Dim g2 As Graphics
g2 = PBox2.CreateGraphics
textrozmer = g2.MeasureString("Toto je testovací text", pismo)
PBox2.Refresh()
g2.DrawString("Toto je testovací text", New Font("times new roman", 12 * Zoom, FontStyle.Bold + FontStyle.Italic, GraphicsUnit.Point, 235), Brushes.Blue, e.X - textrozmer.Width \ 2, e.Y - textrozmer.Height)
End Sub
Na rozdiel od predchádzajúceho riešenia s labelom je pohyb plynulý bez trhania presúvaný text však mierne bliká. Pri normálnych veľkostiach to nevadí pri väčších textoch je to dosť viditeľné. Text sa pekne presúva ponad čiary - alebo iný obsah) vykreslený do Pbox1 bez toho že by ich bolo treba neustále prekreslovať. Neviem či je takéto riešenie správne po programátorskej stránke, preto by som poprosil skúsenejších programátorov o pripomienky (kritiku) k horeuvedenému riešeniu. Ďakujem.
|