Zeilenumbruch in DrawText()

Für allgemeine Fragen zur Programmierung mit PureBasic.
D4uS1
Beiträge: 268
Registriert: 02.09.2006 12:16

Zeilenumbruch in DrawText()

Beitrag von D4uS1 »

Ist es möglich in einem DrawText() Abschnitt eine neue Zeile anzufangen, damit man nicht ständig den Befehl erneut ausrufen muss um eine neue Zeile zu schreiben?

Danke im Voraus
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Nein.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Hallo,

hab mal ne Procedure dazu geschrieben:

Code: Alles auswählen

; Diese Procedure ermöglicht es einen Text über mehere Zeilen zu schreiben und erlaubt sogar die Verwendung von chr(10)
Procedure DrawMultiLineText(x, y, width, height, Text$, Color)
; ©2007 by Scarabol
  If width > 0 And height > 0 And height > TextHeight(Text$)
    ; PosX und PosY speichern die StartPosition
    PosX = x
    PosY = y
    ; teilt den Text in Wörter anhand der Leerzeichen
    For i = 1 To CountString(Text$, #Space)+1
      ; Wort für Wort zum Text hinzufügen
      SFT$ = StringField(Text$, i, #Space)
      ; Prüfen ob das Wort schon über die angegebene Weite hinausragt
      If PosX+TextWidth(SFT$) > x+width
        ; wenn ja in neue Zeile springen
        PosX = x
        PosY+TextHeight(SFT$)
      EndIf
      ; Prüfen ob ein Zeilenumbruch im aktuellen Wort gefunden wurde
      If FindString(SFT$, Chr(10), 0)
        ; Wort bis zum Umbruch schreiben
        DrawText(PosX, PosY, StringField(SFT$, 1, Chr(10)), Color)
        ; in neue Zeile springen
        PosX = x
        PosY+TextHeight(SFT$)
        ; Wort nach dem Umbruch auswählen
        SFT$ = StringField(SFT$, 2, Chr(10))
      EndIf
      ; nach den eventuellen Zeilensprüngen prüfen ob nicht schon die Höhe erreicht ist
      ; wenn ja die Höhe als Ergebnis zurückgeben
      If PosY > y+height : ProcedureReturn PosY : EndIf
      PosX = DrawText(PosX, PosY, SFT$+#Space, Color)
    Next
    ProcedureReturn PosY
  Else
    ProcedureReturn 0
  EndIf
EndProcedure
Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Einer deine Stelle würd' ich DrawText_() benutzten.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
50-Pfennig
Beiträge: 75
Registriert: 22.01.2007 22:24
Wohnort: 40764 Langenfeld
Kontaktdaten:

Beitrag von 50-Pfennig »

Müsste es nich einfach mit

Code: Alles auswählen

DrawText("String Zeile1" + Chr(10) + "String Zeile2")
funktionieren?
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

50-Pfennig hat geschrieben:Müsste es nich einfach mit

Code: Alles auswählen

DrawText("String Zeile1" + Chr(10) + "String Zeile2")
funktionieren?
nein, wieso sollte es... ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten