EditorGadget mit feste Anzal von Zeilen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
marcelx
Beiträge: 429
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

EditorGadget mit feste Anzal von Zeilen

Beitrag von marcelx »

Hallo,
ich möchte EditorGadget mit eine fest Anzahl von Zeilen verwenden.
Mit folgende code:

Code: Alles auswählen

EditorGadget(#edit, 10, 25, 230, 130)
SendMessage_(GadgetID(edit), #EM_SETTARGETDEVICE, #Null, 0)
wird die Eingabe der Text auf die Breite der Fenster realisiert. Wunderbar.
Wenn ich aber mehr Zeilen eingebe als mein Fenster, erscheint die Scroll-bar und in mein Gadget werden mehr Zeilen abgelegt.
Also, ich möchte mehere Zeilen als in mein Eingabefenster passt verbieten.
Gibt es dafür schon eine Lösung und wo?
Danke,
MarcelX
Win-10, PB 5.31 (Windows - x86)
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: EditorGadget mit feste Anzal von Zeilen

Beitrag von c4s »

Kurz und schmerzlos: Es geht nicht.

Du kannst höchstens die Zeilen zählen und wenn die maximale Anzahl erreicht ist, die letzte immer löschen.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: EditorGadget mit feste Anzal von Zeilen

Beitrag von ts-soft »

Mit #EM_SETLIMITTEXT kannst Du die Anzahl Zeichen begrenzen, was in diesem Falle eher nicht nutzt.
Mit SendMessage_(hwnd, #EM_GETLINECOUNT, 0, 0) kannst Du die Anzahl Zeilen ermitteln. Wenn über
Max, dann eben die letzte Zeile wieder löschen. Das ganze elegant umsetzen wirst Wohl selber machen
müssen.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
marcelx
Beiträge: 429
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: EditorGadget mit feste Anzal von Zeilen

Beitrag von marcelx »

Gut b.z.w. weniger gut.
Mit "letzte Zeile wieder löschen" wäre nur ok, wenn am Ende eine Zeile eingefügt wird.
Wenn in den Text ein CR eingefügt wird, müsste diese neue Zeile gelöscht erdenn.
Gruß
MarcelX
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: EditorGadget mit feste Anzal von Zeilen

Beitrag von ts-soft »

Nicht sehr Elegant, aber als erster Ansatz :mrgreen:

Code: Alles auswählen

EnableExplicit

Procedure Editor_GetLine(gadget)
  Protected.CHARRANGE Range
  SendMessage_(GadgetID(gadget), #EM_EXGETSEL, 0, @Range)
  ProcedureReturn SendMessage_(GadgetID(gadget), #EM_EXLINEFROMCHAR, 0, Range\cpMin) + 1 
EndProcedure


OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "")
EditorGadget(0, 0, 0, 640, 480)
SendMessage_(GadgetID(0), #EM_SETTARGETDEVICE, 0, 0)
SetActiveGadget(0)

Define Line, MaxLines = 10

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow : Break
    
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 0
          If SendMessage_(GadgetID(0), #EM_GETLINECOUNT, 0, 0) > MaxLines
            RemoveGadgetItem(0, line)
          Else
            line = Editor_GetLine(0)
          EndIf
      EndSelect
  EndSelect
ForEver
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: EditorGadget mit feste Anzal von Zeilen

Beitrag von RSBasic »

Falls du die Anzahl der Zeilen auf die Höhe des Gadgets begrenzen möchtet, könntest du vielleicht stattdessen ein StringGadget nehmen.
Mit Zeilenumbruch und Multiline:

Code: Alles auswählen

EnableExplicit

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  StringGadget(1,10,10,480,100,"Testzeile", #ES_MULTILINE|#ESB_DISABLE_LEFT|#ESB_DISABLE_RIGHT)
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Da passen insgesamt 7 Zeilen hinein. Wenn du die Anzahl verringern oder erhöhen möchtest, musst du nur die Höhe des Gadgets anpassen. (Falls das für dich eine Lösung sein sollte. Wenn nicht, dann ist die Variante von ts-soft ganz gut.)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
marcelx
Beiträge: 429
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: EditorGadget mit feste Anzal von Zeilen

Beitrag von marcelx »

Danke für die Antworten.
Ich hatte am Anfang auch so probiert:

Code: Alles auswählen

StringGadget(1,10,10,480,100,"Testzeile", #ES_MULTILINE|#ESB_DISABLE_LEFT|#ESB_DISABLE_RIGHT)
Was wunderbar ist. Nun, ich habe als Text Z.b.:

Code: Alles auswählen

text = "Meine Text ..."+Chr(13)+Chr(10)+" bla bla ...
In meine Variable text finde ich die neue Zeile, welche von mir sind(Chr(13)+Chr(10)) und welche von den StringGadget nicht.
Wenn ich ein split mit "Chr(13)+Chr(10)" finde ich die von StringGadget nicht.

Gruß
MarcelX
Win-10, PB 5.31 (Windows - x86)
Antworten