Text zeichnen lassen

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von nemesis.

    Text zeichnen lassen

    Hallo,

    ich würde gerne mit GDI+ den Prozentsatz beim Laden eines Programms etwas in den Splashscreen schreiben.

    Ein Versuch war:

    VB.NET-Quellcode

    1. Private Sub frmSplash_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    2. Dim graphic As Graphics
    3. Dim p As Pen
    4. Dim drawPoint As New PointF(5, 5)
    5. Dim drawFont As New Font("Arial", 16)
    6. Dim drawBrush As New SolidBrush(Color.Black)
    7. Dim drawString As [String] = "Sample Text"
    8. graphic = Me.CreateGraphics()
    9. p = New Pen(System.Drawing.Color.Black, 10)
    10. graphic.DrawString(drawString, drawFont, drawBrush, drawPoint)

    Aber ich erhalte hier weder einen gezeichneten String, noch eine Fehlermeldung.

    Kann mir hier jemand weiterhelfen?

    Vielen Dank!
    Alles klar, das funktioniert. Leider zeichnet er mir nun aber den String in den Hintergrund und nicht über die Progressbar. Zudem bleibt er immer bei dem ersen Wert stehen.
    den Splashscreen aktualisiere ich wie folgt:

    VB.NET-Quellcode

    1. Dim splashMessage As Action(Of Integer, String) = _
    2. Sub(n, m)
    3. _Spl.ProgressBar1.Value = n
    4. _Spl.lblProzent.Text = String.Format("{0}%", n)
    5. _Spl.lblInfo.Text = String.Format("{0}", m)
    6. End Sub
    7. Dim i As Integer = 0
    8. If _Spl Is Nothing Then
    9. _Spl = Application.OpenForms.OfType(Of frmSplash).FirstOrDefault
    10. End If
    11. _Spl.BeginInvoke(splashMessage, i, "Daten werden geladen")
    12. ...
    13. i+=100
    14. _Spl.BeginInvoke(splashMessage, i, "Daten erfolgreich geladen")

    und das was bislang in _Spl.lblProzent.Text ausgegeben wird soll nun auf die Form gezeichnet werden. So erhalte ich die Progressbar mit einer Prozentangabe.
    Du kannst nur auf ein Fenster zeichnen. Also musst du auf die Progressbar zeichnen. In deren Paint-Event, falls es das nicht gibt lass ein eigenes Steuerelement von Progressbar erben und implementier einfach eine Methode & ggf. eine Property zum darstellen des Prozentsatzes.
    Auf Progressbars lässt sich afaik nicht zeichnen weil das Betriebsystem die irgendwie rendert... (Darum sehen die auch überall anders aus, vgl Windows 7 mit Windows XP oder einem Linux)
    Hier ist also Endstation. Wenn du sowas machen willst musst du die Progressbar komplett selbst zeichnen, also ein eigenes Control erstellen. Kurzanleitung:

    1) Klasse erstellen und von Control erben lassen
    2) Property "Value" erstellen/etc erstellen. Ausführlicher Property-Code, so kannst du beim Verändern des Wertes neuzeichnen lassen
    3) In der OnPaint-Methode (überschreiben!) alles "von Hand" zeichnen
    4) kompilieren, Control ist dann in der Toolbox

    VB.NET-Quellcode

    1. Public Class MeineProgressBar
    2. Inherits System.Windows.Forms.Control
    3. Private _value As Integer = 0
    4. Public Property Value
    5. Get
    6. Return _value
    7. End Get
    8. Set(value)
    9. 'wenn value > min und < max dann
    10. _value = value
    11. Me.Invalidate() 'neuzeichnen
    12. End Set
    13. End Property
    14. Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
    15. 'hier zeichnen
    16. End Sub
    17. End Class


    Von ProgressBar erben habe ich schonmal versucht, das ist merkwürdig²³
    Z.B. muss man mit SetStyle hantieren um überhaupt die OnPaint-Methode verwenden zu können und dann zeichnet sich das Control ständig neu (=> flackert, hängt). Würde das Teil komplett neu aufsetzten - ist nicht soviel arbeit.
    Hier :)
    1. Neue Klasse in dem Projekt wo das Control sein soll (geht später auch per .dll)
    2. Klasse auswählen
    3. namen geben
    4. Von Control erben
    5. Methode zum Zeichnen erstellen
    6. Zeichnen

    Nun wird das Control in der ToolBox ganz oben sein.
    Bilder
    • 1.png

      11,94 kB, 396×214, 99 mal angesehen
    • 23.png

      48,33 kB, 948×649, 109 mal angesehen
    • 45.png

      45,64 kB, 1.256×543, 107 mal angesehen
    • 6.png

      4,63 kB, 537×94, 112 mal angesehen