Editorgadget mit vertikaler Zentrierung

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Editorgadget mit vertikaler Zentrierung

Beitrag 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!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: Editorgadget mit vertikaler Zentrierung

Beitrag 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
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Editorgadget mit vertikaler Zentrierung

Beitrag 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!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: Editorgadget mit vertikaler Zentrierung

Beitrag 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
Zuletzt geändert von Olafmagne am 10.09.2021 02:22, insgesamt 1-mal geändert.
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Editorgadget mit vertikaler Zentrierung

Beitrag von Velindos »

Hallo Olafmagne!

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

Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: Editorgadget mit vertikaler Zentrierung

Beitrag von Olafmagne »

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


Olaf
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
udg
Beiträge: 560
Registriert: 20.06.2013 23:27

Re: Editorgadget mit vertikaler Zentrierung

Beitrag 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
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE! TOP. Kauft Eure Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Editorgadget mit vertikaler Zentrierung

Beitrag von jacdelad »

@Olaf: Dein Code funktioniert nicht unter Win64. Die Deklarationen von win und edit müssen ".i" sein.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: Editorgadget mit vertikaler Zentrierung

Beitrag 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...
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Editorgadget mit vertikaler Zentrierung

Beitrag 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.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Antworten