Seite 1 von 1
TAB-Taste im Editorgadget nicht abschaltbar
Verfasst: 22.06.2007 18:44
von lukanga
Hallo Leute,
die Tab-Taste lässt sich im EditorGadget leider nicht abschalten.
Nicht mit RemoveKeyboardShortcut(0, #PB_Shortcut_Tab), und auch nicht mit folgender Procedure, die ich im Codearchiv gefunden habe (EditorGadget_TabEditing.pb):
Code: Alles auswählen
Procedure NoTabJump(pGadgetID)
;Needed, because i don't want a jump with tab
Style = GetWindowLong_(pGadgetID, #GWL_STYLE)
newStyle = Style & (~#WS_TABSTOP)
SetWindowLong_(pGadgetID, #GWL_STYLE, newStyle)
ProcedureReturn pGadgetID
EndProcedure
Hat jemand noch eine Idee?
Vielen Dank im Voraus!
Verfasst: 22.06.2007 20:41
von PureBasic4.0
wie wäre es, wenn man Tabs zulässt, danach aber mit einer Procedure wieder aus dem Editor Gadget entfernt?
z.B.:
Tab ist gedrückt --> Tab-Sprung im EditorGadget registrieren --> RemoveTab() aufrufen.
RemoveTab() macht nichts weiter, als aus der aktuellen Zeile einen Tabstopp herauszulöschen.
Verfasst: 22.06.2007 22:38
von lukanga
Ich habs mit verschiedenen Ereignissen versucht. Entweder es gibt direkt Synchronisationsprobleme, Cursor ist noch im vorhergehenden Feld oder es funktioniert ne Weile und dann wieder nicht mehr.
Sieht nicht so aus, als wenns auf dem Weg zu einer sicheren Lösung wäre.
Code: Alles auswählen
Enumeration
#String_1 : #String_2
EndEnumeration
Procedure Open_Window()
If OpenWindow(0, 0, 0, 250, 60, "Shortcut-Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
StringGadget(#String_1, 20, 20, 100, 20, "String1")
EditorGadget(#String_2, 130,20, 100, 20)
EndIf
EndIf
EndProcedure
Open_Window()
AddKeyboardShortcut(0, #PB_Shortcut_Tab, 100)
SetActiveGadget(#String_1)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Menu
Select EventMenu()
Case 100 ; Tab
Select GetActiveGadget()
Case #String_1
SetActiveGadget(#String_2)
EndSelect
EndSelect
Case #WM_CHAR
If EventwParam()=9 ; Tab
If GetActiveGadget()=#String_2
SetGadgetText(#String_2,ReplaceString(GetGadgetText(#String_2), Chr(9), ""))
SetActiveGadget(#String_1)
EndIf
EndIf
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Verfasst: 24.06.2007 21:45
von Fluid Byte
Code: Alles auswählen
OpenWindow(0,0,0,320,240,"void",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
EditorGadget(0,10,10,300,220)
Global lpPrevFunc
Procedure RichEditProc(hWnd,uMsg,wParam,lParam)
Select uMsg
Case #WM_CHAR
If wParam = #VK_TAB
ProcedureReturn 0
EndIf
EndSelect
ProcedureReturn CallWindowProc_(lpPrevFunc,hWnd,uMsg,wParam,lParam)
EndProcedure
lpPrevFunc = SetWindowLong_(GadgetID(0),#GWL_WNDPROC,@RichEditProc())
While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend
Verfasst: 25.06.2007 00:07
von lukanga
Recht herzlichen Dank Fluid Byte! Das ist die Lösung!
Kleiner Wermutstropfen: Geht natürlich nur bei Windows, aber damit werde ich jetzt erst mal leben.