Seite 1 von 2

StringGadget tab-Eingabe

Verfasst: 18.12.2015 14:47
von marcelx
Hallo,
wie kann ich ein Tabulator in ein StringGadget eingeben (springt sonst zum nächste StringGadget)?
(Windows Umgebung)

Danke und Gruß
MarcelX

Re: StringGadget tab-Eingabe

Verfasst: 18.12.2015 15:24
von ts-soft

Code: Alles auswählen

If OpenWindow(0, 0, 0, 322, 205, "StringGadget Flags", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  StringGadget(0, 8,  10, 306, 20, "Normal StringGadget...")
  StringGadget(1, 8,  35, 306, 20, "1234567", #PB_String_Numeric)
  StringGadget(2, 8,  60, 306, 20, "Readonly StringGadget", #PB_String_ReadOnly)
  StringGadget(3, 8,  85, 306, 20, "lowercase...", #PB_String_LowerCase)
  StringGadget(4, 8, 110, 306, 20, "uppercase...", #PB_String_UpperCase)
  StringGadget(5, 8, 140, 306, 20, "Borderless StringGadget", #PB_String_BorderLess)
  StringGadget(6, 8, 170, 306, 20, "Password", #PB_String_Password)
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow : Break
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 0
            Select EventType()
              Case #PB_EventType_Focus
                AddKeyboardShortcut(0, #PB_Shortcut_Tab, 1)
              Case #PB_EventType_LostFocus
                RemoveKeyboardShortcut(0, #PB_Shortcut_Tab)
            EndSelect
        EndSelect
      Case #PB_Event_Menu
        Select EventMenu()
          Case 1
            SetGadgetText(0, GetGadgetText(0) + #TAB$)
            SetActiveGadget(0)
        EndSelect
    EndSelect
  ForEver
EndIf
Hab es aber nur unter Linux getested, Kleinigkeiten sind evtl. noch nachzubearbeiten.

Re: StringGadget tab-Eingabe

Verfasst: 18.12.2015 15:44
von marcelx
Da verstehe ich nicht:

Code: Alles auswählen

StringGadget(0, 8,  10, 306, 20, "Normal StringGadget...")
ich will (z.B.) zwischen "Normal" und "StringGadget..." ein Tabulator eingeben.
Mit diese code geht es nicht

Re: StringGadget tab-Eingabe

Verfasst: 18.12.2015 15:57
von ts-soft
Das ist nur das Beispiel in der Hilfe, ich schreib doch nicht selbst ein Beispiel :mrgreen:

Das oberste StringGadget ermöglicht ein Tab! Die anderen nicht.

Aber das scheint so unter Windows nicht zu funktionieren, mal sehen was man da machen kann.

Re: StringGadget tab-Eingabe

Verfasst: 18.12.2015 16:05
von xXRobo_CubeXx
:lol:

Re: StringGadget tab-Eingabe

Verfasst: 18.12.2015 16:21
von marcelx
Das ist nur das Beispiel in der Hilfe, ich schreib doch nicht selbst ein Beispiel :mrgreen:
Das ist mir auch klar.
Wenn ich ein Tab eingeben spring der Cursor zum nächste Eingabe (was nochmal ist).
Meine Frage ist wie bekomme ich ein Tab in eine Eingabefeld?

Re: StringGadget tab-Eingabe

Verfasst: 18.12.2015 16:39
von ts-soft
xXRobo_CubeXx hat geschrieben::lol:
Wenn Du nichts weiter beizutragen hast, troll woanders rum, aber bitte nicht in diesem Forum!

Re: StringGadget tab-Eingabe

Verfasst: 18.12.2015 17:02
von xXRobo_CubeXx
Wen du seine Frage nicht verstanden hast hast du auch nichts beigetragen! ;)
Konntest du ihn mit deinen sinnlosen Beispiel helfen? Wie man sieht N E I N :mrgreen:
Wen du zu faul bist Windows zu starten um sein Problem in Windows nachzustellen
dann lass es doch einfach statt sinnlos zu raten. Sehr suboptimal ;)

Re: StringGadget tab-Eingabe

Verfasst: 18.12.2015 17:44
von ts-soft
Da wird er sich aber über Deinen hilfreichen Beitrag freuen, den mit dem Smiley!

PS: Das ein Crossplattformsource mal nicht funktioniert ist nunmal nicht voraussehbar. Kannst Du als reiner
Windows-User natürlich nicht Wissen, da fehlt die Erfahrung ...

Re: StringGadget tab-Eingabe

Verfasst: 19.12.2015 11:16
von Omi
Um den genannten Trend zur 'Faulheit' fortzuführen hab ich mich bei Shardik (http://www.purebasic.fr/english/viewtop ... 19&t=38488) und ts-soft's durchaus brauchbarem Code bedient und zweiteren etwas nachgearbeitet.
Zumindest unter PB5.40 auf Windows XP und Linux ging schon mal was. Bzgl. Feinheiten und Stabilität sowie für den Mac bräuchte es noch etwas Nacharbeit.
Vielleicht kann man ja damit was anfangen?

Code: Alles auswählen

;from Shardik
CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
  ImportC ""
    GetControlData(ControlRef.L, ControlPartCode.L, TagName.L, BufferSize.L, *Buffer, *ActualSize)
    SetControlData(ControlRef.L, ControlPartCode.L, TagName.L, BufferSize.L, *Buffer)
  EndImport

  #kControlEditTextPart = 5
  #kControlEditTextSelectionTag = 'sele'

  Structure ControlEditTextSelectionRec
    SelStart.W
    SelEnd.W
  EndStructure
CompilerEndIf

Procedure SetCursorPos(GadgetNo.l, CursorPos)
  Protected GadgetID = GadgetID(GadgetNo)
  CompilerSelect #PB_Compiler_OS
    CompilerCase #PB_OS_Windows
      SendMessage_(GadgetID, #EM_SETSEL, CursorPos, CursorPos)
    CompilerCase #PB_OS_Linux
      gtk_editable_set_position_(GadgetID, CursorPos)
    CompilerCase #PB_OS_MacOS
      TextSelection.ControlEditTextSelectionRec
      TextSelection\selStart = CursorPos
      TextSelection\selEnd = CursorPos
      SetControlData(GadgetID, #kControlEditTextPart, #kControlEditTextSelectionTag, SizeOf(ControlEditTextSelectionRec), @TextSelection)
      SetActiveGadget(GadgetNo)
  CompilerEndSelect
EndProcedure

Procedure.l GetCursorPos(GadgetNo.l)
  Protected GadgetID = GadgetID(GadgetNo)
  CompilerSelect #PB_Compiler_OS
    CompilerCase #PB_OS_Windows
      ProcedureReturn SendMessage_(GadgetID, #EM_GETSEL, 0, 0)/65536
    CompilerCase #PB_OS_Linux
      ProcedureReturn gtk_editable_get_position_(GadgetID)
    CompilerCase #PB_OS_MacOS
      GetControlData(GadgetID, #kControlEditTextPart, #kControlEditTextSelectionTag, SizeOf(ControlEditTextSelectionRec), @TextSelection.ControlEditTextSelectionRec, 0)
      ProcedureReturn TextSelection\SelStart
  CompilerEndSelect
EndProcedure

;from ts-soft
Global.i CurPos
Global.s sTemp, sTempTab

If OpenWindow(0, 0, 0, 322, 205, "StringGadget Flags", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
	StringGadget(0, 8,  10, 306, 20, "Normal StringGadget...")
	
	Repeat
		Select WaitWindowEvent()
			Case #PB_Event_CloseWindow : Break
			Case #PB_Event_Gadget
				Select EventGadget()
					Case 0
						Select EventType()
							Case #PB_EventType_Focus
								AddKeyboardShortcut(0, #PB_Shortcut_Tab, 1)
							Case #PB_EventType_LostFocus
								RemoveKeyboardShortcut(0, #PB_Shortcut_Tab)
						EndSelect
				EndSelect
			Case #PB_Event_Menu
				Select EventMenu()
					Case 1
						CurPos= GetCursorPos(0)
						Debug CurPos
						sTemp= GetGadgetText(0)
						sTempTab= Left(sTemp, CurPos) + #TAB$ + Mid(sTemp, CurPos+1)
						SetGadgetText(0, sTempTab)
						SetCursorPos(0, CurPos)
				EndSelect
		EndSelect
	ForEver
EndIf
Und da mir heut der Schalk im Nacken sitzt:
Offtopic @xXRobo_CubeXx:
Ich sehe hier noch weitere Probleme, gerade bezüglich Deiner Bemerkungen in diesem thread: http://www.purebasic.fr/german/viewtopi ... 8&start=10, ff.
- Leute, mit denen man noch nicht gesoffen hat sollte man aus Höflichkeit wenigstens mit 'Du' ansprechen.
- In einem Satz wie "Wen du seine Frage nicht verstanden hast hast du ..." folgt ein Komma nach dem ersten 'hast'.
- "Konntest du ihn mit deinen sinnlosen Beispiel ...": Auch hier die Höflichkeit-Großschreibung: 'Deinen', und
- um zukünftig nicht ständig mit 'Verona' angesprochen zu werden würde der gemeine Hobbygermanist hier wohl zu dem :wink: Dativ tendieren, also korrekt 'Deinem'.
- "in Windows nachzustellen dann lass es doch ...". Erneut wäre hier ein Komma dem 'nachzustellen' nachzustellen.

Sehr 'suboptimales' Deutsch, aber 'Nobody is perfect' :lol: .
EndOfftopic

und sorry an MarcelX fürs Offtopic

Gruß, Charly