IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Drag & Drop de TTreeView à TRicheEdit d'une autre form


Sujet :

Langage Delphi

  1. #1
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut Drag & Drop de TTreeView à TRicheEdit d'une autre form
    Bonsoir, Bonjour à toutes et à tous

    Je voudrais pouvoir réaliser un Drap & Drop d'un TTreeview ver sun TRicheEdit.

    Mais mon TricheEdit est sur une autre Form (créer dynamiquement)

    Voici mon code du coter TreeView, l'évenement Drop

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    procedure TFPrincipal.TreeViewBaseDragDrop(Sender, Source: TObject; X,
      Y: Integer; State: TDragState; var Accept: Boolean);
    var
      SourceNode, TargetNode: TTreeNode;
    begin
      with TreeViewBase do
      begin
        TargetNode := GetNodeAt(X, Y);
        SourceNode := Selected;
     
        {On s'assure que le droppé existe}
        if (TargetNode = nil) then
        begin
          EndDrag(false);
          Exit;
        end;
      end;
    end;
    Voici mon evenement DragOver du TRicheEdit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TFTravail.RequeteDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
      Accept := Source = FPrincipal.TreeViewBase;
    end;
    - Que faut-il faire pour récupérer le titre du node de mon treeview à l'interieur de mon richeedit ?

  2. #2
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780

  3. #3
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Salut Next,

    Merci pour ton lien, mais il me suffit pas.

    En fait j'arrive à gérer le transfere du treeview dans le Memo (enfin le Richeedit) mais je n'arrive pas a faire en sorte que le texte du Treeview se pose à l'endroit où ce trouve la souris.

    voilà mon code Du Drop qui est lié à mon composant RicheEdit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TFTravail.RequeteDragDrop(Sender, Source: TObject; X,
      Y: Integer);
    begin
     
    Requete.Lines.add(FPrincipal.TreeViewBase.DropTarget.Text);
     
    end;
    Je tourne en rond, j'ai testé pas mal de chose mais pour le moment je trouve pas.

    Pour ceux qui peuvent m'aider je vais ré-expliquer mon besoin.

    Imaginon un Tedit à la place de mon TreeView j'écris du texte dedans ensuite je le selection et je drag&Drop dans un Memo (ou un richeedit) qui comporte déjà du text.

    Ma question est comment faire pour que le texte se pose exactement à l'endroit de la souris ? ou meme un tuto...

    Merci

  4. #4
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Bien,

    J'ai beaucuop de mal à trouver des exemples de ce que je recherche.

    Toutefois j'ai récupéré un morceau de code qui permet apparement de faire ce que je cherche mais cela me génére plusieur erreur de type :

    Classe EAccessViolation 'Access violation at adress xxxxxx in module RICHED20.DLL'

    Voir la ligne rouge dans le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    procedure TFTravail.RequeteDragDrop(Sender, Source: TObject; X,
      Y: Integer);
    Var
      i : Integer;
      Data: Pchar;
      aPoint: Tpoint;
    Begin
      aPoint.X := X;
      aPoint.Y := Y;
    
      if FPrincipal.TreeViewBase.Selected.Level > 0 then //source
      Begin
        Data := PChar(FPrincipal.TreeViewBase.Selected.Parent.Text +'.'
        + FPrincipal.TreeViewBase.Selected.Text);
      end
      else
        Data := PChar(FPrincipal.TreeViewBase.Selected.Text);
    
           // Calcul de la position du pointeur de la souris pour positionner le texte à une position précise dans le TRicheEdit
           I := (aPoint.Y - (Top + (Height - ClientHeight) + Requete.Top)) shl 16 +
               (aPoint.X - (Left + (Width - ClientWidth) div 2 + Requete.Left));
           I := LoWord(Requete.Perform(EM_CHARFROMPOS, 0, I));
           Requete.SelStart := I;        // on positionne le curseur de selection sous le pointeur de la souris
           Requete.SetSelTextBuf(Data); // on insert le text là où est le curseur
    
    end;
    requete est un TRicheEdit.

    Le plus difficile c'est d'arriver à trouver la position de la souris dans le TMemo (et surtout au move pas au clique car je fait Drag & Drop) de tel sorte que lorsque je lache le Drap"Drop entre 2 mots il y ai une insertion de ma donnée.

    Peut-être connaissez vous un exemple entre 2 Tmemo ou 1 edit et 1 Tmemo.

    Ou alors pouvez vous m'aider à trouver la position de ma souris lorsque je survole le Tmemo que je puisse exploiter cette info ?

    Merci à vous.

  5. #5
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    J'aimerais apporter une précision dans ma demande d'aide.

    Mise à part le fait d'arriver à trouver l'endroi où se trouve la souris quand je drop sur le TRicheEdit, la complication que j'ai c'est que

    Mon Treeview se trouve sur ma form principal, où j'ai mis : DragMode = dmAutomtic

    Et mon RicheEdit se trouve sur une Form créer dynamiquement (concu au préalable dans mon programme. Dans cette form j'ai mis dan les evenements de mon RicheEdit

    OnDrapDrop = RequeteDrapDrop
    OnDragver = RequeteDragOver

    Voici mes evenements pour rappel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TFTravail.RequeteDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
      Accept := Source = FPrincipal.TreeViewBase;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure CaretPos(H: THandle; var L,C : Word);
    begin
      L := SendMessage(H,EM_LINEFROMCHAR,-1,0);
      C := LoWord(SendMessage(H,EM_GETSEL,0,0)) - SendMessage(H,EM_LINEINDEX,-1,0);
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    procedure TFTravail.RequeteDragDrop(Sender, Source: TObject; X,
      Y: Integer);
    Var
      i : Integer;
      Data: Pchar;
      LineNum,ColNum : Word;
      aPoint: Tpoint;
    Begin
      aPoint.X := X;
      aPoint.Y := Y;
     
    // Pour le moment je fais comme cela je récupère la position du cursor
    // du RicheEdit pour y poser mon Data
      CaretPos(Requete.Handle,LineNum,ColNum);
     
      if FPrincipal.TreeViewBase.Selected.Level > 0 then
      Begin
        Data := PChar('['+FPrincipal.TreeViewBase.Selected.Parent.Text +'.'
        + FPrincipal.TreeViewBase.Selected.Text+']');
      end
      else
        Data := PChar('['+FPrincipal.TreeViewBase.Selected.Text+']');
     
    {NE FONCTIONE PAS POUR LE MOMENT
      Calcul de la position du pointeur de la souris pour positionner le texte à une position précise dans le TMemo
           I := (aPoint.Y - (Top + (Height - ClientHeight) + Requete.Top)) shl 16 +
               (aPoint.X - (Left + (Width - ClientWidth) div 2 + Requete.Left));
           I := LoWord(Requete.Perform(EM_CHARFROMPOS , 0, I));
    }
     
           Requete.SelStart := ColNum;   
           Requete.SetSelTextBuf(Data); // on insert le text là où est le curseur
     
    end;
    Alors est-ce que je dois obligatoirement avoir mon treeview dans me form où se trouve mon richeedit pour espérer que cela fonctionne ?

    Où ma demande est faisable et c'est juste une question de calcul du cursor au survol de mon richeedit ?

    MErci de votre coup de main

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/11/2011, 12h26
  2. Drag and Drop entre deux instances d'une même application
    Par befalimpertinent dans le forum C++
    Réponses: 1
    Dernier message: 23/11/2010, 15h33
  3. [Dojo] drag and drop child de tree vers une div
    Par laminfodev dans le forum Bibliothèques & Frameworks
    Réponses: 4
    Dernier message: 09/02/2010, 14h54
  4. Drag n Drop d'un tree vers une list
    Par greatalain dans le forum Flex
    Réponses: 1
    Dernier message: 25/04/2008, 12h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo