2011年11月16日 星期三

#VB Drawing String

想做一個可以重繪TextBox內容的Panel
當滑鼠停留textbox,並且文字長度超過textbox顯示長度
將內容描繪在Panel之上,呈現完整文字內容




===============================================


要設定Panel 的 parent 是在哪個 容器之下


好像超出邊界,會有問題
因為不是單純在 form之上
而是堆疊在其他容器


有點麻煩





How to find the "real" screen position of a control


Dim ScreenPos as point=me.PointToScreen(new point(0,0))


目前改Panel 由Form 完成
減少這些問題



============================================


目前測試可行


在注意遺下 Mouse Enter 發生在 TextBox 時,繪製 Panel
Mouse Leave 發生在 Panel 時, 將 Panel 關掉 





    '放大Panel
    Private Sub TextBox1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.MouseEnter

        Panel1.BringToFront()

        Panel1.Visible = True
    End Sub

'關掉 Panel

    Private Sub Panel1_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Panel1.MouseLeave
        Panel1.Visible = False


        TextBox1.BringToFront()
        TextBox1.Visible = True
    End Sub


'Panel 描繪事件
    Private Sub Panel1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint


        Panel1.Location = TextBox1.Location


        '描繪 TextBox 內容
        DisplayData(e)
    End Sub




        '描繪 TextBox 內容

 Public Sub DisplayData(ByVal e As PaintEventArgs)


        ' Display the result.
        Dim myFont As New Font("Arial", 8)
        Dim myBrush As New SolidBrush(Color.Black)


        Dim textSize As SizeF
        Dim pg = Panel1.CreateGraphics


        'Graphics.MeasureString(測量字串,文字格式), 傳回字串呈現的浮點數長寬
        textSize = pg.MeasureString(TextBox1.Text, myFont)


        Panel1.Size = New Point(textSize.ToSize.Width + 4, textSize.ToSize.Height + 8)


        e.Graphics.DrawString(TextBox1.Text, myFont, myBrush, _
        New PointF(0, 0))


    End Sub




再來計算遺下,畫面上的TextBox內容是不是超過顯示長度



Graphics.MeasureString 方法 (String, Font)

MeasureString 方法是設計用來與個別字串一起使用,並在字串前後包含少量的額外空格以便容納突出的圖像。 此外,DrawString 方法會調整圖像點使顯示品質最佳化,而且可能將字串顯示得比MeasureString 所描述的還要窄。
 若要取得適合配置中相鄰字串的度量資訊 (例如,實作格式化字串時),請使用 MeasureCharacterRanges 方法,或接受 StringFormat 物件的其中一個 MeasureString 方法,並傳遞 GenericTypographic 此外,也請確定 Graphics 的 TextRenderingHint 為 AntiAlias




=============================================

[C#][VB.NET]如何在 DrawString 繪製指定的文字字串增加底色與得到文字所占大小





VB 2005 - 讀者詢問 DrawString 問題
http://blog.xuite.net/alwaysfuturevision/liminzhang/8683732


Drawing string on panel

沒有留言:

張貼留言