PS: Die Nutzer meines Programmes sind wenig computererfahren und lassen sich von Meldungen wie 'Auf keinen Fall mehr als 5 Zeilen eingeben' nicht davon abhalten 10 oder 15 Zeilen einzugeben und sich dann zu wundern, dass beim Ausdruck die Formularfelder gesprengt werden.
max. Zeilenzahl im EditorGadget begrenzen.
- Thorsten1867
- Beiträge: 1360
- Registriert: 04.02.2005 15:40
- Computerausstattung: [Windows 10 x64] [PB V5.7x]
- Wohnort: Kaufbeuren
- Kontaktdaten:
max. Zeilenzahl im EditorGadget begrenzen.
Ich suche einen Weg die maximale Zeilenzahl (nicht Zeichenzahl!) im EditorGadget zu begrenzen, so dass man nicht mehr Zeilen als erlaubt eingeben kann. Vielleicht kennt ja jemand einer dieser 'geheimnisvollen' API-Befehlen.
PS: Die Nutzer meines Programmes sind wenig computererfahren und lassen sich von Meldungen wie 'Auf keinen Fall mehr als 5 Zeilen eingeben' nicht davon abhalten 10 oder 15 Zeilen einzugeben und sich dann zu wundern, dass beim Ausdruck die Formularfelder gesprengt werden.
PS: Die Nutzer meines Programmes sind wenig computererfahren und lassen sich von Meldungen wie 'Auf keinen Fall mehr als 5 Zeilen eingeben' nicht davon abhalten 10 oder 15 Zeilen einzugeben und sich dann zu wundern, dass beim Ausdruck die Formularfelder gesprengt werden.
Re: max. Zeilenzahl im EditorGadget begrenzen.
> Ich suche einen Weg die maximale Zeilenzahl (nicht Zeichenzahl!) im
> EditorGadget zu begrenzen
äh... ab und an kann man auch mal die Forumssuche bemühen:
http://forums.purebasic.com/german/viewtopic.php?t=6400
(Fast gleichlautender Betreff)
Grüße ... Kiffi
> EditorGadget zu begrenzen
äh... ab und an kann man auch mal die Forumssuche bemühen:
http://forums.purebasic.com/german/viewtopic.php?t=6400
(Fast gleichlautender Betreff)
Grüße ... Kiffi
a²+b²=mc²
- 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
5 einzeilige StringGadgets reichen nicht?
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- Thorsten1867
- Beiträge: 1360
- Registriert: 04.02.2005 15:40
- Computerausstattung: [Windows 10 x64] [PB V5.7x]
- Wohnort: Kaufbeuren
- Kontaktdaten:
Leider nein! Benötige den automatischen Zeilenumbruch!ts-soft hat geschrieben:5 einzeilige StringGadgets reichen nicht?
Die Lösung scheint leider nicht zu funktionieren, habe es gerade noch mal getestet. Beim Erreichen der max. Zeile ist der Text blockiert und man kann nichts mehr eingeben.kiffi hat geschrieben:äh... ab und an kann man auch mal die Forumssuche bemühen:
http://forums.purebasic.com/german/viewtopic.php?t=6400
Hi Thorsten,
sieh Dir das mal an, so kannst Du die Zeilenanzahl und die Zeichenzahl pro Zeile begrenzen.
sieh Dir das mal an, so kannst Du die Zeilenanzahl und die Zeichenzahl pro Zeile begrenzen.
Code: Alles auswählen
Global OldEditProc.l
Procedure NewEditProc(wnd,msg,wparam,lparam)
Select msg
Case #WM_CHAR
If SendMessage_(wnd,#EM_LINELENGTH,-1,0) > 14
AddGadgetItem(0,-1,"")
EndIf
If SendMessage_(wnd,#EM_GETLINECOUNT,0,0) > 5
ProcedureReturn 0
EndIf
EndSelect
ProcedureReturn CallWindowProc_(OldEditProc,wnd,msg,wparam,lparam)
EndProcedure
If OpenWindow(0,0,0,322,150,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Maximal 5 Zeilen") And CreateGadgetList(WindowID(0))
Editor = EditorGadget(0,8,8,306,133)
OldEditProc = SetWindowLong_(Editor,#GWL_WNDPROC,@NewEditProc())
SetFocus_(Editor)
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf
Gruss Andreas
> Beim Erreichen der max. Zeile ist der Text blockiert und man kann nichts
> mehr eingeben.
meiner Meinung nach ist es sowieso besser, wenn ich als Anwender im
entsprechenden Gadget frei editieren kann und mit einer dezenten
Meldung darauf hingewiesen werde, wenn ich zuviele Zeilen eingegeben
habe.
Somit kann ich z.B. mit Copy & Paste einen grossen Text in das Gadget
einfügen und diesen dann solange bearbeiten, bist es passt.
Grüße ... Kiffi
@Andreas: Deinen Code kann man mit Copy & Paste 'überlisten'
> mehr eingeben.
meiner Meinung nach ist es sowieso besser, wenn ich als Anwender im
entsprechenden Gadget frei editieren kann und mit einer dezenten
Meldung darauf hingewiesen werde, wenn ich zuviele Zeilen eingegeben
habe.
Somit kann ich z.B. mit Copy & Paste einen grossen Text in das Gadget
einfügen und diesen dann solange bearbeiten, bist es passt.
Code: Alles auswählen
#frmMain = 0
#EditorGadget = 1
#Label = 2
OpenWindow(#frmMain,0,0,322,180,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Maximal 5 Zeilen")
CreateGadgetList(WindowID(#frmMain))
EditorGadget(#EditorGadget,8,8,306,133)
TextGadget(#Label,8, 150,306,20, "Maximal 5 Zeilen!", #PB_Text_Border | #PB_Text_Center)
HideGadget(#Label,1)
SetFocus_(GadgetID(#EditorGadget))
Repeat
If SendMessage_(GadgetID(#EditorGadget),#EM_GETLINECOUNT,0,0) > 5
HideGadget(#Label,0)
Else
HideGadget(#Label,1)
EndIf
Until WaitWindowEvent()=#PB_Event_CloseWindow@Andreas: Deinen Code kann man mit Copy & Paste 'überlisten'
a²+b²=mc²
Die Loesung stand ganz unten.Thorsten1867 hat geschrieben:[...]Die Lösung scheint leider nicht zu funktionieren, habe es gerade noch mal getestet. Beim Erreichen der max. Zeile ist der Text blockiert und man kann nichts mehr eingeben.kiffi hat geschrieben:äh... ab und an kann man auch mal die Forumssuche bemühen:
http://forums.purebasic.com/german/viewtopic.php?t=6400
Code: Alles auswählen
Structure gettextlengthex
flags.l
CodePage.l
EndStructure
OpenWindow(0,0,0,500,500,1|#WS_SYSMENU,"")
CreateGadgetList(WindowID())
EditorGadget(0,10,10,300,355)
TextGadget(1,315,10,40,20,"1")
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
If EventGadgetID() = 0
SendMessage_(GadgetID(0), #EM_EXGETSEL, 0, chrg.CHARRANGE)
line = SendMessage_(GadgetID(0), #EM_EXLINEFROMCHAR, 0 , chrg\cpMin)
SetGadgetText(1,Str(line))
If line >= 11
temp.gettextlengthex
temp\CodePage = #CP_ACP
bytes = SendMessage_(GadgetID(0),#EM_GETTEXTLENGTHEX,@temp,0)
SendMessage_(GadgetID(0),#EM_EXLIMITTEXT,0,bytes)
Else
SendMessage_(GadgetID(0),#EM_EXLIMITTEXT,0,-1)
EndIf
EndIf
ElseIf Event = #WM_KEYDOWN
SendMessage_(GadgetID(0), #EM_EXGETSEL, 0, chrg.CHARRANGE)
line = SendMessage_(GadgetID(0), #EM_EXLINEFROMCHAR, 0 , chrg\cpMin)
If line < 11
SendMessage_(GadgetID(0),#EM_EXLIMITTEXT,0,-1)
EndIf
EndIf
Until Event = #WM_CLOSE
- Thorsten1867
- Beiträge: 1360
- Registriert: 04.02.2005 15:40
- Computerausstattung: [Windows 10 x64] [PB V5.7x]
- Wohnort: Kaufbeuren
- Kontaktdaten:
Danke! Man kann den Text jetzt ändern, aber auch Zeilenumbrüche kann man nun einfügen und den Code so überlisten.hallodri hat geschrieben:Die Loesung stand ganz unten.
Ich denke ich werde wohl etwas aus allen Ideen zusammenbasteln.
Wenn ich eine Möglichkeit finde den Text des Editorgadgets zeilenweise samt Steuerzeichen (#LF$ und #CRLF$) auszulesen, habe ich so eine Idee, die vielleicht funktionieren könnte.
Zuletzt geändert von Thorsten1867 am 27.01.2006 19:56, insgesamt 1-mal geändert.
- hardfalcon
- Beiträge: 3447
- Registriert: 29.08.2004 20:46
BTW: Man kann für Editorgadgets per WinAPI auch das "AutoWrap"-Feature, sprich den automatischen Zeilenumbruch am Ende der Zeile, ein- und ausschalten. Leider hab ich den Code nicht mehr, ich weiss nur noch, dass ich mir da mal zusammen mit zigapeda die Nacht um die Ohren geschlagen hatte, um so was zu finden... 
- Thorsten1867
- Beiträge: 1360
- Registriert: 04.02.2005 15:40
- Computerausstattung: [Windows 10 x64] [PB V5.7x]
- Wohnort: Kaufbeuren
- Kontaktdaten:
Code: Alles auswählen
eg = EditorGadget(#EditorGadget,8,8,306,133)
SendMessage_(eg, #EM_SETTARGETDEVICE, 0, 0) ; automatischer Zeilenumbruch