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

cs_ibrahimakhalil 28 Messages postés samedi 29 avril 2006Date d'inscription 11 mars 2011 Dernière intervention - 24 nov. 2006 à 20:55 - Dernière réponse :  BELDJEBEL
- 21 févr. 2010 à 16:01
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
Afficher la suite 

Votre réponse

22 réponses

Meilleure réponse
cs_ibrahimakhalil 28 Messages postés samedi 29 avril 2006Date d'inscription 11 mars 2011 Dernière intervention - 2 déc. 2006 à 20:20
3
Merci
       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

Merci cs_ibrahimakhalil 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de cs_ibrahimakhalil
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 24 nov. 2006 à 21:37
0
Merci
Salut,
un TListView me parait plus approprié vu le nombre d'information que tu dois y stocker !

 
@+
Cirec

Commenter la réponse de Cirec
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 24 nov. 2006 à 22:56
0
Merci
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" />
Commenter la réponse de Cirec
Caribensila 2684 Messages postés jeudi 15 janvier 2004Date d'inscription 26 juillet 2018 Dernière intervention - 25 nov. 2006 à 00:54
0
Merci
La prière de Ibrahim a été exhaussée avec brio.

Merci pour cette leçon, Cirec.
Commenter la réponse de Caribensila
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 25 nov. 2006 à 09:00
0
Merci
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.
Commenter la réponse de cs_Delphiprog
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 25 nov. 2006 à 12:30
0
Merci
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

Commenter la réponse de Cirec
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 25 nov. 2006 à 13:06
0
Merci
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

Commenter la réponse de Cirec
japee 1799 Messages postés vendredi 27 décembre 2002Date d'inscription 19 juillet 2018 Dernière intervention - 25 nov. 2006 à 14:41
0
Merci
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
Commenter la réponse de japee
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 25 nov. 2006 à 14:47
0
Merci
C'est vrai que tu es gentil
Trop ? faut voir...

Dans le cas présent et vu qu'760994 ibrahimakhalil est débutant, autant lui indiquer les bonnes façons de faire.
Nos deux solutions semblent équivalentes en apparence. Mais comme =760994 ibrahimakhalil n'a pas précisé s'il travaillait avec Delphi pour Win32 ou Delphi pour .Net, j'ai préféré assurer avec du code sans pointeurs, ce qui fonctionne dans les deux cas.

Maintenant 760994 ibrahimakhalil, c'est à toi de jouer !

May Delphi be with you !
<hr color ="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Commenter la réponse de cs_Delphiprog
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 25 nov. 2006 à 15:40
0
Merci
@ 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

Commenter la réponse de Cirec
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 27 nov. 2006 à 21:36
0
Merci
Le minimun serait qu'[auteurdetail.aspx?ID= 760994 ibrahimakhalil ] donne son avis sur la chose
si déjà il passe par ici :
Dernier signe de vie : 27/11/2006 20:00:55 surhttp://www.delphifr.com/

par respect pour ceux qui prennent le temps de lui répondre

 
@+
Cirec

<hr size ="2" />
Commenter la réponse de Cirec
Caribensila 2684 Messages postés jeudi 15 janvier 2004Date d'inscription 26 juillet 2018 Dernière intervention - 27 nov. 2006 à 22:57
0
Merci
"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...
Commenter la réponse de Caribensila
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 27 nov. 2006 à 23:29
0
Merci
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

Commenter la réponse de Cirec
japee 1799 Messages postés vendredi 27 décembre 2002Date d'inscription 19 juillet 2018 Dernière intervention - 28 nov. 2006 à 00:18
0
Merci
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
Commenter la réponse de japee
Caribensila 2684 Messages postés jeudi 15 janvier 2004Date d'inscription 26 juillet 2018 Dernière intervention - 28 nov. 2006 à 00:59
0
Merci
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.
Commenter la réponse de Caribensila
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 28 nov. 2006 à 02:11
0
Merci
   

C'est moi qui vous dis

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

 
@+
Cirec

Commenter la réponse de Cirec
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 3 déc. 2006 à 19:16
0
Merci
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

Commenter la réponse de Cirec
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 3 déc. 2006 à 22:02
0
Merci
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.
Commenter la réponse de cs_Delphiprog
Caribensila 2684 Messages postés jeudi 15 janvier 2004Date d'inscription 26 juillet 2018 Dernière intervention - 3 déc. 2006 à 22:25
0
Merci
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!
Commenter la réponse de Caribensila
cs_ibrahimakhalil 28 Messages postés samedi 29 avril 2006Date d'inscription 11 mars 2011 Dernière intervention - 4 déc. 2006 à 16:17
0
Merci
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.
Commenter la réponse de cs_ibrahimakhalil

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.