StringGadget tab-Eingabe

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
marcelx
Beiträge: 429
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

StringGadget tab-Eingabe

Beitrag von marcelx »

Hallo,
wie kann ich ein Tabulator in ein StringGadget eingeben (springt sonst zum nächste StringGadget)?
(Windows Umgebung)

Danke und Gruß
MarcelX
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: StringGadget tab-Eingabe

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
marcelx
Beiträge: 429
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: StringGadget tab-Eingabe

Beitrag 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
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: StringGadget tab-Eingabe

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
xXRobo_CubeXx
Beiträge: 120
Registriert: 12.06.2015 16:08
Computerausstattung: Version 5.41 LTS
Wohnort: Wohnort
Kontaktdaten:

Re: StringGadget tab-Eingabe

Beitrag von xXRobo_CubeXx »

:lol:
Version 5.41 LTS :)
Benutzeravatar
marcelx
Beiträge: 429
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: StringGadget tab-Eingabe

Beitrag 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?
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: StringGadget tab-Eingabe

Beitrag von ts-soft »

xXRobo_CubeXx hat geschrieben::lol:
Wenn Du nichts weiter beizutragen hast, troll woanders rum, aber bitte nicht in diesem Forum!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
xXRobo_CubeXx
Beiträge: 120
Registriert: 12.06.2015 16:08
Computerausstattung: Version 5.41 LTS
Wohnort: Wohnort
Kontaktdaten:

Re: StringGadget tab-Eingabe

Beitrag 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 ;)
Version 5.41 LTS :)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: StringGadget tab-Eingabe

Beitrag 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 ...
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Omi
Beiträge: 143
Registriert: 25.03.2013 09:59

Re: StringGadget tab-Eingabe

Beitrag 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
PureBasic Linux-API-Library: http://www.chabba.de
Antworten