TAB-Taste im Editorgadget nicht abschaltbar

Anfängerfragen zum Programmieren mit PureBasic.
lukanga
Beiträge: 12
Registriert: 19.06.2007 22:23
Wohnort: Griesheim

TAB-Taste im Editorgadget nicht abschaltbar

Beitrag 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!
PB4.02 WinXP
Irgendwann steig' ich auf Linux um!
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag 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.
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
lukanga
Beiträge: 12
Registriert: 19.06.2007 22:23
Wohnort: Griesheim

Beitrag 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
PB4.02 WinXP
Irgendwann steig' ich auf Linux um!
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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
Windows 10 Pro, 64-Bit / Outtakes | Derek
lukanga
Beiträge: 12
Registriert: 19.06.2007 22:23
Wohnort: Griesheim

Beitrag 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.
PB4.02 WinXP
Irgendwann steig' ich auf Linux um!
Antworten