Comment simplifier

Résolu
keyser-08 Messages postés 9 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 22 novembre 2004 - 21 nov. 2004 à 16:59
keyser-08 Messages postés 9 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 22 novembre 2004 - 22 nov. 2004 à 17:17
bonjour tout le monde,
Je me demande comment je peut réduire le code suivant car je fais 2 fois la meme chose, une fois avec un ListView, puis la 2ème fois avec un ShellListView. je pense qu'il y a moyen de faire tout ça en une seule fois mais j'ai pas trouver (je suis encore novice :blush) )

if source = ListMain then
 begin

 For a:=1 to ListMain.SelCount do
  begin
       ListDrag:= ListMainTransfer.Items.Add;
       ListDrag.Caption:= ListMain.Selected.Caption;
       ListDrag.SubItems.Add(ListMain.Selected.SubItems[0]);
       ListDrag.SubItems.Add(ListMain.Selected.SubItems[1]);
       ListDrag.SubItems.Add(shellListView1.RootFolder.PathName);
       ListDrag.SubItems.Add(idFtp1.Host+IdFtp1.RetrieveCurrentDir);
       ListDrag.ImageIndex:= ListMain.Selected.ImageIndex;
       ListMainIp.Selected.Selected:=false;
  end ;
 end

else if (source = ShellListView1)and(IdFTP1.Connected) then

 begin

  for a:=1 to ShellListView1.SelCount do
   begin
     ListDrag:= ListMainTransfer.Items.Add;
     ListDrag.Caption:= shellListView1.Folders[ShellListView1.ItemIndex].DisplayName;
     ListDrag.SubItems.Add(ShellListView1.Selected.SubItems[0]);
     ListDrag.SubItems.Add(ShellListView1.Selected.SubItems[1]);
     ListDrag.SubItems.Add(shellListView1.RootFolder.PathName);
     ListDrag.SubItems.Add(idFtp1.Host+IdFtp1.RetrieveCurrentDir);
     ShellListView1.Selected.Selected:=false;
   end;
end;

2 réponses

cs_neko Messages postés 135 Date d'inscription jeudi 14 août 2003 Statut Membre Dernière intervention 12 octobre 2006 1
21 nov. 2004 à 20:45
En supposant que TShellListView herite de TListView ( le contraire m'etonnerais mais vu que le monsieur n'est pas dans l'aide et que j'ai a priori paumé la source je peu pas verrifier ) tu peux transtyper source ce qui donne:

  For a:=1 to TListView(Source).SelCount do begin
    if source = ListMain then begin
      ListDrag.Caption    := ListMain.Selected.Caption;
      ListDrag.ImageIndex := ListMain.Selected.ImageIndex;
    End Else
      ListDrag.Caption:= shellListView1.Folders[ShellListView1.ItemIndex].DisplayName;
    ListDrag:= ListMainTransfer.Items.Add;
    ListDrag.SubItems.Add(TListView(Source).Selected.SubItems[0]);
    ListDrag.SubItems.Add(TListView(Source).Selected.SubItems[1]);
    ListDrag.SubItems.Add(shellListView1.RootFolder.PathName);
    ListDrag.SubItems.Add(idFtp1.Host+IdFtp1.RetrieveCurrentDir);
    TListView(Source).Selected.Selected:=false;
  end;
end


le code est plus court mais beaucoup plus lent ( la condition est examinée SelCount fois au lieu d'une seule )

Il doit y avoir encore mieu mais ca devrait deja aller, pi ca montre le principe

bouh
3
keyser-08 Messages postés 9 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 22 novembre 2004
22 nov. 2004 à 17:17
merci pour cette réponse, ça allège pas mal

pour le Selcount j'ai mis un interger (i :=TListView(Source).SelCount ) avant la boucle for.
0
Rejoignez-nous