JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 201014 23 janv. 2005 à 16:13
Oups, aucune unité =), voici ces fonctions utiles :
----------------------------------------------------------------------
Interface
{ Immediate If }
{ IIF renvoyant un entier }
function IIF(ACondition: boolean; ATruePart, AFalsePart: integer): integer; overload;
{ IIF renvoyant un extended }
function IIF(ACondition: boolean; ATruePart, AFalsePart: Extended): Extended; overload;
{ IIF renvoyant une string }
function IIF(ACondition: boolean; ATruePart, AFalsePart: string): string; overload;
{ IIF renvoyant un objet }
function IIF(ACondition: boolean; ATruePart, AFalsePart: TObject): TObject; overload;
Implémentation
function IIF(ACondition: boolean; ATruePart, AFalsePart: integer): integer;
{ Immediate IF pour les entiers }
begin
if ACondition then
Result := ATruePart else
Result := AFalsePart;
end;
function IIF(ACondition: boolean; ATruePart, AFalsePart: Extended): Extended;
{ Immediate IF pour les flottant }
begin
if ACondition then
Result := ATruePart else
Result := AFalsePart;
end;
function IIF(ACondition: boolean; ATruePart, AFalsePart: string): string;
{ Immediate IF pour les chaînes }
begin
if ACondition then
Result := ATruePart else
Result := AFalsePart;
end;
function IIF(ACondition: boolean; ATruePart, AFalsePart: TObject): TObject;
{ Immediate IF pour les objets }
begin
if ACondition then
Result := ATruePart else
Result := AFalsePart;
end;
Utilisation des fonctions:
procedure TMyObject.TestIIF;
var idx: integer;
MyString: String;
begin
idx := 10; { Par exemple }
MyString := IIF(idx=0,'Zero','Différent de Zero');
end;
est équivalent à
procedure TMyObject.TestIIF;
var idx: integer;
MyString: String;
begin
idx := 10; { Par exemple }
if idx=0 then MyString = 'Zero' else MyString = 'Différent de Zéro';
end;
Merci delphi.developpez.com =)
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 200622 23 janv. 2005 à 14:35
function IFF(Value:boolean; Fls, Tre : #TYPE#):#TYPE#;
begin
if Value then IFF:=Tre
else IFF:=Fls;
end;
#TYPE# est une déclinaison: remplacer par integer pour renvoyer des entiers, string pour des chaînes... Ainsi, voici un exemple avec les booleans:
function IFF_bool(Value:boolean; Fls, Tre : boolean):boolean;
begin
if Value then IFF_bool:=Tre
else IFF_bool:=Fls;
end;
cs_pepitto
Messages postés22Date d'inscriptionjeudi 13 novembre 2003StatutMembreDernière intervention25 juin 2008 23 janv. 2005 à 14:27
Merci "JulioDelphi" pour c'est remarque je vais en profiter pour optimiser le code
Par contre la fonction << IIF >> n'est pas reconnue par ma version de delphi, Quelle est l'unité qui le contient merci
Frostizz
Messages postés39Date d'inscriptionjeudi 30 août 2001StatutMembreDernière intervention23 janvier 2005 23 janv. 2005 à 12:05
Qualitée logiciel oblige !
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 201014 22 janv. 2005 à 21:59
Hello,
quelques petites remarques constructives de correction/optimisation de code :
1) Eviter ça :
H := ''; U := ''; P := '';
L1.Caption := H; L2.Caption := U;
L1.Visible := True; L2.Visible := True;
c'est pas lisible, vaut mieux ecrire 7 lignes, l'exe n'en sera pas plus gras.
2) je te propose la fonction Format() pour ça :
- if reg.ValueExists('H' + inttostr(M)) then H := Reg.ReadString('H' + inttostr(M));
qui donne ça :
- if reg.ValuesExists(format('H%d',[M])) then H := Reg.ReadString(format('H%d',[M]));
et aussi ça :
- Messag.Caption := inttostr(Nb_Mail) + 'Messages';
qui donne ça :
- Messag.Caption := Format('%d messages',[NB_MAIL]);
>> avec ton code, si NB_MAIL vaut "3", alors j'obtiendrais :
"3Messages" avec MAJUSCULE + texte collé !!
et aussi ça qui peut etre combiné avec IIF() :
- if NB_Mail = 1 then Notif.szTip := '1 message'
else begin
H := Inttostr(Nb_Mail) + ' messages';
qui peut donner ça :
- H :iif(NB_Mail 1,'1 message',format('%d messages',[NB_Mail]));
3) NOMME TES COMPOS ! je vois des timer1, timer2, timer3 je ne sais pas a quoi ils servent !! je devrais en avoir un petite idée grâce a son nom !
4) Notif.szTip := '0 Messages'; pas de "S" puisque "0" !
4bis) "Voullez" avec un seul L
5) A quoi sert le timer3 qui ne fonctionne qu'une seule fois 1/2 seconde apres le lancement de l'appli ? pourquoi ne pas déclarer une procedure tout simplement ! et si tu veux attendre 500ms, mets un sleep(500) ... mais bon explique moi
6) Il y a moyen de jouer avec les sender (en case ... of) pour les Moins1, plus2, plus1 etc
Infos sur les IIF :
{ Immediate If }
{ IIF renvoyant un entier }
function IIF(ACondition: boolean; ATruePart, AFalsePart: integer): integer; overload;
{ IIF renvoyant un extended }
function IIF(ACondition: boolean; ATruePart, AFalsePart: Extended): Extended; overload;
{ IIF renvoyant une string }
function IIF(ACondition: boolean; ATruePart, AFalsePart: string): string; overload;
{ IIF renvoyant un objet }
function IIF(ACondition: boolean; ATruePart, AFalsePart: TObject): TObject; overload;
Infos sur format :
%d = Decimal (integer)
%e = Scientific
%f = Fixed
%g = General
%m = Money
%n = Number (floating)
%p = Pointer
%s = String
%u = Unsigned decimal
%x = Hexadecimal
Je n'ai pas encore compilé la source, mais a part ces détails, je trouve le code bien fait ! je regarderais un peu plus ce soir ou demain. voila pour ma premiere contribution a ta source ! Bienvenue sur C-S !
23 janv. 2005 à 16:13
----------------------------------------------------------------------
Interface
{ Immediate If }
{ IIF renvoyant un entier }
function IIF(ACondition: boolean; ATruePart, AFalsePart: integer): integer; overload;
{ IIF renvoyant un extended }
function IIF(ACondition: boolean; ATruePart, AFalsePart: Extended): Extended; overload;
{ IIF renvoyant une string }
function IIF(ACondition: boolean; ATruePart, AFalsePart: string): string; overload;
{ IIF renvoyant un objet }
function IIF(ACondition: boolean; ATruePart, AFalsePart: TObject): TObject; overload;
Implémentation
function IIF(ACondition: boolean; ATruePart, AFalsePart: integer): integer;
{ Immediate IF pour les entiers }
begin
if ACondition then
Result := ATruePart else
Result := AFalsePart;
end;
function IIF(ACondition: boolean; ATruePart, AFalsePart: Extended): Extended;
{ Immediate IF pour les flottant }
begin
if ACondition then
Result := ATruePart else
Result := AFalsePart;
end;
function IIF(ACondition: boolean; ATruePart, AFalsePart: string): string;
{ Immediate IF pour les chaînes }
begin
if ACondition then
Result := ATruePart else
Result := AFalsePart;
end;
function IIF(ACondition: boolean; ATruePart, AFalsePart: TObject): TObject;
{ Immediate IF pour les objets }
begin
if ACondition then
Result := ATruePart else
Result := AFalsePart;
end;
Utilisation des fonctions:
procedure TMyObject.TestIIF;
var idx: integer;
MyString: String;
begin
idx := 10; { Par exemple }
MyString := IIF(idx=0,'Zero','Différent de Zero');
end;
est équivalent à
procedure TMyObject.TestIIF;
var idx: integer;
MyString: String;
begin
idx := 10; { Par exemple }
if idx=0 then MyString = 'Zero' else MyString = 'Différent de Zéro';
end;
Merci delphi.developpez.com =)
23 janv. 2005 à 14:35
begin
if Value then IFF:=Tre
else IFF:=Fls;
end;
#TYPE# est une déclinaison: remplacer par integer pour renvoyer des entiers, string pour des chaînes... Ainsi, voici un exemple avec les booleans:
function IFF_bool(Value:boolean; Fls, Tre : boolean):boolean;
begin
if Value then IFF_bool:=Tre
else IFF_bool:=Fls;
end;
23 janv. 2005 à 14:27
Par contre la fonction << IIF >> n'est pas reconnue par ma version de delphi, Quelle est l'unité qui le contient merci
23 janv. 2005 à 12:05
22 janv. 2005 à 21:59
quelques petites remarques constructives de correction/optimisation de code :
1) Eviter ça :
H := ''; U := ''; P := '';
L1.Caption := H; L2.Caption := U;
L1.Visible := True; L2.Visible := True;
c'est pas lisible, vaut mieux ecrire 7 lignes, l'exe n'en sera pas plus gras.
2) je te propose la fonction Format() pour ça :
- if reg.ValueExists('H' + inttostr(M)) then H := Reg.ReadString('H' + inttostr(M));
qui donne ça :
- if reg.ValuesExists(format('H%d',[M])) then H := Reg.ReadString(format('H%d',[M]));
et aussi ça :
- Messag.Caption := inttostr(Nb_Mail) + 'Messages';
qui donne ça :
- Messag.Caption := Format('%d messages',[NB_MAIL]);
>> avec ton code, si NB_MAIL vaut "3", alors j'obtiendrais :
"3Messages" avec MAJUSCULE + texte collé !!
et aussi ça qui peut etre combiné avec IIF() :
- if NB_Mail = 1 then Notif.szTip := '1 message'
else begin
H := Inttostr(Nb_Mail) + ' messages';
qui peut donner ça :
- H :iif(NB_Mail 1,'1 message',format('%d messages',[NB_Mail]));
3) NOMME TES COMPOS ! je vois des timer1, timer2, timer3 je ne sais pas a quoi ils servent !! je devrais en avoir un petite idée grâce a son nom !
4) Notif.szTip := '0 Messages'; pas de "S" puisque "0" !
4bis) "Voullez" avec un seul L
5) A quoi sert le timer3 qui ne fonctionne qu'une seule fois 1/2 seconde apres le lancement de l'appli ? pourquoi ne pas déclarer une procedure tout simplement ! et si tu veux attendre 500ms, mets un sleep(500) ... mais bon explique moi
6) Il y a moyen de jouer avec les sender (en case ... of) pour les Moins1, plus2, plus1 etc
Infos sur les IIF :
{ Immediate If }
{ IIF renvoyant un entier }
function IIF(ACondition: boolean; ATruePart, AFalsePart: integer): integer; overload;
{ IIF renvoyant un extended }
function IIF(ACondition: boolean; ATruePart, AFalsePart: Extended): Extended; overload;
{ IIF renvoyant une string }
function IIF(ACondition: boolean; ATruePart, AFalsePart: string): string; overload;
{ IIF renvoyant un objet }
function IIF(ACondition: boolean; ATruePart, AFalsePart: TObject): TObject; overload;
Infos sur format :
%d = Decimal (integer)
%e = Scientific
%f = Fixed
%g = General
%m = Money
%n = Number (floating)
%p = Pointer
%s = String
%u = Unsigned decimal
%x = Hexadecimal
Je n'ai pas encore compilé la source, mais a part ces détails, je trouve le code bien fait ! je regarderais un peu plus ce soir ou demain. voila pour ma premiere contribution a ta source ! Bienvenue sur C-S !