Utilisation avancée du composant combobox sur delphi 5 [Résolu]

Signaler
Messages postés
28
Date d'inscription
samedi 29 avril 2006
Statut
Membre
Dernière intervention
11 mars 2011
-
Messages postés
16
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
8 mars 2010
-
BALDE THIERNO HAMIDOU ETUDIANT A L'UNIVERSITE DE CONAKRY EN INFORMATIQUE

Je suis sur un projet et je veux utiliser combobox pour creer une liste comme la feuille d'excel ou je peut mettre nom et prenoms date de naissance lieu pays mais
je ne parviens pas faire quelque chose de bien je demande l'aide
detaillée car je suis bébutant, et c'est mon prémier projet un peu
costaud puisque je doit faire un agenda ou je dois gerer les temps etc..

priere de bien vouloir m'aider

20 réponses

Messages postés
28
Date d'inscription
samedi 29 avril 2006
Statut
Membre
Dernière intervention
11 mars 2011

       je  vous remercie beaucoup et
c'est serai ingrat de ma part de ne pas vous remercier, car ce que vous
savez pas c'est je suis en guinée et labas c'est n'est tous les jours
qu'on peut se connecter sur le web, donc priere de bien vouloir
m'excuser


 je sais compter sur votre bonne comprehension
Messages postés
3825
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 février 2021
42
Salut,
un TListView me parait plus approprié vu le nombre d'information que tu dois y stocker !

 
@+
Cirec

Messages postés
3825
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 février 2021
42
une autre solution :

Tu places sur une nouvelle fiche :
2 TEdit
1 TDateTimePicker
1 TButton
1 TComboBox

Type
PMyRec = ^TMyRec; // Déclaration d'un type pointeur sur données Record
TMyRec = Record
  FName: string// Prénom
  LName: string; // Nom
  FDate: TDate; // Date de naissance
end;

//  Inscription des données dans TCombobox
procedure TForm1.Button1Click(Sender: TObject);
var
  MyRecPtr: PMyRec;
begin
  New(MyRecPtr); //  Nouveau pointeur sur données
  MyRecPtr^.FName : = Edit1.Text; //  Mise à jour des données
  MyRecPtr^.LName : = Edit2.Text;
  MyRecPtr^.FDate := DateTimePicker1.Date;
//  Enregistrement dans  Combobox.Items.Object sous le nom LName
  Combobox1.Items.AddObject(Edit2.Text, TObject(MyRecPtr));
end ;

//  Lecture des données depuis TCombobox
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  Edit1.Text : = PMyRec(Combobox1.Items.Objects[ComboBox1.ItemIndex])^.FName;
  Edit2.Text := PMyRec(Combobox1.Items.Objects[ComboBox1.ItemIndex])^.LName;
  DateTimePicker1.date := PMyRec(Combobox1.Items.Objects[ComboBox1.ItemIndex])^.FDate;
end ;

Tu remplis comme suit :

Edit1 pour le Prénom
Edit2 pour le Nom
DateTimePicker1 pour la date de naissance
puis tu cliques sur le button1 pour enregistrer les données dans le ComboBox1

tu répètes l'opérations deux fois au moins pour pouvoir tester

et ensuite tu cliques sur l'item de ton choix dans le ComboBox1 pour voir les données s'afficher dans les TEdit et le TDateTimePicker

voilà bonne nuit ...

 
@+
Cirec

<hr size ="2" />
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
16
La prière de Ibrahim a été exhaussée avec brio.

Merci pour cette leçon, Cirec.
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Certes, mon cher Caribensila, la prière de IBrahim est exaucuée mais j'ai bien peur qu'un cauchemar soit en train de naitre !
En effet, dans la solution proposée par Cirec, quid de la libération de mémoire ?

Voici une approche orientée objet et facilitant cette libération des objets créés :

unit Unit1;

interface

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

type
  TForm1 =   class (TForm)
    edFirstName: TEdit;
    edLastName: TEdit;
    btnAdd: TButton;
    cbxUserData: TComboBox;
    dtpBirthDate: TDateTimePicker;
    procedure btnAddClick(Sender: TObject);
    procedure cbxUserDataChange(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
type
  {Déclaration d'un classe "helper" facilitant
  la mémorisation des données dasn la liste déroulante}
  TUserData  = class
  public
    Firstname: string;
    LastName: string;
    BirthDate: TDate;
  end;

procedure TForm1.btnAddClick(Sender: TObject);
var
  UserData: TUserData;
begin
  //Création d'un objet TUserData
  UserData :=  TUserData.Create;
  {On renseigne ses champs avec les valeurs saisies à l'écran}
  UserData.Firstname := edFirstName.Text;
  UserData.LastName := edLastName.Text;
  UserData.BirthDate := dtpBirthDate.Date;
  {Ajout de l'objet à la liste}
  cbxUserData.Items.AddObject(edLastName.Text, UserData);
  {L'item actif de la liste est celui qu'on vient d'ajouter}
  cbxUserData.ItemIndex := cbxUserData.Items.Count - 1;
 end ;

procedure TForm1.cbxUserDataChange(Sender: TObject);
var
  UserData: TUserData;
begin
  {On s'assure d'abord qu'un élément est sélectionné !}
  if cbxUserData.ItemIndex <> -1then
  begin
    {On récupère l'élément TUserData actuellement sélectionné}
    UserData : = cbxUserData.Items.Objects[cbxUserData.ItemIndex] as TUserData;
    {On affiche les valeurs de l'élément TUserData actuellement sélectionné}
    edFirstName.Text :=  UserData.Firstname;
    edLastName.Text := UserData.LastName;
    dtpBirthDate.Date := UserData.BirthDate;
   end ;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
  i: integer;
begin
  {NE PAS OUBLIER de libérer les objets pointés par la liste !!!
  Ici, on détruit du dernier au premier :}
  for i : = cbxUserData.Items.Count - 1 downto 0 do
     cbxUserData.Items.Objects[i].Free;

end;

end.

C'est un peu plus propre.
Comme Ibrahim a dit qu'il était débutant, mieux vaut, à mon avis, ne pas l'orienter vers l'usage des pointeurs dès maintenant.

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
3825
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 février 2021
42
Bon alors si on se met a donner des codes complet ... lol

je n'ai jamais dit que le code que j'ai donné était complet mais vu les déclarations de Delphiprog ... je me sens obligé

mais d'un autre coté quand je donne un code complet on me dit que je ne devrais pas ... je suis trop gentil ... il faut qu'ils cherchent par eux même ...

Enfin ... voici le code :

Type
PMyRec = ^TMyRec;
TMyRec = record
  FName: string;
  LName: string;
  FDate: TDate;
end;

Var MonTab : Array Of PMyRec; // Déclaration supplémentaire

procedure TForm1.Button2Click(Sender: TObject);
var
  MyRecPtr: PMyRec;
begin
  New(MyRecPtr);
  MyRecPtr^.FName : = Edit1.Text;
  MyRecPtr^.LName := Edit2.Text;
  MyRecPtr^.FDate := DateTimePicker1.Date;
  SetLength(MonTab, Combobox1.Items.Count +1); // Déclaration supplémentaire
  MonTab[High(MonTab)] : = MyRecPtr; // Déclaration supplémentaire
  Combobox1.Items.AddObject(Edit1.Text, TObject(MonTab[High(MonTab)]));
end ;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  Edit1.Text : = PMyRec(Combobox1.Items.Objects[ComboBox1.ItemIndex])^.FName;
  Edit2.Text := PMyRec(Combobox1.Items.Objects[ComboBox1.ItemIndex])^.LName;
  DateTimePicker1.date := PMyRec(Combobox1.Items.Objects[ComboBox1.ItemIndex])^.FDate;
end ;

//  Et pour finir la libération des prisonniers ... euh ... des pointeurs
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var I : Integer;
begin
  For I : = 0 To ComboBox1.Items.Count - 1 Do
   Dispose(PMyRec(Combobox1.Items.Objects[I]));
  Finalize(MonTab);
end;

Voilà j'ai fait le ménage ...
Maintenent c'est propre !!!   non ?

 
@+
Cirec

Messages postés
3825
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 février 2021
42
Bon en fait j'ai posté un peut trop vite.

Voici la source sans code inutile :

Type
PMyRec = ^TMyRec;
TMyRec = record
  FName: string;
  LName: string;
  FDate: TDate;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  MyRecPtr: PMyRec;
begin
  New(MyRecPtr);
  MyRecPtr^.FName : = Edit1.Text;
  MyRecPtr^.LName := Edit2.Text;
  MyRecPtr^.FDate := DateTimePicker1.Date;
  Combobox1.Items.AddObject(Edit1.Text, TObject(MyRecPtr));
end ;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  Edit1.Text : = PMyRec(Combobox1.Items.Objects[ComboBox1.ItemIndex])^.FName;
  Edit2.Text := PMyRec(Combobox1.Items.Objects[ComboBox1.ItemIndex])^.LName;
  DateTimePicker1.date := PMyRec(Combobox1.Items.Objects[ComboBox1.ItemIndex])^.FDate;
end ;

// en fait c'est la seul chose qui change avec le code de mon premier message
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var I : Integer;
begin
  For I : = 0 To ComboBox1.Items.Count - 1 Do
   Dispose(PMyRec(Combobox1.Items.Objects[I]));
end;

 
@+
Cirec

Messages postés
1725
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
11 avril 2021
8
Bonjour,

C'est vrai, il y a souvent plus de codes utiles, intéressants et... consistants sur
le forum que dans la section des codes sources...

Comme je suis un peu hors-sujet, j'ouvre un topic, à +

japee
Messages postés
3825
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 février 2021
42
@ Delphiprog
oui il est vrai que les pointeurs ne sont plus utilisables sous .Net ...
mais je pense pouvoir affirmer qu'il développe pour Win32 vu le titre donné a sa question :
"utilisation avancée du composant combobox sur delphi 5 "

@ Japee
je suis entièrement d'accord avec toi sur la présence de codes plus consistants sur le forum que dans les codes sources.

Et a ce propos il serait peut être intéressant de pouvoir mettre dans ses favoris (sur CS) des liens qui pointes sur des questions du forum afin de pouvoir retrouver facilement ces perles.

 
@+
Cirec

Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
16
"Dans le cas présent et vu qu'ibrahimakhalil est débutant,
 autant lui indiquer les bonnes façons de faire." a dit Delphiprog.
...Et les bonnes manières. Ca ne lui ferait que du bien pour son avenir, et y'a un manque certain.


T'en fais pas, Cirec! T'as tout notre respect.
L'important, c'est plus les réponses intelligentes que les questions...
Messages postés
3825
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 février 2021
42
Oui il y a manque certain et même un certain manque ...
Il est vrai que le plus important sont les réponses mais c'est quand même frustrant de voir que le principal intéressé ne prend même pas la peine de se manifester !

En tous cas, merci pour ton soutien, j'en avais bien besoin
Je suis assez remonté ce soir ...
Eh oui ... ça m'arrive aussi
 
@+
Cirec

Messages postés
1725
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
11 avril 2021
8
Haut les coeurs, Cirec !

Je fais partie de ceux qui apprécient la compétence, la patience et la courtoisie qui caractérisent ta participation à la vie de notre communauté.
Si si, et je le dis haut et fort.

Merci à toi !

Et faut pas mollir, mec

A+

japee
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
16
Moi, je comprends Cirec.
 Encore une BDD pourrie en perspective, je crois.
"priere de bien vouloir m'aider"  ressemble fort à une injonction.
 J'aimerais bien savoir ce que ce mec est prêt à faire pour notre communauté, moi.
En tout cas, il ne semble pas avoir la moindre envie ni la moindre compétence pour le faire.
Moi, je comprends Cirec.
Messages postés
3825
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 février 2021
42
   

C'est moi qui vous dis

Grâce a vous je me sens a nouveau gonflé a bloc 

 
@+
Cirec

Messages postés
3825
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 février 2021
42
Merci d'avoir répondu...

puisque tu as accepté ta propre réponse,

pourrais tu nous dire quelle méthode tu as choisi

Merci
 
@+
Cirec

Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Euh...c'est moi qui ai accepté sa réponse pour bien marquer que nous l'excusions de son retard. J'aurais dû le préciser, c'est vrai.
Mes excuses les plus plates mon cher Cirec

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
16
Et, pour ma part, toutes mes excuses à Ibrahim.
( Y'a des fois où on voudrait bien pouvoir retirer ses posts... )
Mais ce qui est écrit est écrit. Et c'est à moi d'apprendre les bonnes manières.


En tout cas, ta question a profité à beaucoup de personnes. Merci à Cirec et Delphiprog qui n'ont pas perdu leur temps.

Bon courage à notre ami de Conakry!
Messages postés
28
Date d'inscription
samedi 29 avril 2006
Statut
Membre
Dernière intervention
11 mars 2011

En fin j'ai utiliser un tstringGrid mais en me servant des instructions
données, mais à ce niveau je ne parviens jusqu'à présent me maîtriser
ce composant pour entrer,modifier supprimer etc,..., des données comme
dans un agenda ou dans un repertoire.
Messages postés
28
Date d'inscription
samedi 29 avril 2006
Statut
Membre
Dernière intervention
11 mars 2011

j'ai envie de gerer les notes des étudiants d'un departement, classer
les admis par order de merite et generer automatiquement le relevé et
l'attestation, le certificat ou le diplome selon le cas précis pour
chaque étudiant
Messages postés
16
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
8 mars 2010
1
Bonjour.
J'ai testé les deux méthodes proposées, par pointeurs et par object. Dans les deux cas ne remonte sur combobox que "edLastName.Text" alors qu'il y a que deux informations "Nom" et "Prénom" saisies, la troisième "date de naissance" étant piquée du "DateTimePicker1".
Dans ce cas quel est l'intérêt d'avoir trois informations et de n'en récupérer qu'une dans le combobox?
Merci de m'éclairer.
Cordialement à tous.
K.BELDJEBEL.