ListView DragAndDrop

cs_tao Messages postés 19 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 11 avril 2006 - 4 juil. 2005 à 11:46
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 5 juil. 2005 à 17:17
Bonjour,

Je souhaite mettre en place un mécanisme de glisser déplacer entre une ListView et un TreeView. Lorsque je commence à faire glisser un item de ma ListView l'évènement OncLick de cette dernière est déclenché ce qui me pose des problèmes. Je voudrais savoir comment faire pour ne pas déclencher l'évènement OnCLick de la ListView lorsque je fais glisser un élément de cette liste. Par contre, il me faut réactiver cet évènement (OnClick) à la fin du glisser déplacer quelque soit le résultat de ce dernier.

PS : J'utilise Delphi5

Merci.

10 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
5 juil. 2005 à 15:18
Essaie de deplacer le probleme. Ne pourrais tu pas remplacer ton
evenement OnClick par un evenement OnMouseUp ? Lorsque tu clique sur un
bouton, je pense que la difference n'est pas énorme, et ca permettrai
de résoudre ton probleme.
0
cs_tao Messages postés 19 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 11 avril 2006
5 juil. 2005 à 16:09
Le problème sera le même car le fait de déplacer un item de ma liste déclenche également l'évènement OnMouseUp, j'avais pensé à cette solution.

Si tu as un autre idée....

Merci.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
5 juil. 2005 à 16:16
Essaie de déclarer une variable booleene en globale (nommée
Glissement), et dans l'evenement onDragDrop tu met Glissement:=True et
dans Onclick tu met If not glissement then <ton action de clique>
else Glissement:=False



Si ca ne marche toujours pas, peut tu m'envoyer tes sources, je jetterais un ocup d'oeil.
0
cs_tao Messages postés 19 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 11 avril 2006
5 juil. 2005 à 16:38
Cette solution pourrais faire l'affaire si l'événement OnClick était déclenché aprés l'évènement onDragDrop, mais ce n'est pas le cas au contraire l'évènement onClick est déclenché avant l'évènement onDragDrop. Dans mon exemple j'utilise l'événement onStartDrag pour détecter le début du glisser déplacer, j'avais positionner dans cette évènement ma variable global glissement = true.

Désolé, si tu as encore une autre idée, je suis toujours preneur.

Merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
5 juil. 2005 à 16:43
As tu essayé de regrouper les idées précedentes. C'est à dire de
remplacer Onclick par OnMouseUp et te servir de OnStartDrag avec ton
boolen ? (Si je ne me trompe pas OnStrartDrag se déclenchera avant
Onclick)
0
cs_tao Messages postés 19 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 11 avril 2006
5 juil. 2005 à 16:58
Eh bien non, le problème est bien que le onStartDrag est lui aussi déclenché aprés le OnClick. En fait le première évènement déclenché est le OnClick, et je me demande si cela est bien logique?

J'ai fait le test avec plusieurs version de delphi le problème est toujours le même, je ne trouve pas de solution.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
5 juil. 2005 à 17:01
Oui, le OnClick est declenche avant le OnStartDrag, c'est logique, mais
est-ce qe tu as essayé la methode du boolean avec le OnMouseUp. Par
logique je dirai que le OnMouseUp se déclenche apres le OnClick.



Si tu veux tu m'envoie ta source je peu jeter un coup d'oeil.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
5 juil. 2005 à 17:02
Pardon, il fallait lire "OnMouseUp se déclenche apres le OnStartDrag"
0
cs_tao Messages postés 19 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 11 avril 2006
5 juil. 2005 à 17:11
L'évènement OnMouseUp est également déclenché avant le OnStartDrag.

Voici les procedure concernant le listview

procedure TFrmMain.LvReaderIOClick(Sender: TObject);
begin
MyLvReaderIOClick(Sender);
end;

procedure TFrmMain.MyLvReaderIOClick(Sender: TObject);
begin
if not assigned(LvReaderIO.Selected) then exit;
HideChildForm;
LoadListItem(LvReaderIO.Selected);
end;

procedure TFrmMain.LvReaderIOColumnClick(Sender: TObject;
Column: TListColumn);
begin
MyColumnClick(Sender,Column);
end;

procedure TFrmMain.LvReaderIOKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
MyLvReaderIOKeyUp(Sender,Key,Shift);
end;

procedure TfrmMain.MyLvReaderIOKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key in [VK_UP,VK_DOWN,VK_END,VK_HOME,VK_PRIOR,VK_NEXT]) then LvReaderIO.OnClick(LvReaderIO.Selected);
end;

procedure TFrmMain.LvReaderIOStartDrag(Sender: TObject;
var DragObject: TDragObject);
begin
LvReaderIO.RowSelect := false;
HideChildForm;
end;

procedure TFrmMain.MyColumnClick(Sender:TObject;Column:TListColumn);
begin
BOOL_Sens := not BOOL_Sens;
LvReaderIO.CustomSort(@CustomSortProc, Column.Index);
end;
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
5 juil. 2005 à 17:17
Ca m'aide pas du tout. Je t'envoie un mp avec mon adresse mail.
0
Rejoignez-nous