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.