ce code montre comment afficher la list d'un énumérateur de type genre MyEnum=(Enum1,Enum2) ect... ou de rechercher son Index depuis le nom d'énumérateur compris dans la list, dans nôtre cas si il n'existe pas l'index retourné aura la valeur -1
Source / Exemple :
unit Unit1;
interface
////////////////////////////////////////////////////////////////////////////////
// Author: Shining Freeman //
// Date : 08/05/03 //
////////////////////////////////////////////////////////////////////////////////
// Deux Fonctions très Simple //
// pour lire les Noms des énumérations ou avoir leur Index //
////////////////////////////////////////////////////////////////////////////////
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,TypInfo;
type
MyEnumComPort=(Com1,Com2,Com3,Com4,Options,Quit);// enumération , mettez ce que vous voulez
TForm1 = class(TForm)
Cb1: TComboBox;
Label1: TLabel;
Button1: TButton;
txtSearch: TEdit;
Label2: TLabel;
procedure Cb1DropDown(Sender: TObject);
procedure Cb1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
function EnumToStr (EnumTypeInfo: PTypeInfo; EnumIndex: Integer): String; //renvoie le nom de l'énumération spécifié par l'index
function StrEnumToIndex (EnumTypeInfo: PTypeInfo; ValueName: String; Min,Max: Integer) : Integer;//renvoie l'index de l'énumération spécifié par le Nom, Nota Min & Max représente la valeur Low et High de l'énumérateur, si il n'existe pas alors Index aura la valeur -1
public
{ Déclarations publiques }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
function TForm1.EnumToStr(EnumTypeInfo: PTypeInfo; EnumIndex: Integer): String;
begin
Result:=GetEnumName(EnumTypeInfo,EnumIndex);
end;
procedure TForm1.Cb1DropDown(Sender: TObject);
var
i:integer;
begin
Cb1.Clear;//efface tout les items
for i:=Ord(Low(MyEnumComPort)) to Ord(High(MyEnumComport)) do
Cb1.Items.Add(EnumToStr(TypeInfo(MyEnumComPort),i));
end;
procedure TForm1.Cb1Click(Sender: TObject);
begin
if SameText(Cb1.Items.Strings[Cb1.itemIndex],'Quit')
then
begin
if (MessageDlg('êtes vous sur de vouloir Quitter cette Application ??',mtConfirmation,[mbYes,mbNo],0)=mrYes) Then
Application.Terminate;
end
else
MessageDlg('Vous venez de Cliquez sur ' + Cb1.Items.Strings[Cb1.itemIndex],mtInformation,[mbOk],0)
end;
function TForm1.StrEnumToIndex(EnumTypeInfo: PTypeInfo; ValueName: String; Min,Max: Integer): Integer;
var
i,j:integer;
begin
j:=-1;// ValueName pas trouvé, par défaut
For i:=Min To Max do
if SameText(ValueName,EnumToStr(EnumTypeInfo,i)) Then
begin
J:=i;// oui ValueName Trouvé alors J vaut la valeur de son index
Break;
end;
result:=J;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Index:Integer;
begin
Index:=-1;
if TxtSearch.Text<>'' Then
Index:=StrEnumToIndex(TypeInfo(MyEnumComPort),Trim(TxtSearch.Text),Ord(Low(MyEnumComPort)),Ord(High(MyEnumComPort)));
if Index >-1 Then
begin
Cb1DropDown(Self);// Affichage la liste
Cb1.ItemIndex:=Index;
MessageDLG(TxtSearch.Text +' à été trouvé a l''index['+IntToStr(Index)+' :)',mtInformation,[mbOk],0);
end
else
MessageDLG('Désoler mais '+TxtSearch.Text +' n''éxiste pas sur la liste :(',mtWarning,[mbOk],0);
end;
end.
Conclusion :
il faut incure TypInfo dans la clause Uses.
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.