Curseur [Réglé]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Curseur [Réglé]

Message par MetalOS »

Quelqu'un sait si en PB on peut crée une procedure pour avoir la position du curseur d'ecriture dans un EditorGadget (Pas le surseur de la souris). Je vous explique, dans mon apli, g 1 BoutonGadget , et 1 EditorGadget.
et j'aimerais que quand je clique sur le boutonGadget j'ai un texte qui s'affiche dans l'editorGadget à l'endroit ou ce trouve le curseur dans cet EditorGadget.

Comment faire ? Merci (Désolé si c'est une question à 2 balle).
Dernière modification par MetalOS le jeu. 22/févr./2007 13:46, modifié 1 fois.
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

C'est pas exactement ce que tu veux mais tu deverais être en mesure de l'adapter à tes besoins. (Extrait de CodeArchives : EditorGadget_GetCursorPosition.pb)

Code : Tout sélectionner

; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=1953&highlight=
; Author: Danilo
; Date: 08. August 2003

; 
; by Danilo, 08.08.2003 - german forum 
; 
Procedure EditorGadgetCursorX(Gadget) 
  ; returns X-Pos of Cursor 
  REG = GadgetID(Gadget) 
  SendMessage_(REG,#EM_EXGETSEL,0,Range.CHARRANGE) 
  ProcedureReturn (Range\cpMax-(SendMessage_(REG,#EM_LINEINDEX,SendMessage_(REG,#EM_EXLINEFROMCHAR,0,Range\cpMin),0))+1) 
EndProcedure 

Procedure EditorGadgetCursorY(Gadget) 
  ; returns Y-Pos of Cursor 
  REG = GadgetID(Gadget) 
  SendMessage_(REG,#EM_EXGETSEL,0,Range.CHARRANGE) 
  ProcedureReturn SendMessage_(REG,#EM_EXLINEFROMCHAR,0,Range\cpMin)+1 
EndProcedure 

Procedure EditorGadgetCursorPos(Gadget) 
  ; returns relative Position of Cursor 
  SendMessage_(GadgetID(Gadget),#EM_EXGETSEL,0,Range.CHARRANGE) 
  ProcedureReturn Range\cpMax 
EndProcedure 

Procedure EditorGadgetLocate(Gadget,x,y) 
  ; Set cursor position 
  REG = GadgetID(Gadget) 
  CharIdx = SendMessage_(REG,#EM_LINEINDEX,y-1,0) 
  LLength = SendMessage_(REG,#EM_LINELENGTH,CharIdx,0) 
  If LLength >= x-1 
    CharIdx + x-1 
  EndIf 
  Range.CHARRANGE 
  Range\cpMin = CharIdx 
  Range\cpMax = CharIdx 
  SendMessage_(REG,#EM_EXSETSEL,0,Range) 
EndProcedure 



OpenWindow(1,200,200,300,200,"EditorGadget",#PB_Window_SystemMenu) 
  CreateGadgetList(WindowID(1)) 
  EditorGadget(1,5,5,290,190) 
  
  AddGadgetItem(1,-1,"Hallo!") 
  AddGadgetItem(1,-1,"") 
  AddGadgetItem(1,-1,"Hier ein paar Proceduren") 
  AddGadgetItem(1,-1,"zur Steuerung des Cursors") 
  AddGadgetItem(1,-1,"im EditorGadget.") 

  EditorGadgetLocate(1,7,2) 


Repeat 
  Select WaitWindowEvent() 
    Case #PB_Event_CloseWindow: End 
  EndSelect 
  SetWindowText_(WindowID(1),"X: "+Str(EditorGadgetCursorX(1))+" Y: "+Str(EditorGadgetCursorY(1))+" -- Position: "+Str(EditorGadgetCursorPos(1))) 
ForEver 
A+
Guimauve
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Message par MetalOS »

Merci Guimauve c'est pas exactement ce que je recherche mais ca va me servir quand même, et comme tu dit ya peut être moyen de l'adapter.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Pour mettre du texte à l'endroit du curseur, il suffit simplement de coller du texte.

SetClipboardText("Texte à coller")
Sendmessage_(Gadgetid(#Editeur),#WM_PASTE,0,0)
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Message par MetalOS »

Un grand merci nico c'est exactement ce que je cherchais.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

faut juste préserver le contenu du presse papier avant...
mais de mémoire y'a plus sûr qu'un PASTE (EM_REPLACESEL)

Dri
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Message par MetalOS »

Le code marche tres bien nico encore merci, mais un autre probleme ce pose pour moi. J'ais chercher dans la doc de PB mais j'ais pas trouvé, j'utilise le code que tu m'a donner et j'aimerais faire afficher les petit guillemet " ".
Mais ca plante et je ne c pas comment les declarer pour les faire afficher.

Voici mon code

Code : Tout sélectionner

SetClipboardText("<div align="left">Taper votre code ici </div>")
SendMessage_(GadgetID(#Editor_1),#WM_PASTE,0,0)
Ceci et la partie que je doit faire afficher dans mon Editor_1

Code : Tout sélectionner

<div align="left">Taper votre code ici </div>
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Code : Tout sélectionner

;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Editor_0
  #Button_0
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 461, 201, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_0))
      EditorGadget(#Editor_0, 10, 50, 440, 140)
      ButtonGadget(#Button_0, 10, 10, 110, 30, "Coller")
      
    EndIf
  EndIf
EndProcedure

Open_Window_0()

Repeat
  Event = WaitWindowEvent()
  Select Event
    Case  #PB_Event_Gadget
      Select EventGadget()
        Case #Button_0
        ; Je remplace les guimmets par une étoile (tu peut le remplacer par un autre caractère)
          Chaine.s="<div align=*left*>Taper votre code ici </div>" 
          ReplaceString(Chaine,"*",Chr(34),2)
          SendMessage_(GadgetID(#Editor_0),#EM_REPLACESEL,1,@Chaine)
            
      EndSelect
   
    Case #WM_CLOSE
      quit=1
   
  EndSelect
Until quit=1 
Répondre