Problème de sélection sur ListBox [Résolu]

Sceyllia 8 Messages postés mercredi 8 août 2007Date d'inscription 21 mars 2013 Dernière intervention - 14 mars 2011 à 10:50 - Dernière réponse : cs_mourad555 10 Messages postés jeudi 25 décembre 2008Date d'inscription 16 mai 2016 Dernière intervention
- 3 avril 2011 à 14:32
Bonjour à tous,

Je me décide de solliciter un coup de main, car je n'arrive pas a trouver une solution a mon problème.

Voilà, j'ai une ListBox dans laquelle j'aimerais sélectionner l'ouverture/fermeture de mes lecteurs CD/DVD.

Le soucis est que seul mon premier lecteur "réagit" a cette "commande" alors que j'aimerais pouvoir l'effectuer

sur le lecteur de mon choix, je ne sais pas si ma question est claire...

Voici mon code :

procedure TForm1.FormCreate(Sender: TObject);
var
Drive: char;
begin
for Drive := 'A' to 'Z' do
begin
if (GetDriveType(PChar(Drive + ':\')) = DRIVE_CDROM) then ListBox1.Items.Add(Drive + ':');
end;
ListBox1.ItemIndex := 1;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
CloseDoor(ListBox1.Items.Text);
end;

procedure TForm1.Quitter1Click(Sender: TObject);
begin
Close;
end;

end.

je remercie à l'avance celui ou celle qui voudra bien m'aider.

Merci.
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 14 mars 2011 à 14:28
3
Merci
Salut,

peu importe si le code se trouve dans dans l'évènement d'un TButton ou d'un OnChange ...
il faut modifier le code comme suit:

[b]begin
  with /bListBox1 [b]do
    if /bItemIndex > -1 [b]then
      /bCloseDoor(Items[ItemIndex]);
end;

ceci devrait résoudre ton problème.

en effet ListBox1.Items.Text te renvoi le contenu de la liste ... pas l'élément sélectionné.
Pour t'en convaincre il te suffit de faire:
ShowMessage(ListBox1.Items.Text);


[hr]@+Cirec
[hr]

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de Cirec
dubois77 691 Messages postés jeudi 17 avril 2008Date d'inscription 19 juin 2018 Dernière intervention - 14 mars 2011 à 10:57
0
Merci
Bonjour
simples suggestions :
1) dans le créate il faudrait mettre :
ListBox1.ItemIndex := 0; // au lieu de 1

2) pourquoi un bouton pour exécuter ?
si le listebox n'a pas été cliqué çà ne marche pas
il faudrait mieux utiliser le onchange du Tlistbox

Dubois77
Commenter la réponse de dubois77
Sceyllia 8 Messages postés mercredi 8 août 2007Date d'inscription 21 mars 2013 Dernière intervention - 14 mars 2011 à 11:38
0
Merci
Quelle rapidité pour avoir une réponse !

Pour le create j'ai modifié car je ne savais plus comment abordé ce code, c'est idiot je sais bien.

Pour le bouton, c'est simple, je voudrais simplement que le tiroir du lecteur s'ouvre ou se ferme

par le biais d'un bouton lorsque je le sélectionne dans la liste.

En bref, disons que j'étudie différentes possibilités pour faire une même action,

cela me passionne énormément et m'aide surtout à comprendre.

Ce que je ne saisis pas, c'est pourquoi ce code fonctionne parfaitement sur un combobox

mais pas sur une ListBox, je me doute bien qu'il doit y avoir des erreurs mais en tant que débutant

cela me parait normal.

Pour le "onchange" je vais me pencher dessus...qui sait, je vais peut-être trouver la solution.

Merci encore de m'avoir répondu, c'est sympa.

Sceyllia.
Commenter la réponse de Sceyllia
dubois77 691 Messages postés jeudi 17 avril 2008Date d'inscription 19 juin 2018 Dernière intervention - 14 mars 2011 à 12:36
0
Merci
Rectification : c'est le ListBox1click que je voulais dire,
çà remplace directement le bouton :

procedure TForm1.L2Click(Sender: TObject);
begin
CloseDoor(ListBox1.Items.Text); 
end; 

Dubois77
Commenter la réponse de dubois77
Sceyllia 8 Messages postés mercredi 8 août 2007Date d'inscription 21 mars 2013 Dernière intervention - 14 mars 2011 à 15:25
0
Merci
Ouais...bon...

Bah, c'est pas demain la veille que je pigerais ce vaste monde qu'est la programmation...

Pour info, j'ai juste compris l'endroit ou ça coinçait et évidemment c'était ici : CloseDoor(ListBox1.Items.Text);

Mais de là à ce que je trouve le code tout seul...

Je n'aurais jamais cru qu'il faille carrément modifier "toute sa structure" au temps pour moi !

Merci beaucoup à toi Cirec (c'est peut-être pas grand chose pour toi) mais sur ce coup là chapeau bas !

Merci également à Dubois77.

Excellente fin d'après-midi à tous.

Sceyllia.
Commenter la réponse de Sceyllia
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 14 mars 2011 à 15:46
0
Merci
pour plus de lisibilité on peut aussi écrire le code comme ceci:

[b]begin
  /b{si un Item est sélectionné   -1 = pas de sélection}
  if ListBox1.ItemIndex > -1 [b]then
    /bCloseDoor(ListBox1.Items[ListBox1.ItemIndex]);
end;

c'est peut être plus facile à comprendre comme ça ?


[hr]@+Cirec
[hr]
Commenter la réponse de Cirec
Sceyllia 8 Messages postés mercredi 8 août 2007Date d'inscription 21 mars 2013 Dernière intervention - 14 mars 2011 à 17:05
0
Merci
Oui, en effet, pour moi c'est beaucoup plus lisible.

Je ne vais pas te demander la différence entre les deux versions, "je ne vais pas abuser"

mais j'imagine qu'elles ne sont pas identiques, enfin j'espère, car là je pigerais nettement

moins pourquoi l'écrire autrement, (peut-être l'expérience).

Bon je vais potasser ça pour essayer de mieux capter (j'aime bien piger).

Merci encore Cirec.

Sceyllia.
Commenter la réponse de Sceyllia
cs_mourad555 10 Messages postés jeudi 25 décembre 2008Date d'inscription 16 mai 2016 Dernière intervention - 1 avril 2011 à 03:20
0
Merci
begin
{si un Item est sélectionné -1 = pas de sélection}
if ListBox1.ItemIndex > -1 then
CloseDoor(ListBox1.Items[ListBox1.ItemIndex]);
end;
Commenter la réponse de cs_mourad555
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 1 avril 2011 à 20:28
0
Merci
@mourad555:

quel est l'intérêt de poster une copie de ma réponse !!!



[hr]@+Cirec
[hr]
Commenter la réponse de Cirec
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 1 avril 2011 à 21:07
0
Merci
[quote= Sceyllia]mais j'imagine qu'elles ne sont pas identiques, enfin j'espère, car là je pigerais nettement

moins pourquoi l'écrire autrement, (peut-être l'expérience). /quote

1) ben si elles sont totalement idendiques
2) parce qu'un bon programmeur est un programmeur fainéant (j'ai entendu dire ça un jour )

plus sérieusement, je vais essayer d'éclaircir un peu les choses:
[hr]  [i]{cette version évite juste réécrire à chaque ligne "ListBox1."

   avant l'appel aux méthodes et propriétés}
/i procedure  TForm1.Button1Click(Sender: TObject);
[b]begin
  /b {littéralement: avec "ListBox1 faire}
  with ListBox1 [b]do
    if /bItemIndex > -1 [b]then
      /bCloseDoor(Items[ItemIndex]);
end;
  [i]{** Normalement, pour une meilleur lecture, on devrait l'écrire comme ceci}
/iprocedure TForm1.Button1Click(Sender: TObject);
[b]begin
  with /bListBox1 [b]do
  /b{tous les appels aux propriétés & méthodes entre begin et end}
  {se font prioritairement sur ListBox1}
  [b]begin
    if /bItemIndex > -1 [b]then
      /bCloseDoor(Items[ItemIndex]);
    {ceci va changer la couleur du fond du ListBox1}
    Color : = clBlue;
    [i]{ceci va changer le Caption de Form1 puisque cette propriété n'existe pas
     dans TListBox}/i
    Caption :=  'ceci est un teste';
   end ;
  [i]{ceci va changer la couleur du fond de Form1
   puisqu'on est en dehors de begin/end et qu'on est dans une procédure de
   Form1 "procedure TForm1.Button1Click"}/i
  Color : = clBlue;
end;
[hr]** mais dans le code que je donne le "begin" et le "end" ne sont pas utiles ... c'est pour cette raison que je les ai supprimés

voilà j'espère que c'est un peu plus clair pour toi


[hr]@+Cirec
[hr]
Commenter la réponse de Cirec
cs_mourad555 10 Messages postés jeudi 25 décembre 2008Date d'inscription 16 mai 2016 Dernière intervention - 3 avril 2011 à 14:32
0
Merci
Merci beaucoooooooooooooooooup mon frère ...!
pour cette explication .
Commenter la réponse de cs_mourad555

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.