cs_tao
Messages postés19Date d'inscriptionvendredi 10 janvier 2003StatutMembreDernière intervention11 avril 2006
-
4 juil. 2005 à 11:46
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 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.
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 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.
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 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.
cs_tao
Messages postés19Date d'inscriptionvendredi 10 janvier 2003StatutMembreDernière intervention11 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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 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)
cs_tao
Messages postés19Date d'inscriptionvendredi 10 janvier 2003StatutMembreDernière intervention11 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.
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 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.
cs_tao
Messages postés19Date d'inscriptionvendredi 10 janvier 2003StatutMembreDernière intervention11 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;