Zeilenumbruch

Für allgemeine Fragen zur Programmierung mit PureBasic.
sobi
Beiträge: 170
Registriert: 05.02.2005 23:41
Wohnort: passau
Kontaktdaten:

Zeilenumbruch

Beitrag von sobi »

Guten Morgen,

also ich bin nicht fündig geworden und soweit ich inzwischen durchblicke, denke ich auch, dass es mit "DrawText()" nicht möglich ist einen Zeilenumbruch einzugeben, oder? - Wie kann ich es dann anstellen, dass in einem kleinen Fenster der Text trotzdem in einer neuer Zeile fortgesetzt wird und nicht in der alten dann "irgendwo im nirgendwo" verschwindet?

Liebe Grüße,


Simon
Benutzeravatar
ChaOsKid
Beiträge: 66
Registriert: 29.08.2004 15:07
Wohnort: Oktoberfest

Beitrag von ChaOsKid »

hi Simon,

ich würde es ungefähr so machen:

Code: Alles auswählen

Procedure DrawTextLines(Text$, Trenner$, x, y)
  For index = 1 To CountString(Text$, Trenner$) + 1
    Locate(x,y)
    DrawText(StringField(Text$, index, Trenner$))
    y + 16
  Next
EndProcedure

Text$ = "zeile 1" + #LF$ + "zeile 2" + #LF$ + "zeile 3" + #LF$ + "zeile 4"

If OpenWindow(0,0,0,310,110,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"ImageGadget") And CreateGadgetList(WindowID(0))
  If CreateImage(0, 300, 100)
    StartDrawing(ImageOutput())
    DrawTextLines(Text$, #LF$, 5, 5)
    StopDrawing()
    ImageGadget(0, 5,5,300,100,UseImage(0))
  EndIf
  Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf
mfG
Tobi
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

Ich weiß zwar nicht genau was du meinst. Aber falls du das meinen solltest :

Da kannst du einen Text direkt mit Zeilenumbruch direkt in das Fenster tippen.

Code: Alles auswählen

Declare GetTextField()
Declare AddTextField()
Dim text$(50)
zeile=1

If OpenWindow (1,200,200,500,500,#pb_window_systemmenu,"zeilenumbruch")
GetTextField()
If CreateGadgetList (WindowID())
ImageGadget (1,0,0,500,500,UseImage (1),#pb_image_border)
EndIf 
AddKeyboardShortcut (1, #PB_Shortcut_A,1)
AddKeyboardShortcut (1, #PB_Shortcut_B,2)
AddKeyboardShortcut (1, #PB_Shortcut_C,3)
AddKeyboardShortcut (1, #PB_Shortcut_D,4)
AddKeyboardShortcut (1, #PB_Shortcut_E,5)
AddKeyboardShortcut (1, #PB_Shortcut_F,6)
AddKeyboardShortcut (1, #PB_Shortcut_G,7)
;und so weiter
AddKeyboardShortcut (1, #PB_Shortcut_RETURN,50)
AddKeyboardShortcut (1, #PB_Shortcut_BACK,51)
Repeat
evID.l=WaitWindowEvent()
Select evID.l
Case #pb_eventmenu
Select EventMenuID()
Case 1
text$(zeile)=text$(zeile)+"A"
AddTextField()
Case 2
text$(zeile)=text$(zeile)+"B"
AddTextField()
Case 3
text$(zeile)=text$(zeile)+"C"
AddTextField()
Case 4
text$(zeile)=text$(zeile)+"D"
AddTextField()
Case 5
text$(zeile)=text$(zeile)+"E"
AddTextField()
Case 6
text$(zeile)=text$(zeile)+"F"
AddTextField()
Case 7
text$(zeile)=text$(zeile)+"G"
AddTextField()
Case 50;Enter
zeile=zeile+1
AddTextField()
Case 51;Löschen
text$(zeile)=Mid(text$(zeile),1,Len(text$(zeile))-1)
AddTextField()
EndSelect 



EndSelect 
Until evID.l=#pb_event_closewindow
End
EndIf 

Procedure GetTextField()
If CreateImage (1,500,500)
If StartDrawing (ImageOutput())
DrawingMode(1)
Box (0,0,500,500,RGB(255,255,255))
FrontColor (0,0,0)
For x=1 To 49
aktuell$=text$(x)
If aktuell$<>""
Locate (0,x*12)
DrawText(aktuell$)
EndIf 
Next x
StopDrawing ()
EndIf 
EndIf 

EndProcedure 


Procedure AddTextField()
GetTextField()
SetGadgetState (1,UseImage (1))
EndProcedure 
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich hab mir jetzt die codes meiner vorredner nicht reingezogen.

mein vorschlag als generelle lösung wäre, eine procedure zu schreiben,
die den übergebenen text in einzelne zeilen zerlegt und diese untereinander ausgibt.

so etwas ähnliches macht wohl auch der code von chaoskid...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten