11:50
Le dernier bug référencé dans l'outil Contacts était (bien entendu) le plus difficile : lors du déplacement d'un Contact dans un même dossier (fonctions Monter et Descendre), la sélection résultante n'était pas cohérente.
Là où ça se complique, c'est que ce bug apparaissait uniquement si l'opération était effectuée au clavier, le résultat de ces fonctions étant correct quand appelées via le bouton ou le menu contextuel.
Après analyse, le problème semblait lié à l'utilisation des touches Haut et Bas, un peu comme si le ListView les réinterprétait, mais de façon incorrecte.
Même un "vidage" artificiel du buffer était sans effet :
Code : Tout sélectionner
PeekMessage(Msg, 0, WM_CHAR, WM_CHAR, PM_REMOVE);
Reprise des tests, et détection d'un bug similaire à la fermeture d'un Contact si effectuée sur une Information, toujours au clavier, mais cette fois avec d'autres touches ("+" et "-").
Après recherche sur Internet, il s'avère que je n'utilisais que la propriété Selected du TListView, et que d'autres développeurs utilisaient Selected et ItemFocused ! (Je le saurai pour les prochaines fois...)
Chaque revalorisation de Selected est désormais suivi d'un forçage du focus sur la sélection :
Code : Tout sélectionner
Contacts_List.ItemFocused := Contacts_List.Selected;
Code : Tout sélectionner
// [Ctrl + Haut]
if ((Shift = [ssCtrl]) and (Key = VK_Up))
then begin
if Contacts_Up_Button.Enabled
then Contacts_Manage(Contacts_Up_Button);
Key := 0;
end;
// [Ctrl + Bas]
if ((Shift = [ssCtrl]) and (Key = VK_Down))
then begin
if Contacts_Down_Button.Enabled
then Contacts_Manage(Contacts_Down_Button);
Key := 0;
end;