Mehrere Zeilen einrücken?
- PureBasic4.0
- Beiträge: 785
- Registriert: 29.10.2006 17:26
- Wohnort: 127.0.0.1
Mehrere Zeilen einrücken?
Hi, Leute
Gibt es eine Art EditorGadget, mit der man mehrere Zeilen einrücken kann (so wie im PB-Editor)? Oder gibt's dafür ne Lib?
Habe mal auf PureArea geschaut und die Scintilla Gadget Library gefunden. Ist das zufällig was für mich? Ich kann es leider nicht ausprobieren (siehe Thread 'Wo bekomme ich die Gadget Extension her?'), weil mir die PureLibrary GadgetExtension fehlt.
Gibt es eine Art EditorGadget, mit der man mehrere Zeilen einrücken kann (so wie im PB-Editor)? Oder gibt's dafür ne Lib?
Habe mal auf PureArea geschaut und die Scintilla Gadget Library gefunden. Ist das zufällig was für mich? Ich kann es leider nicht ausprobieren (siehe Thread 'Wo bekomme ich die Gadget Extension her?'), weil mir die PureLibrary GadgetExtension fehlt.
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Verstehe ich dich recht das du Zeilen reservieren willst, dann hilft dir das:
Code: Alles auswählen
Procedure AddLines(Gadget,Lines)
For k=0 To Lines-1
AddGadgetItem(Gadget,k,"")
Next
EndProcedure
OpenWindow(0,0,0,300,300,"Test",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
CreateGadgetList(WindowID(0))
EditorGadget(0,10,10,280,135)
AddLines(0,2)
StringGadget(1,10,155,280,135,"")
Repeat
Event=WindowEvent()
If Event=#PB_Event_CloseWindow
Quit=1
EndIf
Until Quit=1
- PureBasic4.0
- Beiträge: 785
- Registriert: 29.10.2006 17:26
- Wohnort: 127.0.0.1
Nein, das möchte ich nicht machen.
Wenn man mehrere Zeilen markiert und im normalen EditorGadget auf Tab drückt, werden alle Zeilen durch einen Tabstopp ersetzt. Ich möchte aber, dass alle Zeilen (so wie im PureBasic Editor) um einen Tabstopp nach hinten versetzt werden. Irgendwie wird das doch gehen, weil das im PBEditor auch funktioniert.
Wenn man mehrere Zeilen markiert und im normalen EditorGadget auf Tab drückt, werden alle Zeilen durch einen Tabstopp ersetzt. Ich möchte aber, dass alle Zeilen (so wie im PureBasic Editor) um einen Tabstopp nach hinten versetzt werden. Irgendwie wird das doch gehen, weil das im PBEditor auch funktioniert.
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Ist eigentlich nicht so schwer zu bewerkstellingen:
Ist jetzt nur ein Beispiel und kein kompletter Code aber sollte gut zeigen wie man es machen könnte.
Code: Alles auswählen
OpenWindow(0,0,0,400,300,"untitled",$C80001)
CreateGadgetList(WindowID(0))
EditorGadget(0,5,5,390,290)
SetGadgetFont(0,LoadFont(0,"Arial",9))
For i=0 To 15
AddGadgetItem(0,-1,"Lorem ipsum dolor amet veniam quis exercitation")
Next
Global lpPrevFunc
Procedure RichEditProc(hWnd,uMsg,wParam,lParam)
Select uMsg
Case #WM_CHAR
If wParam = #VK_TAB
SendMessage_(GadgetID(0),#EM_GETSEL,@SelStart,@SelEnd)
If SelEnd-SelStart > 0
LineStart = SendMessage_(GadgetID(0),#EM_LINEFROMCHAR,SelStart,0)
LineEnd = SendMessage_(GadgetID(0),#EM_LINEFROMCHAR,SelEnd,0)
For i=LineStart To LineEnd
TextLine$ = GetGadgetItemText(0,i,0)
SetGadgetItemText(0,i,#TAB$ + TextLine$,0)
Next
ProcedureReturn 0
EndIf
EndIf
EndSelect
ProcedureReturn CallWindowProc_(lpPrevFunc,hWnd,uMsg,wParam,lParam)
EndProcedure
lpPrevFunc = SetWindowLong_(GadgetID(0),#GWL_WNDPROC,@RichEditProc())
While WaitWindowEvent() ! 16 : Wend
Zuletzt geändert von Fluid Byte am 02.05.2007 18:27, insgesamt 2-mal geändert.
Windows 10 Pro, 64-Bit / Outtakes | Derek
- PureBasic4.0
- Beiträge: 785
- Registriert: 29.10.2006 17:26
- Wohnort: 127.0.0.1
@Fluid Byte:
Anderes Problem: Gibt es eine Möglichkeit, die Tab-Taste zu "killen", so dass sie beim Editor nicht ankommt?
Nicht generell, sondern ich will, dass nur im EditorGadget, und nur wenn irgendwas markiert ist, nix passiert, sonst aber die Tab-Taste normal funktioniert.
Edit: es geht, wenn man den Editor auf read-only setzt (und dann wieder zurück), aber das ist mir unter verschiedenen Bedingungen zu unsicher.
Anderes Problem: Gibt es eine Möglichkeit, die Tab-Taste zu "killen", so dass sie beim Editor nicht ankommt?
Nicht generell, sondern ich will, dass nur im EditorGadget, und nur wenn irgendwas markiert ist, nix passiert, sonst aber die Tab-Taste normal funktioniert.
Edit: es geht, wenn man den Editor auf read-only setzt (und dann wieder zurück), aber das ist mir unter verschiedenen Bedingungen zu unsicher.
horst
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
horst hat geschrieben:Gibt es eine Möglichkeit, die Tab-Taste zu "killen", so dass sie beim Editor nicht ankommt?
Nicht generell, sondern ich will, dass nur im EditorGadget, und nur wenn irgendwas markiert ist, nix passiert, sonst aber die Tab-Taste normal funktioniert.
Code: Alles auswählen
OpenWindow(0,0,0,400,300,"untitled",$C80001)
CreateGadgetList(WindowID(0))
EditorGadget(0,5,5,390,290)
SetGadgetFont(0,LoadFont(0,"Arial",9))
For i=0 To 15
AddGadgetItem(0,-1,"Lorem ipsum dolor amet veniam quis exercitation")
Next
Global lpPrevFunc
Procedure RichEditProc(hWnd,uMsg,wParam,lParam)
Select uMsg
Case #WM_CHAR
If wParam = #VK_TAB
SendMessage_(GadgetID(0),#EM_GETSEL,@SelStart,@SelEnd)
If SelEnd-SelStart > 0
ProcedureReturn #False
EndIf
EndIf
EndSelect
ProcedureReturn CallWindowProc_(lpPrevFunc,hWnd,uMsg,wParam,lParam)
EndProcedure
lpPrevFunc = SetWindowLong_(GadgetID(0),#GWL_WNDPROC,@RichEditProc())
While WaitWindowEvent() ! 16 : Wend
Korrigiert.PBprogger hat geschrieben:Es hat noch einen kleinen Fehler, der letzte Eintrag bekommt auch einen Abstand nach hinten.
Aber sonst sehr gut!
Zuletzt geändert von Fluid Byte am 02.05.2007 18:58, insgesamt 3-mal geändert.
Windows 10 Pro, 64-Bit / Outtakes | Derek
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Simpel. Du fängst die Nachricht #WM_CHAR mit dem Callback ab. Diese wird gesendet wenn du TAB oder eine andere Taste im Editor drückst. Steigst du nun aus der Prozedur mit "ProcedureReturn 0" aus findet keinerlei Eingabe statt. Benutzt du aber CallWindowProc_() wird die Nachricht an das EditorGadget weitergeleitet und standardmäßig bearbeitet.horst hat geschrieben:1000 Dank! Es funktioniert.
Wahrscheinlich brauche ich noch eine Stunde um rauszukriegen was da genau passiert...
Windows 10 Pro, 64-Bit / Outtakes | Derek