Seite 1 von 2
Text mit Umbruch ins Stringgadget
Verfasst: 14.11.2004 01:04
von Hroudtwolf
Ich hätt da gern maln Problem,
Weiß da draußen jemand wie man eine Textdatei MIT Zeilenumbruch in
ein MULTLINE-Stringgadget laden kann?
Und wie man eine dort markierte Textpasage auslesen kann?
Verfasst: 14.11.2004 13:23
von Pelagio
Hallo Hroudtwolf,
ich hoffe dies hilft dir:
Code: Alles auswählen
Procedure ReadFileData (FileName.s)
Protected Text.s
If ReadFile(0,FileName)
While Eof(0) = #FALSE
Text = Text + Chr(#Asci_CR) + Chr(#Asci_LF) + ReadString()
Wend
CloseFile(0)
SetGadgetText(#StringGadget, Text)
EndIf
EndProcedure
edit redacid: code-Tags gesetzt.
Verfasst: 14.11.2004 13:28
von Pelagio
Tschuldigung, habe eine Information vergessen:
#Asci_CR = 13
#Asci_LF = 10
[Text = Text + Chr(13) + Chr(10) + ReadString() ]
Verfasst: 14.11.2004 14:13
von Deeem2031
Ich glaub das Problem liegt eher beim Zeilenumbruch und den markierten Text auszulesen..
Ich hab gestern nacht zwar mal im PSDK desswegen nachgeguckt, hab aber keine Lösung gefunden, nur das es warscheinlich mit dem Stringgadget nicht geht. Und zwar ist der Style #ES_AUTOHSCROLL für sowas zuständig, welcher aber anscheinend automatisch gesetzt wird und nach erstellen des Gadgets nicht mehr geändert werden kann.
"After the control has been created, these styles cannot be modified, except as noted."
Habs trotzdem mal ausprobiert, ging aber nicht:
Code: Alles auswählen
CreateGadgetList(OpenWindow(0,0,0,100,80,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,""))
StringGadget(0,0,0,100,60,"",#PB_String_MultiLine)
StringGadget(1,0,60,100,20,"",#PB_String_ReadOnly)
SetWindowLong_(GadgetID(0),#GWL_STYLE,GetWindowLong_(GadgetID(0),#GWL_STYLE)!#ES_AUTOHSCROLL)
Repeat
SendMessage_(GadgetID(0),#EM_GETSEL,@StartSel,@EndSel)
SetGadgetText(1,Str(StartSel)+" bis "+Str(EndSel))
Until WaitWindowEvent() = #PB_Event_CloseWindow
Musst also warscheinlich dein Stringgadget selber erstellen.
Dafür siehste da wie du die Selektion rausbekommst, bin aber zu faul noch rauszufinden wie du dann den Text bekommst

Stringgadget
Verfasst: 14.11.2004 19:25
von Hroudtwolf
Vielen Dank für die Antworten.
Gemeinsam schaffen wir Wissen....................
Verfasst: 23.11.2004 19:50
von Hoto
Zeilenumbruch geht auch einfacher ohne API:
Code: Alles auswählen
StringGadget(1,0,0,400,200,"",#PB_String_MultiLine | #ESB_DISABLE_BOTH | #ES_AUTOVSCROLL | #WS_VSCROLL )
Frag mich wieso das alle so kompliziert machen.
Das 2. Flag sorgt für den Zeilenumbruch, das 3. dafür das er bei mehr Zeilen nach unten scrollt und das letzte damit ein Scrollbalken da ist, ansonsten kann man mit der Maus nicht scrollen.
Drauf gekommen bin ich über den Visual Designer, dort kann man diese 2 Flags setzen und als ich im April mit PB anfing hab ich das per Zufall rausgefunden.
Haben das alle bisher übersehn oder hat die Methode irgend einen gravierenden Nachteil den ich übersehn hab?!?
Verfasst: 23.11.2004 20:26
von ts-soft
@Hoto
Wenn mich nicht alles täuscht funktioniert Deine Version unter Win9x nicht. Kann ich aber im moment nicht Testen. Habs glaub ich mal so gemacht, und später mit Schrecken gesehen das unter Win9x alles rechtsbündig war
Verfasst: 23.11.2004 21:18
von Hoto
Hm, ok, das kann ich selbst schlecht wissen, benutze seit Jahren schon kein Win98 mehr. Nachprüfen kann ichs daher auch nicht.
Verfasst: 23.11.2004 21:56
von GPI
ARGH! Schon wieder!
>
Code: Alles auswählen
StringGadget(1,0,0,400,200,"",#PB_String_MultiLine | #ESB_DISABLE_BOTH | #ES_AUTOVSCROLL | #WS_VSCROLL )
SO NICHT! NICHT ABGESEGNET UND FUNKTIONIERT SO NUR UNTER XP (ok, eventuell unter 2000, nicht aber unter der 9x-Serie)
Könnte mal bitte das alle löschen? Nur weil es funktioniert, darf man es nicht auch machen! (Sprich unter Longhorn oder wie das Ding heißt könnte es schon nicht mehr funktionieren!)
Code: Alles auswählen
Procedure EditorGadgetEnableTextWarp(Id); - Activate the automatic word-warp for a EditorGadget
GID=GadgetID(Id)
dc=GetWindowDC_(GID)
SendMessage_(GID, #EM_SETTARGETDEVICE ,dc ,-1)
ReleaseDC_(GID,dc)
EndProcedure
Verfasst: 23.11.2004 22:32
von ts-soft
Hab mich also nicht getäuscht