Inserer StringGadget dans EditorGadget...

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Lord Nelson
Messages : 355
Inscription : dim. 01/déc./2013 15:29

Inserer StringGadget dans EditorGadget...

Message 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 :)
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Inserer StringGadget dans EditorGadget...

Message 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.
~~~~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
Lord Nelson
Messages : 355
Inscription : dim. 01/déc./2013 15:29

Re: Inserer StringGadget dans EditorGadget...

Message 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.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Inserer StringGadget dans EditorGadget...

Message 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
Lord Nelson
Messages : 355
Inscription : dim. 01/déc./2013 15:29

Re: Inserer StringGadget dans EditorGadget...

Message 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 :)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Inserer StringGadget dans EditorGadget...

Message 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é.
Lord Nelson
Messages : 355
Inscription : dim. 01/déc./2013 15:29

Re: Inserer StringGadget dans EditorGadget...

Message par Lord Nelson »

Ok merci quand même Nico :)
Impossible de continuer, j'attendrais que quelqu’un veuille bien en dire plus.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Inserer StringGadget dans EditorGadget...

Message 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 ! ..............
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Inserer StringGadget dans EditorGadget...

Message 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 

nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Inserer StringGadget dans EditorGadget...

Message 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:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Inserer StringGadget dans EditorGadget...

Message 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 :)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Inserer StringGadget dans EditorGadget...

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Inserer StringGadget dans EditorGadget...

Message 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
Fred
Site Admin
Messages : 2809
Inscription : mer. 21/janv./2004 11:03

Re: Inserer StringGadget dans EditorGadget...

Message par Fred »

Exact ;)
Dernière modification par Atlante le mar. 25/mars/2014 18:25, modifié 1 fois.
Raison : verrouillé par FRED, suppression par Atlante
Verrouillé