Seite 1 von 2

Editorgadget mit vertikaler Zentrierung

Verfasst: 21.04.2021 13:45
von Velindos
Hallo Leute!

Um meine Notizen besser lesen zu können, füge ich einen Boldsatz von der Pos=0 bis zum ersten #CRLF$ ein.

Nun habe ich ein Problem, wenn mein Text vorher schon mehrere #CRLF$ hat.
Jemand eine Ahnung wie ich diese #CRLF$ vorher ausblenden kann um dann meinen Boldsatz wieder zu setzen!

Beispiel:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 322, 150, "Boldsatz Korrektur", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  EditorGadget(0, 8, 8, 306, 133)
  AddGadgetItem(0, 1, ""+Str(1) )
  AddGadgetItem(0, 2, "Zeiletext")
  AddGadgetItem(0, 3, ""+Str(3))
  AddGadgetItem(0, 4, "Zeiletext "+Str(4))

  BOLDSATZ_LAENGE = FindString(GetGadgetText(GGADGET),#CRLF$,0,#PB_String_NoCase)   					
  
  Debug "BOLDSATZ_LAENGE= " + BOLDSATZ_LAENGE
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Gruss ... Velindos!

PS: Sieht am Handy gut aus, Bravo!

Re: Editorgadget mit vertikaler Zentrierung

Verfasst: 21.04.2021 14:33
von Olafmagne
Velindos hat geschrieben: 21.04.2021 13:45 Hallo Leute!

Um meine Notizen besser lesen zu können, füge ich einen Boldsatz von der Pos=0 bis zum ersten #CRLF$ ein.

Nun habe ich ein Problem, wenn mein Text vorher schon mehrere #CRLF$ hat.
Jemand eine Ahnung wie ich diese #CRLF$ vorher ausblenden kann um dann meinen Boldsatz wieder zu setzen!

Beispiel:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 322, 150, "Boldsatz Korrektur", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  EditorGadget(0, 8, 8, 306, 133)
  AddGadgetItem(0, 1, ""+Str(1) )
  AddGadgetItem(0, 2, "Zeiletext")
  AddGadgetItem(0, 3, ""+Str(3))
  AddGadgetItem(0, 4, "Zeiletext "+Str(4))

  BOLDSATZ_LAENGE = FindString(GetGadgetText(GGADGET),#CRLF$,0,#PB_String_NoCase)   					
  
  Debug "BOLDSATZ_LAENGE= " + BOLDSATZ_LAENGE
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Gruss ... Velindos!

PS: Sieht am Handy gut aus, Bravo!
OK, zuerst einmal, dein EditorGadget hat die Nummer 0 ( EditorGadget(0, 8, 8, 306, 133) ),
im Code verweist du aber auf ein GGADGET ?
Zufällig ist GGADGET nicht initalisiert und deshalb, ZuFällig, auch 0 !

" füge ich einen Boldsatz von der Pos=0 bis zum ersten #CRLF$ ein.",
"Nun habe ich ein Problem, wenn mein Text vorher schon mehrere #CRLF$ hat. "
nun, wie soll vor pos 0 etwas anderes sein??
Von was genau ist die pos 0?
GetGadgetText gibt einen String$ zurück,dieser ist 1basiert, der Text im Gadget aber 0Basiert!
wenn du also von GadgetText sprichst, kann vor pos null nichts anderes sein,
Was genau meinst du??

Welches OS?

Bei windows kommst du um die win_api nicht vorbei!
hier suche mal nach der winapi-library von RSBasic , ist ein Link im Forum.

ich brauche etwas Zeit, werde mal einen Beispiel Code Schreiben

Olaf

Re: Editorgadget mit vertikaler Zentrierung

Verfasst: 21.04.2021 15:17
von Velindos
Hallo Olafmagne!

Danke für deinen HInweis. Habe die Sache nochmals korrigiert!

Code: Alles auswählen

If OpenWindow(0, 0, 0, 322, 150, "Boldsatz Korrektur", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  EditorGadget(0, 8, 8, 306, 133)
  AddGadgetItem(0, 1, "")
  AddGadgetItem(0, 2, "")
  AddGadgetItem(0, 3, "")
  AddGadgetItem(0, 4, "")
  AddGadgetItem(0, 5, "Das ist der Zeilentext der BOLD dargestellt wird!")
  AddGadgetItem(0, 6, "")
  AddGadgetItem(0, 7, "Weiterer Zeiletext ")
  AddGadgetItem(0, 8, "Weiterer Zeiletext ")
  AddGadgetItem(0, 9, "Weiterer Zeiletext ")

  BOLDSATZ_LAENGE = FindString(GetGadgetText(0),#CRLF$,0,#PB_String_NoCase)   					
  
  Debug "BOLDSATZ_LAENGE= " + BOLDSATZ_LAENGE
  Debug "GetGadgetText(0) = " + GetGadgetText(0)
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  
EndIf
Gruss ... Velindos!

Re: Editorgadget mit vertikaler Zentrierung

Verfasst: 21.04.2021 16:20
von Olafmagne
OK, hab mal nen kleinen code gemacht ,der zeilenweise formatiert(Farbe und/oder Schrift)

Code: Alles auswählen

EnableExplicit
Define win.i,edit.i,ev.i,linenr.i,text$
Define Bold=#CFE_BOLD
Define Italic=#CFE_ITALIC

Declare FormatEditor(id,s,e,color,effect=0)


win=OpenWindow(#PB_Any,#PB_Ignore,#PB_Ignore,800,600,"Formatieren",#PB_Window_SystemMenu|#PB_Window_WindowCentered)
If win
  edit=EditorGadget(#PB_Any,0,0,WindowWidth(win),WindowHeight(win))
  SetGadgetText(edit, ""+Str(1) + #CRLF$ + "Zeiletext" + #CRLF$ +""+Str(3) + #CRLF$ + "Zeiletext "+Str(4))
EndIf

text$=GetGadgetItemText(edit,0):Debug "text="+text$
FormatEditor(edit,0,Len(text$),RGB(255,0,0),Bold):;<0>=start der 1. zeile,len(text$) =länge der zeile
FormatEditor(edit,2,-1,RGB(0,0,0),0):;  <2>=0(1.zeile)+EIN zeichen+EIN #crlf(EIN zeichen!!)  -1=rest des textes
text$=GetGadgetItemText(edit,2):Debug "text="+text$
FormatEditor(edit,12,Len(text$),RGB(0,0,255),Bold)
FormatEditor(edit,14,-1,RGB(0,0,0),0)


Repeat
  ev=WaitWindowEvent()
  Select ev
    Case #PB_Event_CloseWindow
      End
    Case #PB_EventType_Change
      
  EndSelect
ForEver
End


Procedure FormatEditor(id,s,e,color,effect=0)
  Debug "Start="+s
  e+s        ;       ende der auswahl=start+länge,dh windows erwartet "erstes"zeichen und "ERSTES ZEICHEN"nach ende auswahl
             ;       dh. start =15/länge 9 zeichen, ende ist 15+9=24
  Debug "End="+e
  Protected cf.charformat\cbSize = SizeOf(charformat)
  Protected sel.CHARRANGE

  
  SendMessage_(GadgetID(id),#EM_EXGETSEL,0,sel)
  cf\dwMask       = #CFM_COLOR|#CFM_BOLD|#CFM_ITALIC|#CFM_UNDERLINE :;mögliche Formatierungen
  cf\crTextColor  = color  ; :Farbe
  cf\dwEffects    = effect ; :Effect /0=keine formatierung
  SendMessage_(GadgetID(id),#EM_SETSEL,s,s+e)   
  SendMessage_(GadgetID(id),#EM_SETCHARFORMAT,#SCF_SELECTION,@cf)
  SendMessage_(GadgetID(id),#EM_SETSEL,sel\cpMin,sel\cpMax)
EndProcedure


Sieh dir aber auf jeden Fall RSBasic's winapi-lib an

http://www.rsbasic.de/winapi-library/

Olaf

Re: Editorgadget mit vertikaler Zentrierung

Verfasst: 22.04.2021 06:44
von Velindos
Hallo Olafmagne!

Danke für deinen Beispiel, genau was ich meinte! DANKE

Gruss ... Velindos!

Re: Editorgadget mit vertikaler Zentrierung

Verfasst: 22.04.2021 12:34
von Olafmagne
Gern geschehen
bin selber gerade dabei, damit 'rumzuspielen'
weil api ist ja soo einfach :( >_< :lamer: :praise: :bluescreen:


Olaf

Re: Editorgadget mit vertikaler Zentrierung

Verfasst: 09.09.2021 22:00
von udg
es sollte auch eine vertival allign für text in einem InputGadget geben. Ich muss dazu immer eine eigene Prozedur nutzen.
Schön wäre, wenn das als PB Konstante nativ mitkommen würde.

#PB_Padding_Text(top,bottom,left,right) :allright:

center text horizontal und vertical in einem Inputgadget.
so wie im CSS: padding

Re: Editorgadget mit vertikaler Zentrierung

Verfasst: 09.09.2021 23:57
von jacdelad
@Olaf: Dein Code funktioniert nicht unter Win64. Die Deklarationen von win und edit müssen ".i" sein.

Re: Editorgadget mit vertikaler Zentrierung

Verfasst: 10.09.2021 01:58
von Olafmagne
@jacdelad
@Olaf: Dein Code funktioniert nicht unter Win64. Die Deklarationen von win und edit müssen ".i" sein.

OK, mit PureBasic 5.73 gibt es (bei mir) keine Probleme,ABER,PureBasic 6 verlangt definitiv ein integer.

Gut,habe es imCode oben geändert!
Geh dann mal Code ändern binn dann morgen früh fertigputain pas possible ça grummel grummel...

Re: Editorgadget mit vertikaler Zentrierung

Verfasst: 10.09.2021 11:11
von jacdelad
?
Die 64 Bit Version erzeugt auch 64 Bit Handles. Deshalb sollte für Handles/IDs immer ".i" gewählt werden, bzw. Endung weglassen, dann wird automatisch das Richtige gewählt. Es kann natürlich sein, dass die zurückgegebene Zahl klein genug ist um in ein 32 Bit Integer zu passen, aber das ist russisch Roulette.