Gelöst: Wie markiert man den vorhandenen Text ?

Anfängerfragen zum Programmieren mit PureBasic.
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

Gelöst: Wie markiert man den vorhandenen Text ?

Beitrag von bin_neu_hier »

Hallo Leute,

wie kann man bei diesem Code von Danilo

Code: Alles auswählen

;
; by Danilo
;
; http://www.purebasic.fr/german/viewtopic.php?f=16&t=26388&start=7
;
; Nummern-Eingabe Beispiele: 123  567,88  -12  -4,5
;
OpenWindow(0, #PB_Ignore, #PB_Ignore, 250, 80, "")
StringGadget(0, 10, 10, 200, 20, "")

CreateRegularExpression(0,"^\-{0,1}\d*$|^\-{0,1}\d+\,\d{0,2}$|^$") ; ^       = Anfang des Strings
                                                                   ; $       = Ende des Strings
                                                                   ; \d      = Dezimalzahl 0-9
                                                                   ; +       = 1 oder mehr Vorkommen
                                                                   ; *       = 0 oder mehr Vorkommen
                                                                   ; |       = alternative Moeglichkeit (Or in PureBasic)
                                                                   ; \,      = Komma
                                                                   ; \-{0,1} = Minus{0 oder 1 mal}
                                                                   ; \d{0,2} = Dezimalzahl 0-9 { 0 bis 2 mal }
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_Gadget
      If EventGadget() = 0 And EventType() = #PB_EventType_Change
        txt$ = GetGadgetText(0)
        If MatchRegularExpression(0,txt$)=0                           ; wenn kein Treffer, dann wieder vorherigen text setzen
          SendMessage_(GadgetID(0),#EM_GETSEL,0,@endpos) : endpos - 1 ; cursor position holen
          SetGadgetText(0,old$)                                       ; alten text wieder setzen
          SendMessage_(GadgetID(0),#EM_SETSEL,endpos,endpos)          ; cursor position wieder setzen
        Else
          old$ = txt$
        EndIf
      EndIf
  EndSelect
ForEver
den vorhandenen Wert markieren, sobald das Gadget den Fokus erhält? Habe das mit

Code: Alles auswählen

SendMessage_(GadgetID(1),#EM_SETSEL,0,-1)
an verschiedenen Stellen versucht, es tut's aber nicht.
Zuletzt geändert von bin_neu_hier am 11.11.2019 18:24, insgesamt 1-mal geändert.
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: Wie markiert man den vorhandenen Text ?

Beitrag von HeX0R »

Code: Alles auswählen

;
; by Danilo
;
; http://www.purebasic.fr/german/viewtopic.php?f=16&t=26388&start=7
;
; Nummern-Eingabe Beispiele: 123  567,88  -12  -4,5
;
OpenWindow(0, #PB_Ignore, #PB_Ignore, 250, 80, "")
StringGadget(0, 10, 10, 200, 20, "")
StringGadget(1, 10, 35, 200, 20, "change focus", #PB_String_ReadOnly)

CreateRegularExpression(0,"^\-{0,1}\d*$|^\-{0,1}\d+\,\d{0,2}$|^$") ; ^       = Anfang des Strings
																																	 ; $       = Ende des Strings
																																	 ; \d      = Dezimalzahl 0-9
																																	 ; +       = 1 oder mehr Vorkommen
																																	 ; *       = 0 oder mehr Vorkommen
																																	 ; |       = alternative Moeglichkeit (Or in PureBasic)
																																	 ; \,      = Komma
																																	 ; \-{0,1} = Minus{0 oder 1 mal}
																																	 ; \d{0,2} = Dezimalzahl 0-9 { 0 bis 2 mal }
Repeat
	Select WaitWindowEvent()
		Case #PB_Event_CloseWindow
			Break
		Case #PB_Event_Gadget
			Select EventGadget()
				Case 0
					Select EventType()
						Case #PB_EventType_Change
							txt$ = GetGadgetText(0)
							If MatchRegularExpression(0,txt$)=0                           ; wenn kein Treffer, dann wieder vorherigen text setzen
								SendMessage_(GadgetID(0),#EM_GETSEL,0,@endpos) : endpos - 1	; cursor position holen
								SetGadgetText(0,old$)																				; alten text wieder setzen
								SendMessage_(GadgetID(0),#EM_SETSEL,endpos,endpos)					; cursor position wieder setzen
							Else
								old$ = txt$
							EndIf
						Case #PB_EventType_Focus
							SendMessage_(GadgetID(0),#EM_SETSEL,0,-1)
					EndSelect
			EndSelect
	EndSelect
ForEver
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

Re: Gelöst: Wie markiert man den vorhandenen Text ?

Beitrag von bin_neu_hier »

Super! Besten Dank!
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
Antworten