Mettre le focus du clavier ou l'on veut dans un gadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
stombretrooper
Messages : 117
Inscription : dim. 21/déc./2008 18:39

Mettre le focus du clavier ou l'on veut dans un gadget

Message par stombretrooper »

Voilà, pour un de mes programmes je change le gadget actif pour un autre, mais j'aimerais que le focus du clavier se retrouve après le dernier caractère contenus dans le gadget, alors que la fonction SetActiveGadget place le focus de la souris avant le premier caractère contenus dans le gadget. Serait donc il possible de changer la position du focus clavier dans un gadget ?
http://www.purebasicstreet.com/ - Site dédié à purebasic.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Mettre le focus du clavier ou l'on veut dans un gadget

Message par Ar-S »

Voilà une procédure qu'avait proposé LSI pour insérer du texte après le curseur.
Tu devrais pouvoir l'adapter à tes besoins.

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 4
;
; Explication du programme :
; Modifier un texte dans un StringGadget ou un EditorGadget en partant de la position du curseur

Procedure EditeText(Gadget, Type, Text_Start.s, Text_End.s = "")
	; type = 0 : Insertion de texte sur le curseur
	; type = 1 : insertion de texte autour de la sélection
	Protected Debut_Position, Fin_position, Texte.s, Index.l
	Select GadgetType(Gadget)
        Case #PB_GadgetType_String
			SendMessage_(GadgetID(Gadget), #EM_GETSEL, @Debut_Position, @Fin_position)
			Texte = GetGadgetText(Gadget)
			If Type = 0
				Texte = Left(Texte, Debut_Position) + Text_Start + Text_End + Right(Texte, Len(Texte) - Fin_position)
				Debut_Position + Len(Text_Start + Text_End)
				Fin_position = Debut_Position
            Else
				Texte = Left(Texte, Debut_Position) + Text_Start + Mid(Texte, Debut_Position + 1, Fin_position - Debut_Position) + Text_End + Right(Texte, Len(Texte) - Fin_position)
				Debut_Position + Len(Text_Start)
				Fin_position + Len(Text_Start)
            EndIf
			SetGadgetText(Gadget, Texte)
			SendMessage_(GadgetID(Gadget), #EM_SETSEL, Debut_Position, Fin_position)
			SetActiveGadget(Gadget)
			
        Case #PB_GadgetType_Editor
			SendMessage_(GadgetID(Gadget), #EM_GETSEL, @Debut_Position, @Fin_position)
			For Index = 0 To CountGadgetItems(Gadget) - 1
				If Texte <> ""
					Texte + Chr(10)
                EndIf
				Texte + GetGadgetItemText(Gadget, Index)
            Next
			If Type = 0
				Texte = Left(Texte, Debut_Position) + Text_Start + Text_End + Right(Texte, Len(Texte) - Fin_position)
				Debut_Position + Len(Text_Start + Text_End)
				Fin_position = Debut_Position
            Else
				Texte = Left(Texte, Debut_Position) + Text_Start + Mid(Texte, Debut_Position + 1, Fin_position - Debut_Position) + Text_End + Right(Texte, Len(Texte) - Fin_position)
				Debut_Position + Len(Text_Start)
				Fin_position + Len(Text_Start)
            EndIf
			SetGadgetText(Gadget, Texte)
			SendMessage_(GadgetID(Gadget), #EM_SETSEL, Debut_Position, Fin_position)
			SetActiveGadget(Gadget)
			
    EndSelect
EndProcedure


; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, "Texte", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0 Or CreateGadgetList(WindowID(0)) = 0
	End
EndIf

StringGadget(0, 0, 0, 300, 25, "")

EditorGadget(1, 0, 30, 300, 100)

ButtonGadget(2, 0, 150, 300, 25, "Insérer le texte 'Blabla' au l'endroit du curseur")
ButtonGadget(3, 0, 175, 300, 25, "Entourer le texte sélectionné par '<b>' et '</b>'")

Repeat
	Event = WaitWindowEvent()
    
	Select Event
        Case #PB_Event_Menu
			Select EventMenu() ; Menus
					
            EndSelect
			
        Case #PB_Event_Gadget
			Select EventGadget() ; Gadgets
                Case 0 ; String
					Gadget_LostFocus = 0
					Debug "String"
                Case 1 ; Editor
                    Gadget_LostFocus = 1
					Debug "Editor"
                Case 2
					Debug "Insertion"
					EditeText(Gadget_LostFocus, 0, "Blabla")
                Case 3
					EditeText(Gadget_LostFocus, 1, "<b>", "</b>")
            EndSelect
    EndSelect
    
Until Event = #PB_Event_CloseWindow

End
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
stombretrooper
Messages : 117
Inscription : dim. 21/déc./2008 18:39

Re: Mettre le focus du clavier ou l'on veut dans un gadget

Message par stombretrooper »

Merci, sa marche ! :D
http://www.purebasicstreet.com/ - Site dédié à purebasic.
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Mettre le focus du clavier ou l'on veut dans un gadget

Message par MLD »

salut a tous
Pour faire simple

Code : Tout sélectionner

Procedure GestionCaret(Gadget) ; Gestion du caret dans stringGadget
      SendMessage_(GadgetID(Gadget), #EM_GETSEL, @Debut_Position, @Fin_position)    
      y = Debut_Position
      Texte.s = GetGadgetText(Gadget)
      x = Len(Texte)
      Texte2.s = Left(Texte,y ) + Right(Texte,x-y)
       SetGadgetText(Gadget,Texte2)
       SendMessage_(GadgetID(Gadget), #EM_SETSEL, x, x)    
EndProcedure
Répondre