Page 1 sur 1
Ven 10/02/2012 - Actualités
Posté : ven. 10 févr. 2012 15:31
par Xavier
Ven 10/02/2012 - Actualités
14:30
Correction de bug : le seul moyen de permettre un coupage ou une copie, suivis de multiples collages et en fait de procéder à la copie de la donnée lors de l'opération de collage, l'opération de copie ne devant en fait rien faire que "marquer" la donnée.
Ven 10/02/2012 - Actualités
Posté : ven. 10 févr. 2012 16:32
par Xavier
15:30
Copier la donnée lors de l'opération de collage n'est pas mieux car du coup les opérations de coupage créent des données orphelines qui s'accumulent.
Retour à la case départ avec une astuce :
- Couper : détache la donnée de son parent, et met à jour la fenêtre. La donnée est conservée à l'ombre.
- Copier : crée une nouvelle donnée par duplication. La donnée est conservée à l'ombre.
- Coller : colle la donnée conservée à l'ombre. Et en refait immédiatement une autre copie pour pouvoir faire un autre collage si besoin.
Grâce à cette astuce, le collage multiple est possible, et l'encombrement mémoire supplémentaire se résume à une seule donnée (et ses descendants).
Ven 10/02/2012 - Actualités
Posté : ven. 10 févr. 2012 17:34
par Xavier
16:30
Toute la puissance des
Booleans illustrée par la méthode chargée de contexter le menu et les boutons.
Code : Tout sélectionner
//------------------------------------------------------------------------------
// Contacts_UpdateContext : met à jour les contextualisations
// 10/02/2012 - XT400
//------------------------------------------------------------------------------
procedure TContacts_Form.Contacts_UpdateContext(Sender: TObject);
var
Tree: Boolean;
List: Boolean;
Node: TTreeNode;
Item: TListItem;
begin
// Gestion des logs
XSK_Log('Code', 'XContacts', 'Contacts_UpdateContext');
// Préparations
Tree := (Self.ActiveControl = Contacts_Tree);
List := (Self.ActiveControl = Contacts_List);
Node := Contacts_Tree.Selected;
Item := Contacts_List.Selected;
// Contextualisation du menu
Contacts_NewFolder_Item.Visible := Tree;
Contacts_NewFolder_Item.Enabled := True;
Contacts_NewContact_Item.Visible := List;
Contacts_NewContact_Item.Enabled := True;
Contacts_NewInfo_Item.Visible := List;
Contacts_NewInfo_Item.Enabled := (List and (Item <> Nil));
Contacts_Rename_Item.Visible := True;
Contacts_Rename_Item.Enabled := ((Tree and (Node.Level > 0)) or (List and (Item <> Nil)));
Contacts_Edit_Item.Visible := List;
Contacts_Edit_Item.Enabled := (List and (Item <> Nil) and (Item.SubItems[1] = 'Information'));
Contacts_Up_Item.Visible := True;
Contacts_Up_Item.Enabled := ((Tree and (Node.Level > 0)) or (List and (Item <> Nil)));
Contacts_Down_Item.Visible := True;
Contacts_Down_Item.Enabled := ((Tree and (Node.Level > 0)) or (List and (Item <> Nil)));
Contacts_Delete_Item.Visible := True;
Contacts_Delete_Item.Enabled := ((Tree and (Node.Level > 0)) or (List and (Item <> Nil)));
Contacts_Cut_Item.Visible := True;
Contacts_Cut_Item.Enabled := ((Tree and (Node.Level > 0)) or (List and (Item <> Nil) and (Item.SubItems[1] = 'Contact')));
Contacts_Copy_Item.Visible := True;
Contacts_Copy_Item.Enabled := ((Tree and (Node.Level > 0)) or (List and (Item <> Nil) and (Item.SubItems[1] = 'Contact')));
Contacts_Paste_Item.Visible := True;
Contacts_Paste_Item.Enabled := (LV_Data <> Nil);
// Contextualisation des boutons
Contacts_Rename_Button.Enabled := Contacts_Rename_Item.Enabled;
Contacts_Up_Button.Enabled := Contacts_Up_Item.Enabled;
Contacts_Down_Button.Enabled := Contacts_Down_Item.Enabled;
Contacts_Delete_Button.Enabled := Contacts_Delete_Item.Enabled;
Contacts_Cut_Button.Enabled := Contacts_Cut_Item.Enabled;
Contacts_Copy_Button.Enabled := Contacts_Copy_Item.Enabled;
Contacts_Paste_Button.Enabled := Contacts_Paste_Item.Enabled;
end;
Ven 10/02/2012 - Actualités
Posté : ven. 10 févr. 2012 17:47
par Xavier
16:45
Encore optimisé...
Code : Tout sélectionner
// Préparations
Tree_Node := Contacts_Tree.Selected;
List_Item := Contacts_List.Selected;
Tree := (Self.ActiveControl = Contacts_Tree);
List := (Self.ActiveControl = Contacts_List);
SubFolder := (Tree_Node.Level > 0);
Item := (List_Item <> Nil);
Contact := (Item and (List_Item.SubItems[1] = 'Contact'));
Information := (Item and (List_Item.SubItems[1] = 'Information'));
// Contextualisation du menu
Contacts_NewFolder_Item.Visible := Tree;
Contacts_NewFolder_Item.Enabled := True;
Contacts_NewContact_Item.Visible := List;
Contacts_NewContact_Item.Enabled := True;
Contacts_NewInfo_Item.Visible := List;
Contacts_NewInfo_Item.Enabled := (List and Item);
Contacts_Rename_Item.Visible := True;
Contacts_Rename_Item.Enabled := ((Tree and SubFolder) or (List and Item));
Contacts_Edit_Item.Visible := List;
Contacts_Edit_Item.Enabled := (List and Information);
Contacts_Delete_Item.Visible := True;
Contacts_Delete_Item.Enabled := ((Tree and SubFolder) or (List and Item));
Contacts_Cut_Item.Visible := True;
Contacts_Cut_Item.Enabled := ((Tree and SubFolder) or (List and Contact));
Contacts_Copy_Item.Visible := True;
Contacts_Copy_Item.Enabled := ((Tree and SubFolder) or (List and Contact));
Contacts_Paste_Item.Visible := True;
Contacts_Paste_Item.Enabled := (LV_Data <> Nil);
Contacts_Up_Item.Visible := True;
Contacts_Up_Item.Enabled := ((Tree and SubFolder) or (List and Item));
Contacts_Down_Item.Visible := True;
Contacts_Down_Item.Enabled := ((Tree and SubFolder) or (List and Item));
Maintenant les icônes...
Ven 10/02/2012 - Actualités
Posté : ven. 10 févr. 2012 19:38
par Xavier
18:40
Même
Delphi 2010 n'a pas réussi à griser les icônes en 24 bits, donc travail artisanal sous
Paint mais le résultat final est correct :
Greyed.png
Ven 10/02/2012 - Actualités
Posté : ven. 10 févr. 2012 20:29
par Xavier
19:30
Le dernier bug recensé est corrigé.
Il reste encore à gérer le drag-and-drop de Contacts de la liste vers l'arbre et l'outil devrait être prêt.
Re: Ven 10/02/2012 - Actualités
Posté : ven. 10 févr. 2012 22:51
par Denis
XMo a écrit :Encore optimisé...
Allez! Tu peux faire mieux. Surtout si de nombreux items ont le même comportement. N’évalue qu'une seule fois ta condition, pour les autres, qu'ils recopient la valeur du premier !
Re: Ven 10/02/2012 - Actualités
Posté : ven. 10 févr. 2012 22:53
par Denis
TB tes icones grisées
Re: Ven 10/02/2012 - Actualités
Posté : sam. 11 févr. 2012 09:22
par Xavier
DMo a écrit :XMo a écrit :Encore optimisé...
Allez! Tu peux faire mieux. Surtout si de nombreux items ont le même comportement. N’évalue qu'une seule fois ta condition, pour les autres, qu'ils recopient la valeur du premier !
Oui, il y a ça pour les boutons, qui copient leurs états sur les éléments de menu.
Si je généralise encore plus, je crains de devoir détricoter tout ça quand il y aura des bugs et qu'il faudra surcharger certains comportements et pas les autres.