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

Lazarus Pascal Discussion :

Drag and Drop entre deux TEdits


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Drag and Drop entre deux TEdits
    Bonjour,

    je cherche à réaliser un DnD entre 2 TEdits plus exactement entre la partie sélectionnée du premier vers le second.

    J'ai un code à peu près fonctionnel mais je ne suis pas du tout sûr d'utiliser le concept DnD proprement.

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Edit1 : TEdit;
        Edit2 : TEdit;
      [...]
      private
        { private declarations }
      public
        { public declarations }
        aStmp : String;
        aSelStart, aSelLength : integer;
      end;           
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      aStmp := '';
      with edit1, edit2 do
           DragMode := dmManual;
    end;    
     
    procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if (Sender is TCustomEdit) and (aStmp <> '') then begin
        TCustomEdit(Sender).BeginDrag(False);
        //Recréer la zone sélectionnée qui s'efface au moment du DnD
        TCustomEdit(Sender).SelStart  := aSelStart;
        TCustomEdit(Sender).SelLength := aSelLength;
      end;
     
    end;
     
    procedure TForm1.Edit1MouseEnter(Sender: TObject);
    begin
        aStmp := ''; // "Débrancher" le mode DnD... Il y a probablement une autre méthode
    end;
     
    procedure TForm1.Edit1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
     with TCustomEdit(Sender) do begin
       //Que faut-il copier ?
       asTmp      := Seltext;
       aSelStart  := SelStart;
       aSelLength := SelLength;
     end;
    end;
     
    procedure TForm1.Edit2DragDrop(Sender, Source: TObject; X, Y: Integer);
    begin
      //On copie
      TCustomEdit(Sender).Text := aStmp;
    end;
     
    procedure TForm1.Edit2DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
      if Source is TCustomEdit then
        Accept := True
      else
        Accept := False
    end;
    Comme d'habitude, le soucis d'ergonomie est important, notamment le non effacement visuel de la zone sélectionnée lors du move.

    Cela me semble "bricolé". Avant de m'attaquer aux TMemos, j'aimerais savoir s'il y a une méthode plus adaptée.

    Cordialement. Gilles

  2. #2
    Membre expérimenté
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 161
    Par défaut
    hello selzig,
    pour ne pas utiliser de variable intermédiaire et ne pas être gêné par la sélection pour le DnD, pourquoi ne pas utiliser le clic droit souris pour initialiser le DnD au lieu du clic gauche, comme ceci par exemple :
    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
    procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
        if (Button = mbRight) AND (TEdit(Sender).SelText <> '') then  
        Edit1.BeginDrag(true); 
     
    procedure TForm1.Edit2DragDrop(Sender, Source: TObject; X, Y: Integer);
    begin
       if Source is TEdit then
        Edit2.Text := TEdit(Source).SelText;
    end;
     
    procedure TForm1.Edit2DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
       Accept := true;
    end;
    Amicalement, nullosse

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Parce que cela me semble peu ergonomique (ie peu naturel)... Il suffit de prendre un TT ou simplement le champ dans lequel je saisis mon message actuellement... Pour y déplacer du texte, on n'utilise pas le bouton droit de la souris...

    Ce qu'il faut que j'arrive à déterminer c'est comment on débranche le DnD "manuellement". J'ai un code un peu plus sophistiqué mais quand je clique dans la zone sélectionnée pour annuler une sélection j'ai un traitement parasite que je n'arrive pas à débrancher.. En réalité, la visualisation du DnD ne doit apparaître que s'il y a déplacement de la zone sélectionnée... L'emploi de variables intermédiaires n'est pas gênant d'autant plus que je l'intègre dans le composant...

    Cordialement. Gilles

Discussions similaires

  1. [VBA-E]drag and drop entre deux listbox
    Par Yolak dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 14/06/2012, 14h37
  2. Drag and drop entre deux Liste BOX
    Par simoinfonet dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 24/04/2008, 17h39
  3. Drag and drop entre deux ListBox
    Par simoinfonet dans le forum Langage
    Réponses: 0
    Dernier message: 18/04/2008, 18h53
  4. Drag and Drop entre deux list view
    Par mkaffel dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/10/2007, 21h52
  5. [FLASH MX2004] Drag and drop entre deux List
    Par aldo-tlse dans le forum Flash
    Réponses: 15
    Dernier message: 24/09/2005, 01h10

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