"getippter" Text

    • VB.NET

    Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von flo.exe.

      "getippter" Text

      Hi,
      Folgender Code dient dazu, den Text aus einem String getippt darzustellen.
      Recht nützlich, wenn der Text nicht einfach so "hingeklatscht" sein soll, sondern ähnlich einem Dialog, sozusagen gesprochen.
      Ist z.B. führ einen Einführungsassistenten gedacht.

      VB.NET-Quellcode

      1. Imports System.Drawing.Text
      2. Imports System.Threading

      VB.NET-Quellcode

      1. Public Function Text_Schreibe(ByVal s As String, ByVal font As System.Drawing.Font, ByVal brush As System.Drawing.Brush, ByVal x As Single, ByVal y As Single, ByVal time As Integer)
      2. Try
      3. Dim str(s.Length) As String 'erzeugt einen String-Array, mit dem Index der Länge des zu zeichnenden Strings s
      4. For a = 1 To s.Length
      5. str(a) = Mid(s, a, 1) 'in diesem Array wird nun jeder einzelne Buchstabe des Strings gespeichert
      6. Next
      7. Dim oldtext As String = ""
      8. For i = 1 To s.Length
      9. oldtext = oldtext & str(i) 'jede "Runde" der schleife wird ein Buchstabe hinzugefügt
      10. CreateGraphics.DrawString(oldtext, font, brush, x, y) 'Zeichnet den Text
      11. Thread.Sleep(time) 'verzögert die weitere Ausführung, der Text erscheint nicht sofort
      12. ', sondern wird "getippt". Angabe in Millisekunden
      13. Application.DoEvents()
      14. Next
      15. Return 1 'Bei erfolgreicher ausführung wird eine "1" zurückgegeben
      16. Catch ex As Exception
      17. MsgBox(ex.ToString, MsgBoxStyle.Critical, "Fehler!")
      18. Return 0 'Falls die Ausführung fehlschlägt, wird eine "0" zurückgegeben
      19. End Try
      20. End Function

      VB.NET-Quellcode

      1. Public Function Text_Delete()
      2. Try
      3. Me.Refresh() 'Zeichnet Form1 neu, der erstellte Text verschwindet
      4. Return 1 'Bei erfolgreicher ausführung wird eine "1" zurückgegeben
      5. Catch ex As Exception
      6. MsgBox(ex.ToString)
      7. Return 0 'Falls die Ausführung fehlschlägt, wird eine "0" zurückgegeben
      8. End Try
      9. End Function

      Beispielprojekt wird folgen (bin am hochladen...)

      Edit: Beispielprojekt:
      7zip: magerquark.ma.ohost.de/Schreibmaschine_Text.7zip
      zip: magerquark.ma.ohost.de/Schreibmaschine_Text.zip

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „magerquark“ ()

      Darf ich noch etwas ergänzen? Wenn man den Text direkt in eine RichTextbox schreiben möchte, geht das so:

      VB.NET-Quellcode

      1. Public Function Text_Schreibe(ByVal sText As String, ByVal rtb As RichTextBox, ByVal Time As Integer, Optional ByVal overwritetext As Boolean = False) As String
      2. Try
      3. If overwritetext = True Then
      4. rtb.Text = ""
      5. End If
      6. For i = 0 To sText.Length - 1
      7. rtb.AppendText(sText(i))
      8. System.Threading.Thread.Sleep(Time)
      9. Application.DoEvents()
      10. Next
      11. Return "OK"
      12. Catch
      13. Return "Error: " & Err.Description
      14. End Try
      15. End Function

      Aufrufbeispiel:

      VB.NET-Quellcode

      1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      2. Text_Schreibe("Hier kann der Text rein.", RichTextBox1, 50)
      3. End Sub


      Nur zur Vollständigkeit ;) Gute Idee.

      Edit: Kleine Sache noch geändert an der Funktion.

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „kevin89“ ()

      VB.NET-Quellcode

      1. Dim stext As String="dein text"
      2. Dim timer As Integer=50
      3. For i = 0 To stext.Length - 1
      4. Me.Text=Me.Text + stext(i)
      5. System.Threading.Thread.Sleep(Time)
      6. Application.DoEvents()
      7. Next

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kevin89“ ()

      Dann mach das ganze in einen Timer:

      VB.NET-Quellcode

      1. Me.Text=""
      2. Dim stext As String="dein text"
      3. Dim Timer As Integer=50
      4. For i = 0 To stext.Length - 1
      5. Me.Text=Me.Text + stext(i)
      6. System.Threading.Thread.Sleep(Time)
      7. Application.DoEvents()
      8. Next

      Und den Interval für 5 Sekunden dann zum Beispiel auf 5 Sek stellen
      ich hab mal versucht, das ganze für labels zu machen:

      VB.NET-Quellcode

      1. Dim schtrink As String = "mein teststring"
      2. Try
      3. For i = 0 To schtrink.Length - 1
      4. Label2.Text.Insert(Label2.Text.Length, schtrink(i))
      5. System.Threading.Thread.Sleep(10)
      6. Application.DoEvents()
      7. Next
      8. Catch
      9. End Try

      Aber der Text will nicht kommen. Warum?
      | Keine Fragen per PN oder Skype.
      Zu deinem Problem gibt es 2 Lösungen.

      1. Du fügst zwar den Text des Labels etwas dazu, speicherst es aber nirgends:

      VB.NET-Quellcode

      1. Label2.Text = Label2.Text.Insert(Label2.Text.Length, schtrink.Chars(i))


      2. Wieso machst du es mit Insert, wenn du was am Ende hinzufügen willst?:

      VB.NET-Quellcode

      1. Label2.Text &= schtrink.Chars(i)

      Hierbei wird immer der nächste Buchstabe an den Text des Labels drangehängt.

      lg