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. :lol:

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