PureBasic

Forums PureBasic
Nous sommes le Lun 21/Oct/2019 11:44

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 19 messages ]  Aller à la page 1, 2  Suivante
Auteur Message
 Sujet du message: [Résolu] Problème Drag et Drop ListWiew vers Editor
MessagePosté: Sam 04/Mar/2017 15:56 
Hors ligne

Inscription: Mer 04/Nov/2015 17:39
Messages: 1025
Salut,

J'ai chercher comment faire pour Drag et Drop un élément d'une ListWiew vers un Editor
mais j'ai du mal chercher, pas trouvé, alors j'ai essayé et avancé un peut mais je bloque:

Voici mon début de code, je dois pas être très loins:
Code:
Enumeration 1
  #Fenetre
  #ListView
  #Editor
EndEnumeration

Procedure Ma_Fenetre()
 
  If OpenWindow(#Fenetre, 327, 177, 500, 300, "Exemple Drag et Drop Liste wiew vers Editor Gadget...",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered | #PB_Window_TitleBar)
    EditorGadget(#Editor, 2, 2, 496, 147)
    ListViewGadget(#ListView, 2, 151, 496, 147)
   
    For I = 1 To 6
      AddGadgetItem(#ListView, -1, "Element n°" + Str(I))
    Next
   
    EnableGadgetDrop(#Editor, #PB_Drop_Text, #PB_Drag_Copy)
   
    Repeat
     
      Event = WaitWindowEvent(1)
      EventWindow = EventWindow()
      EventGadget = EventGadget()
      EventMenu = EventMenu()
      EventType = EventType()
     
      Select Event
         
        Case #PB_Event_Gadget
         
          Select EventGadget
             
            Case #ListView
             
              TexteDragEtDropListView$ = GetGadgetItemText(#ListView, GetGadgetState(#ListView))
              DragText(TexteDragEtDropListView$)
             
            Case #Editor
             
             
          EndSelect
         
        Case #PB_Event_Menu
         
          Select EventMenu
             
            Case 0
             
          EndSelect
         
        Case #PB_Event_GadgetDrop
         
         
        Case #PB_Event_CloseWindow 
         
      EndSelect
     
    Until Event = #PB_Event_CloseWindow
   
  EndIf
 
EndProcedure

Ma_Fenetre()

_________________
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.


Dernière édition par Shadow le Lun 06/Mar/2017 3:20, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Drag et Drop ListWiew vers Editor
MessagePosté: Sam 04/Mar/2017 16:08 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8768
J'ai énuméré tes éléments de 0 à 5 plutôt que de 1 à 6 ça t'évitera de mauvaises surprises car les listes commencent à 0
Ensuite tout est dans Case #PB_Event_GadgetDrop
Code:
 
Enumeration 1
  #Fenetre
  #ListView
  #Editor
EndEnumeration

Procedure Ma_Fenetre()

  If OpenWindow(#Fenetre, 327, 177, 500, 300, "Exemple Drag et Drop Liste wiew vers Editor Gadget...",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered | #PB_Window_TitleBar)
    EditorGadget(#Editor, 2, 2, 496, 147)
    ListViewGadget(#ListView, 2, 151, 496, 147)
   
    For I = 0 To 5
      AddGadgetItem(#ListView, -1, "Element n°" + Str(I))
    Next
   
    EnableGadgetDrop(#Editor, #PB_Drop_Text, #PB_Drag_Copy)
   
    Repeat
     
      Event = WaitWindowEvent(1)
      EventWindow = EventWindow()
      EventGadget = EventGadget()
      EventMenu = EventMenu()
      EventType = EventType()
     
      Select Event
         
        Case #PB_Event_Gadget
         
          Select EventGadget
             
            Case #ListView
             
              TexteDragEtDropListView$ = GetGadgetItemText(#ListView, GetGadgetState(#ListView))
              DragText(TexteDragEtDropListView$)
             
            Case #Editor
             
             
          EndSelect
         
        Case #PB_Event_Menu
         
          Select EventMenu
             
            Case 0
             
          EndSelect
         
               
        Case #PB_Event_GadgetDrop
          NUM = GetGadgetState(#ListView) ; numéro de l'élément
          Titre$ = GetGadgetItemText(#ListView,NUM) ; Text de l'élément numéro NUM
          Debug "Ligne : "+NUM
          Debug "titre : " +Titre$
          ; Si tu veux en ajouter les éléments les uns apres les autres
          AddGadgetItem(#Editor, -1, Titre$)
          ; Si tu veux remplacer les textes à chaque fois
;           SetGadgetText(#Editor, Titre$)
         
        Case #PB_Event_CloseWindow
         
      EndSelect
     
    Until Event = #PB_Event_CloseWindow
   
  EndIf

EndProcedure

Ma_Fenetre()
 
 
  ;

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Drag et Drop ListWiew vers Editor
MessagePosté: Sam 04/Mar/2017 17:21 
Hors ligne

Inscription: Mer 04/Nov/2015 17:39
Messages: 1025
Super merci Ar'S :)

Dernière chose, comment faire pour ajouter l'élément
a l’emplacement du curseur dans l'éditeur ?

Avec:
Code:
SendMessage_(GadgetID(#Editor), #EM_REPLACESEL, -1, Texte$)

Mais j'aimerais voir le curseur dans l'éditeur et je ne le vois pas quand je Drag...

De plus quand je Drag et Drop du texte de l'éditeur lui même, il me met
l'élément sélectionné dans la ListWiew dans l'éditeur, pas bon ça...

Peut être comme ceci ?:
Code:
Enumeration 1
  #Fenetre
  #ListView
  #Editor
EndEnumeration

Procedure Ma_Fenetre()

  If OpenWindow(#Fenetre, 327, 177, 500, 300, "Exemple Drag et Drop Liste wiew vers Editor Gadget...",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered | #PB_Window_TitleBar)
    EditorGadget(#Editor, 2, 2, 496, 147)
    ListViewGadget(#ListView, 2, 151, 496, 147)
   
    For I = 0 To 5
      AddGadgetItem(#ListView, -1, "Element n°" + Str(I))
    Next
   
    EnableGadgetDrop(#Editor, #PB_Drop_Text, #PB_Drag_Copy)
   
    Repeat
     
      Event = WaitWindowEvent(1)
      EventWindow = EventWindow()
      EventGadget = EventGadget()
      EventMenu = EventMenu()
      EventType = EventType()
     
      Select Event
         
        Case #PB_Event_Gadget
         
          Select EventGadget
             
            Case #ListView
             
              TexteDragEtDropListView$ = GetGadgetItemText(#ListView, GetGadgetState(#ListView))
              DragText(TexteDragEtDropListView$)
             
            Case #Editor
             
          EndSelect
         
        Case #PB_Event_Menu
         
          Select EventMenu
             
            Case 0
             
          EndSelect
         
        Case #PB_Event_GadgetDrop
         
          If TexteDragEtDropListView$ <> ""
           
            NumeroElementListView = GetGadgetState(#ListView) ; Numéro de l'élément sélectionné du ListView
            TexteElementListView$ = GetGadgetItemText(#ListView, NumeroElementListView) ; Texte de l'élément sélectionné du ListView
           
            ; Ajouter l'éléments les uns apres les autres dans l'editeur.
            ; AddGadgetItem(#Editor, -1, TexteElementListView$)
           
            ; Ajouter l'éléments à la position du curseur dans l'editeur.
            SendMessage_(GadgetID(#Editor), #EM_REPLACESEL, -1, TexteElementListView$)
            TexteDragEtDropListView$ = ""
           
          EndIf
       
        Case #PB_Event_CloseWindow
         
      EndSelect
     
    Until Event = #PB_Event_CloseWindow
   
  EndIf

EndProcedure

Ma_Fenetre()

Par contre, je vois toujours pas le curseur dans l'éditeur quand le Drag...
Peut être que ça viens de PB et que ont peut pas faire autrement ?

_________________
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Drag et Drop ListWiew vers Editor
MessagePosté: Sam 04/Mar/2017 18:05 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8768
Pour le curseur tu as tout ici : http://purebasic.fr/french/viewtopic.php?f=1&t=6319
Et pour placer l'élément aprés le curseur dans ma fonction D&Drop précédente je t'ai mis en commentaire la version pour remplir l'editor.
- Soit tu fais un getgadgettext() de l'editor et tu ajoutes contenu du DND (comme ça pas besoin d'API
- Soit tu places le contenu du DnD via les commandes du lien que je viens de te filer.

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Drag et Drop ListWiew vers Editor
MessagePosté: Sam 04/Mar/2017 18:13 
Hors ligne

Inscription: Mer 04/Nov/2015 17:39
Messages: 1025
Ah merci...

L'éditeur a déjà un drag et drop d'origine en interne et il accepte
aussi les données de d'autre éditeur chose que j’ignorais !

Mais ça ne fonctionne plus du coup avec ce code...

_________________
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Drag et Drop ListWiew vers Editor
MessagePosté: Sam 04/Mar/2017 18:20 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1616
Plus rapide encore: Autant utiliser le texte que le d&d "transporte" (= EventDropText())
https://www.purebasic.com/french/documentation/dragdrop/eventdroptext.html

Code:
     Case #PB_Event_GadgetDrop
          SendMessage_(GadgetID(#Editor), #EM_REPLACESEL, -1, EventDropText())
          ; C'est tout, Merci PB :-)

Dérivé de l'exemple fourni dans la doc:
https://www.purebasic.com/french/documentation/Examples/DragDrop.pb.html

_________________
Windows 10 Famille x64 + Linux (Slackware, Debian sur Oracle VirtualBox 6.0)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Drag et Drop ListWiew vers Editor
MessagePosté: Sam 04/Mar/2017 18:35 
Hors ligne

Inscription: Mer 04/Nov/2015 17:39
Messages: 1025
Merci à vous :)

Donc voici le résulta optimisé au mieux:
Code:

Enumeration 1
  #Fenetre
  #ListView
  #Editor
EndEnumeration

If OpenWindow(#Fenetre, 327, 177, 500, 300, "Exemple Drag et Drop ListeWiew vers Editor Gadget...",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered | #PB_Window_TitleBar)
  EditorGadget(#Editor, 2, 2, 496, 147)
  ListViewGadget(#ListView, 2, 151, 496, 147)
 
  For I = 0 To 5
    AddGadgetItem(#ListView, -1, "Élément n°" + Str(I))
  Next
 
  EnableGadgetDrop(#Editor, #PB_Drop_Text, #PB_Drag_Copy)
 
  Repeat
   
    Event = WaitWindowEvent(1)
   
    If Event = #PB_Event_Gadget And EventType() = #PB_EventType_DragStart
     
      Select EventGadget()
         
        Case #ListView
          DragText(GetGadgetItemText(#ListView, GetGadgetState(#ListView)))
         
        Case #Editor
         
      EndSelect
     
    ElseIf Event = #PB_Event_GadgetDrop
     
      Select EventGadget()
         
        Case #Editor
         
          ; Ajouter l'éléments les uns apres les autres dans l'editeur.
          ; AddGadgetItem(#Editor, -1, TexteElementListView$)
         
          ; Ajouter l'éléments à la position du curseur dans l'editeur.
          SendMessage_(GadgetID(#Editor), #EM_REPLACESEL, -1, EventDropText())
         
      EndSelect
     
    ElseIf Event = #PB_Event_CloseWindow
     
    EndIf
   
  Until Event = #PB_Event_CloseWindow
 
EndIf

Cependant ont ne vois toujours pas le curseur dans l’éditeur pour orienté la position du Drop (Relâcher de la souris) :?
Je ne sais pas comment faire ça.

_________________
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Drag et Drop ListWiew vers Editor
MessagePosté: Sam 04/Mar/2017 21:02 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8768
Dans l'API SendMessage_ c'est la constante #EM_SETSEL qu'il va falloir utiliser.
Après ton sendmessage ajoute :
Code:
SetActiveGadget(#Editor)
SendMessage_(GadgetID(#Editor), #EM_SETSEL, $fffffff, $fffffff)

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Drag et Drop ListWiew vers Editor
MessagePosté: Sam 04/Mar/2017 21:22 
Hors ligne

Inscription: Mer 04/Nov/2015 17:39
Messages: 1025
Fonctionne pas.

_________________
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Drag et Drop ListWiew vers Editor
MessagePosté: Sam 04/Mar/2017 21:43 
Hors ligne

Inscription: Mer 04/Nov/2015 17:39
Messages: 1025
Voila, là ça va être très clair:
https://www.dropbox.com/s/7ttw4ss23g2j9 ... m.mp4?dl=0

Scène 1, le curseur de la souris se déplace en même temps que le drag dans l'éditeur
Scène 2, le curseur est invisible...

_________________
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Drag et Drop ListWiew vers Editor
MessagePosté: Dim 05/Mar/2017 0:01 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8768
Je passe. Plus le temps pour le moment.

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
RESIZER GOLD : Mon logiciel de redimensionnement par lot 100% PB


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Drag et Drop ListWiew vers Editor
MessagePosté: Lun 06/Mar/2017 0:28 
Hors ligne

Inscription: Mer 04/Nov/2015 17:39
Messages: 1025
Est ce que quelqu’un peut m'aider svp ?
Fred si tu passe par là, est-ce un bug ?

_________________
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Drag et Drop ListWiew vers Editor
MessagePosté: Lun 06/Mar/2017 0:44 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6856
Localisation: IDF (Yvelines)
Ce n'est pas un bug. L'insertion de ton item se fait au point d'insertion du curseur de l'EditorGadget().

Si tu souhaites placer ton item à un autre endroit de ton EditorGadget() alors place ton curseur d'insertion à un autre endroit de ton éditeur.

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Drag et Drop ListWiew vers Editor
MessagePosté: Lun 06/Mar/2017 0:59 
Hors ligne

Inscription: Mer 04/Nov/2015 17:39
Messages: 1025
Oui oui mais pourquoi le comportement change ?

_________________
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Drag et Drop ListWiew vers Editor
MessagePosté: Lun 06/Mar/2017 1:37 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6856
Localisation: IDF (Yvelines)
Shadow a écrit:
Dernière chose, comment faire pour ajouter l'élément a l’emplacement du curseur dans l'éditeur ?
Une petite bidouille de ce style pour une début de piste.
Code:
Declare Drag()

OpenWindow(0, 0, 0, 800, 600, "Drag & Drop")
EditorGadget(0, 0, 0, 800, 300)
AddGadgetItem(0, -1, LSet("", 20, #CRLF$))

ListViewGadget(1, 0, 305, 800, 300)
For I = 0 To 5
  AddGadgetItem(1, -1, "Élément n°" + Str(I))
Next

BindGadgetEvent(1, @Drag())

While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend

Procedure Drag()
  DragText(GetGadgetItemText(1, GetGadgetState(1)), #PB_Drag_Copy) 
EndProcedure

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 19 messages ]  Aller à la page 1, 2  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot] et 3 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye