Controle d'un drivecombobox par une listbox

Résolu
Signaler
-
 Utilisateur anonyme -
Salut à tous

Voilà j'ai un drivecombobox et directorylistbox et un filelistbox. Je récupère les items respectivement dans des listbox 1,2 et 3. Voilà j'aimerai quand je clique sur un item du listbox 1(contenant le drivecombobox) que le drivecombobox soit sur le meme item et qu'il y ai une répercussion sur le directorylistbox et le filelistbox. Quand je clique sur un item du listbox2(contenant le directorylistbox) faire apparaitre les sous-dossiers et fichiers dans el directorylistbox et filelistbox.

Question simple (lol) : comment faire ??

Merci

20 réponses

Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
tu mets simplement dans la procédure dans l'évènement onclick de la listbox par exemple:

procedure TForm1.ListBox1Click(Sender: TObject);

begin

with listbox1 do

drivecombobox1.drive:=items[itemindex][1];// si le lecteur est palce en début de ligne



end;



@+

jlen
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
c'est le m^me principe suf qu'il faut t'assurer que tu es sur le bon disque sous peine de plantage!

procedure TForm1.ListBox1Click(Sender: TObject);

begin

with listbox1 do

DirectoryListBox1.Directory:=ListBox2.item[itemindex];

end;
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
j'ai compris il faut compléter le chemin du répertoire ainsi

pour "windows'--> DirectoryListBox1.Directory:='c:\'+ListBox2.items[itemindex];

et pour system32 --> DirectoryListBox1.Directory:='c:\windows\'+ListBox2.items[itemindex];

@+

jlen
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
salut,

il suffit de mettre dans la propriete drive du driveombobox la
lettre corespondant au lecteur dans la cas d'une listbox tu extrais le
drive en faisant :

with listboxxx do

drivecombobox1.drive:=items[itemindex][1];// si le lecteur est palce en début de ligne



@+

jlen

Merci Jlen mais il me faudrait que la procedure se déclenche quand je clique sur l'item qui m'intéresse dans la listbox
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
Salut,
c'est vrai quelle est facile ta question
mais j'ai l'impression que tu te compliques la vie
les DriveComboBox, DirectoryListBox et FileListBox sont fait pour être reliés entre eux par l'inspecteur d'objets, donc je me dis pourquoi ne pas utiliser cette fonction au lieu de passer par des intermédiaires que sont les ListBox
parce que ce que tu demandes c'est reproduire les comportements des DriveComboBox, DirectoryListBox et FileListBox en cliquant sur des ListBox

@+
Cirec

Pour la simple raison que tu ne peux pas faire de stream avec drivecombobox directorylistbox et filelistbox parcontre avec les listbox tu peux. Voila pk Cirec
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
ah bon
dans ce cas je ne dicute pas, autant pour moi
si tu l'avais precisé avant j'aurai économisé mon clavier

@+
Cirec

C pas grave ca exerce tes doigts lol

merci à vous
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
note que tu peux faire la m^me chose avec filelistbox1.drive et Directorylistbox1.drive



@+

jlen
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
-->cirec cela peux également limiter l'acces aux disques

@+

jlen

Juste une dernière question : pour sélectionner le lecteur j'utilise "DRIVE" comment faire pour choisir le répertoire (clique sur le répertoire voulu dans le listbox2 et répercussion sur le directorylistbox) ?

merci
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
@ jlen je n'ai jamais eut à faire ce genre de prog. mais si un jour le besoin se fait sentir...
merci pour l'information je garde ça sous le coude bien au chaud

@+
Cirec
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
-->cirec dans le cas que je donne il est encore plus simple de se
faire une combobox avec jutste les disques accessibles et la même chose
pour les repertoires (faire une combobox par disque) etc..etc..



@+

jlen

effectivement ca plante à la deuxième sélection
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
quand tu pars du listbox contenant les répertoires force les drives dans les différents combobox.



@+

jlen

C pas le soucis Jlen pour ce que je veux faire mais il y a un soucis de taille :
Bon si j'arrive à C:
windows
system32

Et que je veux revenir sur C: ca marche
par contre si je sélectionne windows ou un autre sous répertoire de windows ca plante.

voila ma source

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, FileCtrl, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
DriveComboBox1: TDriveComboBox;
ListBox1: TListBox;
DirectoryListBox1: TDirectoryListBox;
FileListBox1: TFileListBox;
ListBox2: TListBox;
ListBox3: TListBox;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure ListBox2Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
listbox1.Items.text:=drivecombobox1.Items.Text;
listbox2.Items.text:=directorylistbox1.Items.Text;
listbox3.Items.text:=filelistbox1.Items.Text;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin

with listbox1 do
drivecombobox1.drive:=items[itemindex][1];
end;

procedure TForm1.ListBox2Click(Sender: TObject);
begin
with listbox2 do
DirectoryListBox1.Directory:=ListBox2.items[itemindex];
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
listbox2.Items.text:=directorylistbox1.Items.Text;
listbox3.Items.text:=filelistbox1.Items.Text;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

end.

le probleme Jlen est que cela a lieu des que je vais sous un autre sous repertoire d'un répertoire donné ou que je remonte sur ce répertoire : ce n'est pas spécifique à windows ou system32. Il faut donc que je l'automatise.

Il faut que je cherche.

Merci bcp à toi Jlen (peut etre une ptite source va paraitre :))

Je suis désolé j'ai dis une grosse boulette : il est possible d'utiliser un drivecombobox, un directorylistbox, un filelistbox avec les streams.

Exemple : Vous avez deux drive, deux directory, deux filelistbox :
procedure TForm1.Button1Click(Sender: TObject);
var Memdoss,Memdisk,Memfile:TMemoryStream;
begin
Memdisk:=TMemoryStream.Create; //Crée une instance TMemoryStream
Memdoss:=TMemoryStream.Create;
Memfile:=TMemoryStream.Create;
try
drivecombobox1.items.SaveToStream(Memdisk);
Memdisk.Seek(soFromBeginning,0);
drivecombobox2.items.LoadFromStream(Memdisk);
directorylistbox1.items.SaveToStream(Memdoss);
Memdoss.Seek(soFromBeginning,0);
directorylistbox2.items.LoadFromStream(Memdoss);
filelistbox1.items.SaveToStream(Memfile);
Memfile.Seek(soFromBeginning,0);
filelistbox2.items.LoadFromStream(Memfile);
finally
Memdisk.Free;
Memdoss.Free;
Memfile.Free;
end;
end;
end.

En cliquant sur le bouton vous récupérer ce que vous avez dans la partie 1 dans la partie 2