Presse papier et menu.

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Presse papier et menu.

Message par Heis Spiter »

Voici un code qui va finir dans Bird Chat que je viens de terminer non sans mal. Désolé c'est commenté en Anglais... EN plsu je viens de voir que Gansta93 en parle, ça pourra l'aider !

Code : Tout sélectionner

; Open window. 
If OpenWindow(0, 200, 200, 200, 120, #PB_Window_SystemMenu, "Clipboard and menu") 
  ; Create popup menu that will be display. 
  If CreatePopupMenu(0) 
    MenuItem(1, "Cut") 
    MenuItem(2, "Copy") 
    MenuItem(3, "Paste") 
  EndIf 
  ; Create Gadget list, and Editor. 
  If CreateGadgetList(WindowID()) 
    EditorGadget(7, 10, 10, 100, 100) 
  EndIf 
  ; Main 
  Repeat 
    ; Select event from window. 
    Select WaitWindowEvent() 
      ; If it's left button mouse. 
      Case #WM_RButtonDown 
        ; Get cursor position. 
        GetCursorPos_(@pt.POINT)
        x = pt\x
        y = pt\y
        ScreenToClient_(WindowID(0),@pt.POINT) 
        ; If mouse is over editor. 
        If ChildWindowFromPoint_( WindowID(0), pt\x, pt\y)=GadgetID(7) 
          ; Create empty buffers. 
          SStart.l =  0 
          SEnd.l = 0 
          ; Receive informations from selection. 
          SendMessage_(GadgetID(7), #EM_GETSEL, @SStart, @SEnd) 
          ; If numbers are the same (no selection). 
          If SEnd = SStart 
            ; Disable Cut and Copy . 
            DisableMenuItem(1, 1) 
            DisableMenuItem(2, 1) 
            ; Else, 
          Else 
            ; Enable Cut and Copy. 
            DisableMenuItem(1, 0) 
            DisableMenuItem(2, 0) 
          EndIf 
          ; If clipbord is empty or don't contain text. 
          If GetClipboardText() = "" 
            ; Disable Paste 
            DisableMenuItem(3, 1) 
            ; Else, 
          Else 
            ; Enable Paste. 
            DisableMenuItem(3, 0) 
          EndIf 
          ; Finally, display popupmenu. 
          DisplayPopupMenu(0,WindowID(), x, y)  ; On affiche le menu contextuel 
        EndIf 
        ; If event is from menu. 
      Case #PB_EventMenu 
        ; Get item ID. 
        Select EventMenuID() 
          ; If it's item 1 (Cut) 
          Case 1 
            ; Cut text into clipboard. 
            SendMessage_(GadgetID(7), #WM_CUT, 0, 0) 
            ; If it's item 2 (Copy) 
          Case 2 
            ; Copy text into clipboard. 
            SendMessage_(GadgetID(7), #WM_COPY, 0, 0) 
            ; If it's item 3 (paste) 
          Case 3 
            ; Get text from clipbboard 
            Texte$ = GetClipboardText() 
            ; Replace selection if exists or put it at position. 
            SendMessage_(GadgetID(7), #EM_REPLACESEL, #False, @Texte$) 
        EndSelect 
        ; If user has clicked on X. 
      Case #PB_EventCloseWindow 
        ; quit  = 1 
        quit = 1 
    EndSelect 
    ; Until user cliked on X (quit = 1). 
  Until quit = 1 
EndIf 
; EOP => End Of Program ;). 
End
J'essairais de voir les réponses, et de l'améliorer.

Edit : mis à jour, c'est bien maintenant, il est plus simple ;).
Dernière modification par Heis Spiter le mer. 13/oct./2004 8:12, modifié 3 fois.
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Tu sais que tu peux remplacer la fonction:

Code : Tout sélectionner

        If IsMouseOver(GadgetID(7)) 
          ; Get position. 
          GetCursorPos_(pt.POINT)  
par:

Code : Tout sélectionner

GetCursorPos_(@pt.POINT)
x=pt\x:y=pt\y
ScreenToClient_(WindowID(0),@pt.POINT)
If ChildWindowFromPoint_( WindowID(0), pt\x, pt\y)=GadgetID(7) 
///////////////////
DisplayPopupMenu(0,WindowID(0),x, y)
:)
Dernière modification par nico le mar. 12/oct./2004 22:15, modifié 2 fois.
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

Maintenant, je le sais :lol:
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Il faut que tu mettes à jour ton code car parfois tu utilises Windowid() et d'autres fois Editor.

:)
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

Ah oui ! J'avais oublié ! (En plus c'est GadgetID ;))
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

Voilà un menu edition complait avec toutes les instructions qu'il faut sur le sujet ci-dessous:
http://purebasic.hmt-forum.com/viewtopic.php?t=1622
Annuler, Refaire, Couper, Copier, Coller, Sélectionner tout, supprimer.
Je crois qu'il y a tout.
Répondre