automatischen Einzug deaktivieren
- Mok
- BotHunter
- Beiträge: 1484
- Registriert: 26.12.2005 14:14
- Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit - Wohnort:
automatischen Einzug deaktivieren
Hallo.
Hier ist ein Code für einen automatischen Einzug im EditorGadget. Die Frage: (Wie) kann man das wieder rückgängig machen?
MfG, Mok
Hier ist ein Code für einen automatischen Einzug im EditorGadget. Die Frage: (Wie) kann man das wieder rückgängig machen?
MfG, Mok
Zuletzt geändert von Mok am 10.07.2010 18:23, insgesamt 2-mal geändert.
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Re: automatischen Einzug deaktivieren
Wenn du keinen automatischen Einzug möchtest, dann setze doch ne globale Variable die je nach Wert (true/false) den Zeileneinzug im Callback aktiviert oder nicht.
Oder was meinst du?
Oder was meinst du?
OS: Windows 8.1 Pro
- Mok
- BotHunter
- Beiträge: 1484
- Registriert: 26.12.2005 14:14
- Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit - Wohnort:
Re: automatischen Einzug deaktivieren
Ich dachte, das könnte man evtl. über den Befehl selbst steuern, aber scheinbar bleibt mir kein anderer Weg.
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
- Mok
- BotHunter
- Beiträge: 1484
- Registriert: 26.12.2005 14:14
- Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit - Wohnort:
Re: automatischen Einzug deaktivieren
Wie soll ich das genau machen?
Bei
Kann ich nach dem 2. Mal klicken (AutoEinzug wieder deaktivieren) nichts mehr in die Editorbox schreiben, und beim 4. Mal bekomm ich nen Stack-Overflow. 
Bei
Code: Alles auswählen
Procedure RichEditCallback(hWnd, uMsg, wParam, lParam)
Protected Range.CHARRANGE
Protected PrevLine.l
Protected PrevLineContent.s
Protected Indent.s
Protected *Pointer.Character
If uMsg = #WM_CHAR And wParam = #CR
SendMessage_(hWnd, #EM_EXGETSEL, 0, @Range)
PrevLine = SendMessage_(hWnd, #EM_EXLINEFROMCHAR, 0, Range\cpMin) - 1
PrevLineContent = GetGadgetItemText(#EDITOR, PrevLine)
*Pointer = @PrevLineContent
Indent = ""
If Var = 1
While *Pointer\c And (*Pointer\c = 9 Or *Pointer\c = 32)
Indent + Chr(*Pointer\c)
*Pointer + SizeOf(Character)
Wend
Else
EndIf
SendMessage_(hWnd, #EM_REPLACESEL, 0, @Indent)
ProcedureReturn 0
EndIf
ProcedureReturn CallWindowProc_(GetWindowLongPtr_(hWnd, #GWLP_USERDATA), hWnd, uMsg, wParam, lParam)
EndProcedure

Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
- hjbremer
- Beiträge: 822
- Registriert: 27.02.2006 22:30
- Computerausstattung: von gestern
- Wohnort: Neumünster
Re: automatischen Einzug deaktivieren
RTF Mode aktivieren
#EM_SETPARAFORMAT benutzen
#EM_SETPARAFORMAT benutzen
Purebasic 5.70 x86 5.72 X 64 - Windows 10
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: automatischen Einzug deaktivieren
Normalerweise muss man um einen Callback zu entfernen einfach 0 übergeben statt der Callback-Procedure.
- Mok
- BotHunter
- Beiträge: 1484
- Registriert: 26.12.2005 14:14
- Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit - Wohnort:
Re: automatischen Einzug deaktivieren
MitNicTheQuick hat geschrieben:Normalerweise muss man um einen Callback zu entfernen einfach 0 übergeben statt der Callback-Procedure.
Code: Alles auswählen
If AutoCursor = 1
Protected Range.CHARRANGE
Protected PrevLine.l
Protected PrevLineContent.s
Protected Indent.s
Protected *Pointer.Character
If uMsg = #WM_CHAR And wParam = #CR
SendMessage_(hWnd, #EM_EXGETSEL, 0, @Range)
PrevLine = SendMessage_(hWnd, #EM_EXLINEFROMCHAR, 0, Range\cpMin) - 1
PrevLineContent = GetGadgetItemText(#Editor_0, PrevLine)
*Pointer = @PrevLineContent
Indent = ""
While *Pointer\c And (*Pointer\c = 9 Or *Pointer\c = 32)
Indent + Chr(*Pointer\c)
*Pointer + SizeOf(Character)
Wend
SendMessage_(hWnd, #EM_REPLACESEL, 0, @Indent)
_RET 0
EndIf
_RET CallWindowProc_(GetWindowLongPtr_(hWnd, #GWLP_USERDATA), hWnd, uMsg, wParam, lParam)
Else
_RET 0
EndIf

@hjbremer: Ist ein Editorgadget nicht standardmäßig RTF?
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
- hjbremer
- Beiträge: 822
- Registriert: 27.02.2006 22:30
- Computerausstattung: von gestern
- Wohnort: Neumünster
Re: automatischen Einzug deaktivieren
vielleicht hilft es
näheres bei Microsoft über #PFM_OFFSETINDENT etc
kann man in x verschiedenen Variationen benutzen, viel Worte, wenig versteh
PS: ein EditorGadget ist standardmäßig im RTF Mode
kann man aber ändern, entweder via Befehl oder Streaming aus einer Datei
näheres bei Microsoft über #PFM_OFFSETINDENT etc
kann man in x verschiedenen Variationen benutzen, viel Worte, wenig versteh
Code: Alles auswählen
Procedure.i EditGadgetSetAlignment(pbnr, wert)
Protected id = GadgetID(pbnr)
Protected format.ParaFormat2\cbSize = SizeOf(ParaFormat2)
With format
\dwMask = #PFM_OFFSETINDENT: \dxStartIndent = wert
;\dwMask = #PFM_STARTINDENT: \dxStartIndent = 150
;\dwMask = #PFM_STARTINDENT: \dxStartIndent = 0
SendMessage_(id, #EM_SETPARAFORMAT, 0, format)
EndWith
EndProcedure
Enumeration
#window
#editor1
#button1
#button2
EndEnumeration
#winbr = 450
#winhh = 400
#wrand = 8
#edix = #wrand
#ediy = #wrand
#edibr = #winbr - #wrand - #wrand
#edihh = #winhh - #wrand - #wrand - 150
Define flags = #PB_Window_SystemMenu | #PB_Window_ScreenCentered
OpenWindow(#window, 0, 0, #winbr, #winhh, "EditorGadget", flags)
EditorGadget(#editor1, #edix, #ediy, #edibr, #edihh)
ButtonGadget(#button1, 10, #winhh - 30, 80, 20, "on")
ButtonGadget(#button2, 110, #winhh - 30, 80, 20, "off")
EditGadgetSetAlignment(#editor1, 250)
; -Event Schleife-------------------------------------
Repeat
Define event = WaitWindowEvent()
If event = #PB_Event_Gadget
Define wB = EventGadget()
Select wb
Case #button1: EditGadgetSetAlignment(#editor1, 250)
Case #button2: EditGadgetSetAlignment(#editor1, -250)
EndSelect
EndIf
Until event = #PB_Event_CloseWindow
kann man aber ändern, entweder via Befehl oder Streaming aus einer Datei
Purebasic 5.70 x86 5.72 X 64 - Windows 10
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
- Mok
- BotHunter
- Beiträge: 1484
- Registriert: 26.12.2005 14:14
- Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit - Wohnort:
Re: automatischen Einzug deaktivieren
@hjbremer: Ich hätte mir das so vorgestellt, dass der Andwender besstimmen kann (durch Tabs und Leerzeichen), wie weit eingezogen werden soll.
Wie ist das bei den IDEs? Wird das auch so umständlich gemacht?
Wie ist das bei den IDEs? Wird das auch so umständlich gemacht?
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
- hjbremer
- Beiträge: 822
- Registriert: 27.02.2006 22:30
- Computerausstattung: von gestern
- Wohnort: Neumünster
Re: automatischen Einzug deaktivieren
umständlich ist relativ. entweder man legt den Wert im Programm fest, oder per Inidatei oder man schreibt ein Eingabefenster. Das betrifft auch die angesprochenen Tabs. Deren Weite kann man bestimmen, aber das Spiel ist doch das gleiche.Mok hat geschrieben:@hjbremer: Ich hätte mir das so vorgestellt, dass der Andwender besstimmen kann (durch Tabs und Leerzeichen), wie weit eingezogen werden soll.
Wie ist das bei den IDEs? Wird das auch so umständlich gemacht?
Purebasic 5.70 x86 5.72 X 64 - Windows 10
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer