begin process at 2008 08 29 23:05:03
1 233 931 membres
450 nouveaux aujourd'hui
14 294 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : utilisation avancée du composant combobox sur delphi 5 [ Divers / Débutant(e) ] (ibrahimakhalil)

utilisation avancée du composant combobox sur delphi 5 le 24/11/2006 20:55:56

ibrahimakhalil
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



Re : utilisation avancée du composant combobox sur delphi 5 le 24/11/2006 21:37:05

cirec
Membre Club
(Admin CS)
Salut,

un TListView me parait plus approprié vu le nombre d'information que tu dois y stocker !



 
@+
Cirec


Re : utilisation avancée du composant combobox sur delphi 5 le 24/11/2006 22:56:54

cirec
Membre Club
(Admin CS)
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


Re : utilisation avancée du composant combobox sur delphi 5 le 25/11/2006 00:54:51

Caribensila
Membre Club
La prière de Ibrahim a été exhaussée avec brio.



Merci pour cette leçon, Cirec.

Re : utilisation avancée du composant combobox sur delphi 5 le 25/11/2006 09:00:46

Delphiprog
(Admin CS)
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 !

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.


Re : utilisation avancée du composant combobox sur delphi 5 le 25/11/2006 12:30:32

cirec
Membre Club
(Admin CS)
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


Re : utilisation avancée du composant combobox sur delphi 5 le 25/11/2006 13:06:34

cirec
Membre Club
(Admin CS)
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


Re : utilisation avancée du composant combobox sur delphi 5 le 25/11/2006 14:41:18

japee
Membre Club
(Admin CS)
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

Re : utilisation avancée du composant combobox sur delphi 5 le 25/11/2006 14:47:53

Delphiprog
(Admin CS)
C'est vrai que tu es gentil
Trop ? faut voir...

Dans le cas présent et vu qu'ibrahimakhalil est débutant, autant lui indiquer les bonnes façons de faire.
Nos deux solutions semblent équivalentes en apparence. Mais comme 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 ibrahimakhalil, c'est à toi de jouer !

May Delphi be with you !

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.


Re : utilisation avancée du composant combobox sur delphi 5 le 25/11/2006 15:40:31

cirec
Membre Club
(Admin CS)
@ 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



[Page 1 Page 2 Page 3]
Classé sous : combobox, composant, utilisation, delphi, avancée

Participer à cet échange

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS