Page 1 sur 1

Inserer StringGadget dans EditorGadget...

Publié : lun. 24/mars/2014 17:15
par Lord Nelson
Bonjour,

Savez vous comment calculer la position du Caret dans l'éditeur de texte par apport à la fenêtre ?
Car ceci me permettrais d’insérer un StringGadget pour simuler un input.

Merci :)

Re: Inserer StringGadget dans EditorGadget...

Publié : lun. 24/mars/2014 17:36
par Ar-S
Salut,
Je n'ai pas compris ta question.
Mets un code en plus de ta question qui reprend ton probleme avec une interface minimaliste.

Si c'est placer ton curseur à l'endroit désiré tu à la réponse dans ton topic précédent (http://www.purebasic.fr/french/viewtopi ... =1&t=14313) avec l'API sendmessage_()

je suppose qu'en remplaçant #EM_SETSEL en #EM_GETSEL ça aidera.

Re: Inserer StringGadget dans EditorGadget...

Publié : lun. 24/mars/2014 18:02
par Lord Nelson
Le code n'y changerais rien je le crains :|
Non c'est pas se que tu as dit :)

Je voudrait simuler comme un espèce de Input dans un éditeur de texte !

Il me faut savoir avec exactitude à quel position en X et en Y se trouve le Caret dans l'éditeur de texte relatif à la fenêtre
Comme ça je peut ensuite insérer un StringGadget à cet position dans l'éditeur !

L'utilisateur entre sa réponse et valide avec entrée pour valider sa réponse et faire disparaitre le StringGadget
Suis-je assez clair là :)

Tous se que je veux, c'est savoir la position du Caret dans l'éditeur de texte relatif à la fenêtre.

Re: Inserer StringGadget dans EditorGadget...

Publié : lun. 24/mars/2014 18:44
par nico

Code : Tout sélectionner

; Les coordonnées sont relatives à l'EditorGadget normalement, pas fait de test, je te laisse le faire.
GetCaretPos_(@Point.POINT)
debug Point\x
debug Point\y

Re: Inserer StringGadget dans EditorGadget...

Publié : lun. 24/mars/2014 19:03
par Lord Nelson
Merci mais cella ne fonctionne pas, ça renvoie 0, 0 peut importe ou se trouve le curseur.
Et il ne faut pas que se soit relatives à l'EditorGadget mais bien à la fenêtre :)

Re: Inserer StringGadget dans EditorGadget...

Publié : lun. 24/mars/2014 19:34
par nico
Si ça fonctionne très bien mais il faut que l'EditorGadget garde le focus au moment de l'appel.

Pour que ce soit relatif à la fenêtre, deux possibilités: ClientToScreen_(...) et ensuite ScreenToClient(...) ou MapWindowPoints_(...)

J'ai pas le temps de faire des codes de démo à chaque question, désolé.

Re: Inserer StringGadget dans EditorGadget...

Publié : lun. 24/mars/2014 19:36
par Lord Nelson
Ok merci quand même Nico :)
Impossible de continuer, j'attendrais que quelqu’un veuille bien en dire plus.

Re: Inserer StringGadget dans EditorGadget...

Publié : lun. 24/mars/2014 20:13
par Backup
j'attendrais que quelqu’un veuille bien en dire plus.
moi ce qui me gave , c'est que je me suis cassé le cul (en restant poli) a faire un regroupement des Tutos
et que personne ne s'en sert ! (je vais finir par tout virer ! )

http://www.purebasic.fr/french/viewtopi ... =21&t=6664

Tuto numero 15 section Utilisateurs Avertis !


la litanie des questions qui trouvent réponse avec une simple recherche ... c'est juste blasant !

les mecs , arrivent , posent leur question ... genre démerdez vous a me filer un code tout fait
ou bien faites la recherche a ma place ..... :roll:

apres si nous qui avons fait tout le boulot, on ose dire qu'on est pas content ,
c'est encore nous , qu'on blame d'ouvrir notre gueule !


j'ai l'impression du retour de B13 , Dayvid et compagnie .....



putain, vivement que j'achete ce putain velo que j'aille me changer les idées et oublier ce foire-um
il suffit d'un ou deux membre pour casser les meilleurs volontés ....

il n'y a pas de Vrais modérateurs ,... ça va redevenir n'importe quoi ce forum ....

bordel ! ..............

Re: Inserer StringGadget dans EditorGadget...

Publié : lun. 24/mars/2014 20:33
par nico
Cela prend énormément de temps de créer du code, j'ai quand même pris 50 mn pour te pondre ce truc, j'en suis pas super fier mais bon c'est un exemple, faire un CTRL + I pour faire apparaitre le String.

Code : Tout sélectionner

Enumeration
  #Main
  #Popup
EndEnumeration

Enumeration
  #Editor
  #String
EndEnumeration


If OpenWindow(#Main, 0, 0, 600, 600, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)  
  
  EditorGadget(#Editor, 10, 10, 580, 500) 
  StringGadget(#String, -110, -30, 100, 20, "", #ES_MULTILINE)
  HideGadget(#String, 1)
  SetParent_(GadgetID(#String), GadgetID(#Editor))
  
  For a = 0 To 5 
    AddGadgetItem(0, a, "Ligne "+Str(a)) 
  Next 
  
  AddKeyboardShortcut(#Main, #PB_Shortcut_Control | #PB_Shortcut_I,123)
  AddKeyboardShortcut(#Main,  #PB_Shortcut_Return, 124)
  
  Repeat
    Event = WaitWindowEvent()
    
    Select  Event 
        
      Case #PB_Event_RightClick
        GetCaretPos_(@Point.POINT)
        Debug Point\x
        Debug Point\y
        
      Case #PB_Event_Menu
        Select EventMenu()
          Case 123
            If GetCaretPos_(@Point.POINT) <> 0
              Debug Point\x
              Debug Point\y
              ResizeGadget(#String, Point\x +10, Point\y +10, #PB_Ignore, #PB_Ignore)
              HideGadget(#String, 0)
              SetActiveGadget(#String)
            EndIf   
            
          Case 124
            If GetActiveGadget() = #String
              HideGadget(#String, 1)
              Texte.s = GetGadgetText(#String)
              SetGadgetText(#String, "")
              SetClipboardText(Texte)
              SendMessage_(GadgetID(#Editor), #WM_PASTE, 0, 0)
            ElseIf GetActiveGadget() = #Editor
              SetClipboardText(Chr(10) + Chr(13))
              SendMessage_(GadgetID(#Editor), #WM_PASTE, 0, 0)
            EndIf
            
        EndSelect 
        
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #String
            Select EventType()
              Case #PB_EventType_Change  
                Debug "#String #PB_EventType_Change"
                
            EndSelect
            
          Case #Editor
            Select EventType() 
              Case #PB_EventType_Focus
                HideGadget(#String, 1)
                
            EndSelect
        EndSelect
        
      Case #PB_Event_CloseWindow
        Quit = 1        
        
    EndSelect
    
    
  Until Quit = 1
EndIf
End 


Re: Inserer StringGadget dans EditorGadget...

Publié : lun. 24/mars/2014 20:57
par nico
moi ce qui me gave , c'est que je me suis cassé le cul (en restant poli) a faire un regroupement des Tutos
et que personne ne s'en sert ! (je vais finir par tout virer ! )
Je comprend ce que tu veux dire, mais pour un débutant, c'est pas évident de chercher quelque chose dont on ne sais rien.
les mecs , arrivent , posent leur question ... genre démerdez vous a me filer un code tout fait
ou bien faites la recherche a ma place ..... :roll:
C'est tout le problème, on débute mais on veut faire des choses intéressantes alors forcément ça passe par des codes fait par d'autres et encore faut que le code soit carré parce que sinon ce sera trop dur pour l'adapter. Je met le temps passé dans l'exemple que je donne pour montrer que même pour quelqu'un avec un niveau plus élevé, ça prend énormément de temps et encore là, c'est pour l'exemple parce que je ferais pas comme ça mais si je m'y met, j'en ai pour des heures.

La programmation, c'est dur et fastidieux quand tu commences à faire des trucs sérieux; c'est sûr que la première fois que tu fais un messagerequester, t'as l'impression que tu peux tout faire. :lol:

Re: Inserer StringGadget dans EditorGadget...

Publié : lun. 24/mars/2014 21:52
par Backup
nico a écrit : C'est tout le problème, on débute mais on veut faire des choses intéressantes alors forcément ça passe par des codes fait par d'autres et encore faut que le code soit carré parce que sinon ce sera trop dur pour l'adapter. Je met le temps passé dans l'exemple que je donne pour montrer que même pour quelqu'un avec un niveau plus élevé, ça prend énormément de temps et encore là, c'est pour l'exemple parce que je ferais pas comme ça mais si je m'y met, j'en ai pour des heures.

c'est pourquoi il y a des Tuto

pour sont problème de Curseur , il aurait pu trouver cet exemple :
deja écrit , et fonctionnel ! ....


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; EPB
lorsque j'arrive sur un forum ,dont je ne maitrise pas le sujet , je passe une semaine a me taper un maximum
de Topic a lire , c'est long , mais souvent tres instructif , sur la mentalité, le fonctionnement , du forum ...

énormément de forum de programmation , invite les nouveaux membre a utiliser le bouton [Rechercher]
car il n'y a rien de plus irritant pour les habitués , de devoir répéter inlassablement les mêmes choses

si on pouvait filtrer les topics qui sont en doublons, parlant du même sujet, on pourrai je pense diviser par 10
la taille de la base de données .....

etre "débutant" (je l'ai mis entre guillemets, on l'est tous .. ) n’empêche pas une recherche par soi-même (même avec Google )

ça permet de coucher moins bete, et de ne pas etre quémandeur permanent ... :)

je n'ai jamais compris la présence des agents de renseignement de la SNCF , qui se trouve devant le train
pour renseigner les gens , alors qu'il y a de grosses pancartes , ou Ecran d'informations qui indiquent deja tout ...

les gens deviennent "cons" a ne plus rechercher par eux meme
dans un milieu comme la programmation , ne pas être curieux , ne pas être a le recherche par soi même
du bug, ou de l'algo ... est un gros defaut ; autant allez a la pêche ....

pour ce qui concerne la vitesse de codage, je suis comme toi , sauf peut etre que je dispose d’énormément
d'exemples de base , et que je code par copier-collé , ce qui fait que je peut donner l'impression de coder
comme "Vif Argent" (Xmen ) Image

j'encourage tout le monde a faire comme moi , ça va plus vite ...
après sur certains sujet ou je bloque , faut avoir quelques potes de programmation comme Nico :mrgreen:

mais attendre le bec ouvert .... desolé, je ne supporte pas le principe !
(relis moi , je réagit a une phrase précise ;) )

de plus il existe d'autre forums Purebasic , qui sont des mines d'or de Codes ...
la bibliotheque de codes Personnel, est vite construite :)

Re: Inserer StringGadget dans EditorGadget...

Publié : mar. 25/mars/2014 0:09
par falsam
Lord Nelson a écrit :Car ceci me permettrais d’insérer un StringGadget pour simuler un input.
Reponse sur ce lien par exemple :mrgreen:
http://www.purebasic.fr/french/viewtopi ... itorgadget

J'ai une question qui me brûle les lèvres mais en cherchant un peu, la question est déja posée sur ce forum
http://www.purebasic.fr/french/viewtopi ... 70#p122770

Re: Inserer StringGadget dans EditorGadget...

Publié : mar. 25/mars/2014 1:39
par Backup
Lord Nelson a écrit :Car ceci me permettrais d’insérer un StringGadget pour simuler un input.
comme je l'ai dis , la reponse a cette question se trouve aussi là
Tuto numero 15 section Utilisateur Averti ...

Dernier message de ce lien :
http://www.purebasic.fr/french/viewtopi ... 21&t=13891

Re: Inserer StringGadget dans EditorGadget...

Publié : mar. 25/mars/2014 16:36
par Fred
Exact ;)