Page 1 sur 1

Comment postionné le curseur dans un texte

Publié : sam. 07/févr./2004 10:40
par brossden
Bonjour à tous #spin

Est il possible de prépositioner le curseur à un endroit précis par exemple dans un StringGadget qui possède déjà un texte. :?

Merci à vous

Salutations

Denis

Publié : mar. 10/févr./2004 9:35
par brossden
Bonjour à tous :-)

Personne n'a trouver de solution à mon problème ?...

Merci quand même à ceux qui essayent !!

Publié : mar. 10/févr./2004 11:33
par comtois
tu as regardé dans le codeArchiv ? il me semble qu'il y avait des codes sur ce sujet ,je sais que j'ai déjà vu ça quelque part , mais où ?

Publié : mar. 10/févr./2004 13:11
par Anonyme2
J'ai cherché un peu (mais pas trop) et je peux positionner le curseur mais pas à la bonne place.

J'utilise l'API GetTextExtentPoint32 qui devrait me retourner le nombre de pixel mais c'est pas bon, je crois que les espaces ne sont pas inclus.
SI quelqu'un trouve, merci de nous en faire profiter.

L'API SetCaretPos positionne le curseur texte à la position voulue.

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 400, 260, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, "Position curseur") And CreateGadgetList(WindowID())
CreateGadgetList(WindowID())

Font.l = LoadFont(30, "Arial", 15, #PB_Font_HighQuality | #PB_Font_Bold)


StringGadget(1, 10, 10, 300, 40, "essai1 pour position du curseur dans la chaine") 
SetGadgetFont(1, Font)
ButtonGadget(1000, 10, 180, 350, 50, "Appuyer pour positionner le curseur après la 7 eme lettre")

   Repeat
      Select WaitWindowEvent()
         Case #PB_EventGadget
            Select EventGadgetID()
               Case 1000

            ActivateGadget(1)
            UseFont(30)
            SetCaretPos_(150,1)

            EndSelect
            
         Case #PB_EventCloseWindow
            Quit + 1
            
      EndSelect
      
   Until Quit

EndIf
End


Publié : mar. 10/févr./2004 14:47
par cederavic
j'ai pa bien compris ce que tu cherchai a faire :?

Publié : mar. 10/févr./2004 16:28
par brossden
8) Bonjour. 8)

Merci à ceux qui ont fait de leur mieux, mais j'ai trouvé ce que je cherchais. :P . Je vais écrire quelques lignes de code qui vous donneront la solution, ainsi que quelques autres trucs pour permettre, entre autre de réaliser de la saisie assistée. :idea:
Je ne m'étendrai pas plus pour le moment.

A+ donc.

Denis

Publié : mar. 10/févr./2004 18:00
par Le Soldat Inconnu
Ah, maintenant que tu as laché le morceau, ...
On va t'embêter jusqu'au bout pour que tu nous files ce petit bout de code qui m'intéresse et qui doit en intéresser d'autres :wink:

Publié : mer. 11/févr./2004 21:43
par Invité
Bonjour à tous

Voila le code promis, mais désolé pas implémenté "Question de temps"
Le plus important est la procedure Cursor(Gadget, Valeur de déplacement, Mode)

Code : Tout sélectionner


Enumeration
  #Fentre
EndEnumeration

Enumeration
  #Chaine
  #N
  #BPosition
  #BDeplace
  #BSDroite
  #BSGauche
  #BCentrage
  #BDernier
EndEnumeration

#TOOLTIP_NO_ICON      = 0
#TOOLTIP_INFO_ICON    = 1
#TOOLTIP_WARNING_ICON = 2
#TOOLTIP_ERROR_ICON   = 3

Procedure BalloonTip(WindowID, Gadget, Text$ , Title$, Icon)
  
  ToolTip=CreateWindowEx_(0,"ToolTips_Class32","",#WS_POPUP | #TTS_NOPREFIX | #TTS_BALLOON,0,0,0,0,WindowID(WindowID),0,GetModuleHandle_(0),0)
  SendMessage_(ToolTip,#TTM_SETTIPTEXTCOLOR,GetSysColor_(#COLOR_INFOTEXT),0)
  SendMessage_(ToolTip,#TTM_SETTIPBKCOLOR,GetSysColor_(#COLOR_INFOBK),0)
  SendMessage_(ToolTip,#TTM_SETMAXTIPWIDTH,0,180)
  Balloon.TOOLINFO\cbSize=SizeOf(TOOLINFO)
  Balloon\uFlags=#TTF_IDISHWND | #TTF_SUBCLASS
  Balloon\hWnd=GadgetID(Gadget)
  Balloon\uId=GadgetID(Gadget)
  Balloon\lpszText=@Text$
  SendMessage_(ToolTip, #TTM_ADDTOOL, 0, Balloon)
  If Title$ > ""
    SendMessage_(ToolTip, #TTM_SETTITLE, Icon, @Title$)
  EndIf
  
EndProcedure

Procedure Open_Fenetre()
  If OpenWindow(#Fentre, 508, 124, 501, 200,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "New window ( 0 )")
    If CreateGadgetList(WindowID())
      StringGadget(#Chaine, 10, 55, 485, 20, "Les boutons ci dessous agissent sur cet exemple de chaine saisie dans un StringGadget. ")
      StringGadget(#N, 235, 95, 40, 20, "10")
      ButtonGadget(#BPosition, 15, 155, 75, 20, "Potision")
      BalloonTip(WindowID(), #BPosition, "Positionnement du curseur à N caractères ", "", #TOOLTIP_NO_ICON)
      ButtonGadget(#BDeplace, 95, 155, 75, 20, "Dépacelement")
      BalloonTip(WindowID(), #BDeplace, "Dépalcement de N caractères", "", #TOOLTIP_NO_ICON)
      ButtonGadget(#BSDroite, 175, 155, 75, 20, "Retour à Droite")
      BalloonTip(WindowID(), #BSDroite, "Retour à droite de N caractères", "", #TOOLTIP_NO_ICON)
      ButtonGadget(#BSGauche, 255, 155, 75, 20, "S à Gauche")
      BalloonTip(WindowID(), #BSGauche, "Selection à gauche du N'ième caractère", "", #TOOLTIP_NO_ICON)
      ButtonGadget(#BCentrage, 335, 155, 75, 20, "Centrage")
      BalloonTip(WindowID(), #BCentrage, "Centrage dans le texte", "", #TOOLTIP_NO_ICON)
      ButtonGadget(#BDernier, 415, 155, 75, 20, "Dernier")
      BalloonTip(WindowID(), #BDernier, "Après le dernier Caractère", "", #TOOLTIP_NO_ICON)
      
    EndIf
  EndIf
EndProcedure


Procedure Cursor(Gadget.l,N.l,Sel.s)

  ActivateGadget(gadget)
 
  If Sel="S"
    keybd_event_($23,0,0,0)
    keybd_event_($23,0,2,0)
    keybd_event_($10,0,0,0)
    Key.b=$25
    n=Len(GetGadgetText(Gadget))-n

  ElseIf Sel="D"
    keybd_event_($24,0,0,0)
    keybd_event_($24,0,2,0)
    Key.b=$27

  ElseIf Sel="M"
    Key.b=$27

  ElseIf N < 0
    Key.b=$25
    N= -N

  EndIf

  For f=1 To N
    keybd_event_(Key,0,0,0)
    keybd_event_(Key,0,2,0)
  Next
  If Sel="S"
    keybd_event_($10,0,2,0)
  EndIf


EndProcedure


Open_Fenetre()

Repeat
  
  Event = WaitWindowEvent()
  
  If Event = #PB_EventGadget

    GadgetID = EventGadgetID()
    
    If GadgetID = #Chaine
      
    ElseIf GadgetID = #BPosition
      Cursor(#Chaine,Val(GetGadgetText(#N)),"D")
      
    ElseIf GadgetID = #BDeplace
      Cursor(#Chaine,Val(GetGadgetText(#N)),"M")
      
    ElseIf GadgetID = #BSDroite
      Cursor(#Chaine,-Val(GetGadgetText(#N)),"")
      
    ElseIf GadgetID = #BSGauche
      Cursor(#Chaine,Val(GetGadgetText(#N)),"S")
      
    ElseIf GadgetID = #BCentrage
      Cursor(#Chaine,Len(GetGadgetText(#Chaine))/2,"D")
      
    ElseIf GadgetID = #BDernier
      Cursor(#Chaine,100,"D")
      
    EndIf
    
  EndIf
  
Until Event = #PB_EventCloseWindow

End
Si certain ne voient pas comment faire de la saisie assistée à partir de là je vous proposerai un peu plus de code ! Mais c'est déjà assez long !! :oops:

Salut

Denis