[resolu] récupérer un chaine de caratères en surbrillance

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

[resolu] récupérer un chaine de caratères en surbrillance

Message par Ar-S »

Maintenant que j'ai découvert l'API SendMessage_(GadgetID(gadget),#WM_PASTE,0,0) pour insérer une chaine dans un gadget à l'endroit du curseur,
je voudrais savoir si ce même API ou un autre permettrait de récupérer une chaine de caractères qui serait en surbrillance dans un editeur gadget ou autre stringgadget ?
Dernière modification par Ar-S le mer. 23/déc./2009 14:41, modifié 2 fois.
~~~~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
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: récupérer un chaine de caratères en survrillance ?

Message par Kwai chang caine »

Bonjour mon Arsounet :D

J'ai ce code de HYPER dans mon escarcelle, je ne sais pas si ça peut te servir :roll:

Code : Tout sélectionner


  Procedure.s RTF_GetSelectedText(i_Gadget.i)
    ;/ -----------------------------------------------------------------------------
    ;/ Copy selected Text to String
    ;/ -----------------------------------------------------------------------------  
    Protected l_marked.CHARRANGE
    Protected l_txt.s
    
    SendMessage_(GadgetID(i_Gadget), #EM_EXGETSEL  , 0, @l_marked ) 
    l_txt       = Space (1 + l_marked\cpMax - l_marked\cpMin)
    SendMessage_(GadgetID(i_Gadget), #EM_GETSELTEXT, 0, @l_txt)
    
    ProcedureReturn l_txt
    
  EndProcedure
  
  
  text$ = "{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fmodern\fprq1\fcharset0 Courier New;}{\f1\fswiss\fprq2\fcharset0 Arial;}{\f2\fswiss\fprq2\fcharset0 Verdana;}}" 
  text$ = text$ + "{\colortbl ;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue0;}" 
  text$ = text$ + "\viewkind4\uc1\pard\f0\fs20 normal \cf1 rot\cf0  \cf2 gr\'fcn\cf0  \b fett\b0  \cf3\b fettblau \cf0\b0 normal\par " 
  text$ = text$ + "Jetzt Text markieren und Fenster schließen klicken! \f1 Arial, \f2\fs28 Verdana\fs20 , \f0 Courier New\cf4\par " 
  text$ = text$ + "}" 
  
  OpenWindow(#PB_Any, 216, 0, 590, 300, "Popup Menu im Editor-Gadget" , #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar)
  
  EditorGadget(9000,  10, 10 , 280, 280)
  EditorGadget(9001, 300, 10 , 280, 280)
  
  SetGadgetText( 9000, text$ )   ;/ Text reinsetzen 
  
  ;/ Pause: Jetzt Textteile markieren 
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  
  l_sel.s = RTF_GetSelectedText( 9000 )
  
  ;/ Rechts reinsetzen [leider ohne Format]
  SetGadgetText( 9001, l_sel )
  
  ;/ Pause
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: récupérer un chaine de caratères en survrillance ?

Message par nico »

Pour l'Editor, utilise le code de Kwai chang caine, sinon pour le string tu peux prendre celui-ci:

Code : Tout sélectionner

If OpenWindow(0, 0, 0, 300, 280, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)  
  ;EditorGadget(0, 10, 10, 280, 200)
  StringGadget(0, 10,10, 280,20,"Selection dans un String")
  ButtonGadget(1,100,240,100,20,"OK")
  
  For a = 0 To 5 
    AddGadgetItem(0, a, "Ligne "+Str(a)) 
  Next 
  
  Repeat
    Event = WaitWindowEvent()
    Select Event
      Case #PB_Event_Gadget
        Select EventGadget()
            Case 1 
              Texte.s=GetGadgetText(0)
              ;Texte = RemoveString(Texte, Chr(10)) ;Utile seulement pour l'Editor
              RetVal.l=SendMessage_(GadgetID(0),#EM_GETSEL,@StartPos.l,@EndPos.l) 
              If StartPos=EndPos
                Debug "No Selection"
              Else
                Selection.s=Mid(Texte,StartPos+1,EndPos-StartPos)
                Debug Selection 
              EndIf 
              
        EndSelect      
    EndSelect
  Until Event = #PB_Event_CloseWindow
EndIf
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: récupérer un chaine de caratères en surbrillance ?

Message par Ar-S »

Merci KCC, c'est exactement ça !
je pense que la solution se trouve effectivement dans le #EM_EXGETSEL :D

Super ! Ô grand Shaolin du Gif Image

Code : Tout sélectionner

Enumeration
  #aff:#go:#win
EndEnumeration

Procedure.s RTF_GetSelectedText(i_Gadget.i) 
  ;/ ----------------------------------------------------------------------------- 
  ;/ Copy selected Text to String 
  ;/ -----------------------------------------------------------------------------  
  Protected l_marked.CHARRANGE 
  Protected l_txt.s 
  
  SendMessage_(GadgetID(i_Gadget), #EM_EXGETSEL  , 0, @l_marked )  
  l_txt       = Space (1 + l_marked\cpMax - l_marked\cpMin) 
  SendMessage_(GadgetID(i_Gadget), #EM_GETSELTEXT, 0, @l_txt) 
  
  ProcedureReturn l_txt 
  
EndProcedure 
  
text$ = "j'aime le poulet"  
  
OpenWindow(#win, 216, 0, 590, 300, "Popup Menu im Editor-Gadget" , #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar) 
ButtonGadget(#go, 5, 275, 130, 22, "test")
EditorGadget(#aff,  10, 10 , 280, 250) 
SetGadgetText(#aff,"j'aime le poulet" )
  
Repeat 
Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #go
          text$=GetGadgetText(#aff)
          text$=text$+RTF_GetSelectedText(#aff) 
          SetGadgetText(#aff, text$ )   ;/ Text reinsetzen 
      EndSelect
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #win
          CloseWindow(#win)
          Break
      EndSelect
  EndSelect
ForEver 
     

----edit-----

merci aussi nico,
comme ça la boucle est bouclée :D
~~~~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
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: récupérer un chaine de caratères en surbrillance ?

Message par Kwai chang caine »

De rien, c'est un plaisir de te faire plaisir :mrgreen:
Y m'a bien fait rire ton GIF, encore une fois, comme tes cerfs :lol:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Re: [resolu] récupérer un chaine de caratères en surbrillance

Message par Geo Trouvpatou »

Salut.

Voici un code du soldat inconnu qui permet de selectionner du texte et de mettre des balises bbcodes devant et derrière ou d'incruster un mot à l'endroit du curseur.

Bye.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [resolu] récupérer un chaine de caratères en surbrillance

Message par Ar-S »

merci Geo, je n'ai pas ppu testé je ne suis pas chez moi, mais la solution m'a été donné par kcc.
je regarderai ça après le 24... :)
~~~~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
Répondre