Seite 1 von 1

Zeilenumbruch

Verfasst: 09.02.2005 05:12
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

Verfasst: 09.02.2005 06:26
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

Verfasst: 09.02.2005 06:57
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 

Verfasst: 10.02.2005 16:06
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...