Comment postionné le curseur dans un texte

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Comment postionné le curseur dans un texte

Message 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
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Bonjour à tous :-)

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

Merci quand même à ceux qui essayent !!
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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ù ?
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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

Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

j'ai pa bien compris ce que tu cherchai a faire :?
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message 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
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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:
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Invité

Message 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
Répondre