[delphi] 40 fonctions utiles classées par thème

[delphi] 40 fonctions utiles classées par thème

Présentation

C'est une liste non exhaustive de près de 40 procédures et fonctions très utiles en Delphi.

Les entiers

IntToStr

function IntToStr(Value:integer):string;

Permet d'afficher un nombre entier dans une chaîne de caractères.

Exemple

uses SysUtils, Dialogs;
begin
  ShowMessage(IntToStr(50));
end.

StrToInt

function StrToInt(Value:string):integer;

Permet de convertir une chaîne de caractères en son nombre entier écrit dedans.

Exemple

uses SysUtils, Dialogs;
begin
  if StrToInt('50')=50 then
    ShowMessage('C''est vrai');
end.

Round

function Round(Value:real):integer;

Permet d'arrondir un nombre flottant de manière à le convertir en nombre entier par l'arrondi le plus proche.

Exemple

uses Dialogs;
begin
  if Round(3.78)=4 then
    ShowMessage('C''est vrai');
end.

Trunc

function Trunc(Value:real):integer;

Permet d'arrondir un nombre flottant de manière à le convertir en nombre entier par troncature.

Exemple

uses Dialogs;
begin
  if Trunc(3.78)=3 then
    ShowMessage('C''est vrai');
end.

Inc

procedure Inc(var Value:integer);

Permet d'incrémenter la valeur d'un entier.

Exemple

uses Dialogs;
var i : integer;
begin
  i:=50;
  inc(i);
  if i=51 then
    ShowMessage('C''est vrai');
end.

REMARQUE : l'utilisation de INC est strictement équivalente à faire i:=i+1;

Dec

procedure Dec(var Value:integer);

Permet de désincrémenter la valeur d'un entier.

Exemple

uses Dialogs;
var i : integer;
begin
  i:=50;
  dec(i);
  if i=49 then
    ShowMessage('C''est vrai');
end.

REMARQUE : l'utilisation de DEC est strictement équivalente à faire i:=i-1;

Random

procedure Random(Value:integer);

Génère un nombre aléatoire compris entre 0 et Value-1.

Exemple

uses Dialogs;
var i : integer;
begin
  //Randomize;
  i:=Random(50);
  if i<50 then
    ShowMessage('C''est toujours vrai');
end.

REMARQUE : l'utilisation de Random doit être précédée d'une initialisation unique (au lancement de votre programme le plus souvent) via la fonction Randomize qui n'a pas de paramétrage

REMARQUE : Pour générer un nombre entre 2 et 10, vous faîtes : i:=Random(10-2+1)+2;

Odd

function Odd(Value:integer):boolean;

Dit si le nombre proposé est impair.

Exemple

uses Dialogs;
begin
  if not Odd(50) then
    ShowMessage('Ce nombre est pair');
end.

Les flottants

FloatToStr

function FloatToStr(Value:real):string;

Permet d'afficher un nombre à virgule dans une chaîne de caractères.

Exemple

uses SysUtils, Dialogs;
var s : string;
begin
  s:=FloatToStr(50.12);
  ShowMessage(s);
end.

REMARQUE : une notation scientifique peut être à prévoir si le nombre est trop grand

StrToFloat

function StrToFloat(Value:string):real;

Permet de convertir une chaîne de caractères en son nombre flottant écrit dedans.

Exemple

uses SysUtils, Dialogs;
var f : real;
begin
  f:=StrToFloat('50,49');
  if f=50.49 then
    ShowMessage('C''est vrai');
end.

Int

function Int(Value:real):real;

Permet de garder la partie entière d'un nombre flottant.

Exemple

uses SysUtils, Dialogs;
var f : real;
begin
  f:=Int(50.49);
  if f=50 then
    ShowMessage('C''est vrai');
end.

REMARQUE : le résultat n'est pas de type entier compte tenu de l'étendue énorme des nombres flottants par rapport aux entiers (même int64 qui ne supporterait pas)

Power

function Power(Base,Exponent:real):real;

Permet de calculer une puissance : Base^Exponent.

Exemple

uses Math;
var f : real;
begin
  f:=Power(2, 1.4);
end.

REMARQUE : Power utilisera diverses fonctions selon que l'exposant est entier, négatif, nul... afin d'éviter l'usage systématique de LN et EXP.

Les chaînes de caractères

Lenght

function Length(Value:string):integer;

Renvoie la longueur de la chaîne.

Exemple

uses SysUtils, Dialogs;
begin
  ShowMessage(IntToStr(Length('Vaut 6')));
end.

Pos

function Pos(SubChain,Chain:string):integer;

Renvoie la position d'une sous-chaîne dans une chaîne.

Exemple

uses Dialogs;
begin
  if Pos('alu','Salut')=2 then
    ShowMessage('C''est vrai');
end.

REMARQUE : si la chaîne n'est pas trouvée dans l'autre, le résultat est 0.

Copy

function Copy(Chain:string; Pos,Len:integer):string;

Extrait une sous-chaîne d'une chaîne.

Exemple

uses Dialogs;
begin
  ShowMessage(Copy('Salut les amis !',11,4)); //='amis'
end.

UpperCase

function UpperCase(Chain:string):string;

Convertit les lettres de l'alphabet en majuscule dans la chaîne considérée.

Exemple

uses Dialogs;
begin
  ShowMessage(UpperCase('Amitié')); //='AMITIé'
end.

LowerCase

function LowerCase(Chain:string):string;

Convertit les lettres de l'alphabet en minuscules dans la chaîne considérée.

Exemple

uses Dialogs;
begin
  ShowMessage(LowerCase('MAJUSCULES')); //='majuscules'
end.

AnsiUpperCase

function AnsiUpperCase(Chain:string):string;

Convertit en majuscule lettres et accents d'une chaîne donnée.

AnsiLowerCase

function AnsiLowerCase(Chain:string):string;

Convertit en minuscules lettres et accents d'une chaîne donnée.

REMARQUE : dans la plupart des cas, les Ansi* sont exagérées pour un simple test de conditions

Les booléens

NOT

NOT

Donne le booléen opposé.

Exemple

var b : boolean;
begin
  b:=false;
  b:=not b;
  if b=true then
    ShowMessage('C''est vrai');
end.

AND

AND

Combine deux booléens de manière à savoir si les deux sont vrais.

Exemple

var b1, b2 : boolean;
begin
  b1:=true;
  b2:=false;
  if b1 and b2 then
    ShowMessage('Vous ne verrez pas ce message');
end.

OR

OR

Combine deux booléens de manière à savoir si au moins l'un des deux est vrai.

Exemple

var b1, b2 : boolean;
begin
  b1:=true;
  b2:=false;
  if b1 or b2 then
    ShowMessage('C''est vrai car b1=true');
end.

XOR

XOR

Combine deux booléens de manière à savoir si l'un des deux seulement est vrai.

Exemple

var b1, b2 : boolean;
begin
  b1:=true;
  b2:=false;
  if b1 xor b2 then
    ShowMessage('C''est vrai: b1=true');
  if b1 xor (not b2) then
    ShowMessage('Vous ne verrez pas ce message.');
end.

Les fichiers

FileExists

function FileExists(LongName:string):boolean;

Dit si un fichier existe.

Exemple

uses Dialogs;
begin
  if FileExists('c:autoexec.bat') then
    ShowMessage('Vous ne verrez pas ce message.');
end.

REMARQUE : pour savoir si le fichier existe, la fonction tente un accès brutal sur le fichier de manière à savoir si un code erreur est retourné (ce qui signifierait que le fichier n'existe pas)

DirectoryExists

function DirectoryExists(LongName:string):boolean;

Dit si un fichier existe.

Exemple

uses Dialogs, FileCtrl;
begin
  if not DirectoryExists('c:winnt') then
    ShowMessage('Windows NT se cache...');
end.

procedure ChDir

procedure ChDir(Dir:string);

Change le répertoire actuellement ouvert par le système de fichier.

Exemple

begin
  {$I-} ChDir('c:Mes documents'); {$I+}
end.

REMARQUE : si le dossier n'existe pas, une exception EInOutError est déclenchée. En désactivant la directive $I, puis en la réactivant (sa valeur par défaut en fait), on évite le message d'erreur. On pourrait gérer un évènement TRY EXCEPT, ou même tester l'existence du dossier, mais en général, on se sert de cette fonction pour se loger dans les répertoires système ou dans le dossier où se trouve l'application (ce qui ne crée jamais d'erreurs, aux imperfections près)

REMARQUE : le changement de dossier permet d'éviter d'avoir à fournir des noms de fichiers complets commençant par c:\ par exemple

REMARQUE : au lancement de l'application, le répertoire ouvert est celui où se trouve l'application

ExtractFilePath

function ExtractFilePath(FileName:string):string;

Extrait le dossier du fichier donné, avec délimitateur "\" de fin.

Exemple

uses Dialogs;
begin
  ShowMessage(ExtractFilePath('c:dossierfichier.txt')); //= 'c:dossier'
end.

ExtractFileDir

function ExtractFileDir(FileName:string):string;

Extrait le dossier du fichier donné, sans délimitateur "\" de fin.

Exemple

uses Dialogs;
begin
  ShowMessage(ExtractFileDir('c:dossierfichier.txt')); //= 'c:dossier'
end.

REMARQUE : cette fonction doit être bannie car elle apporte des confusions sur les fichiers situés à la racine du disque dûr, dossier étant nécessairement du type "x:\". Des erreurs de programmation systématiques provoquent des résultats du type "c:\\dossier\fichier.txt" avec une double barre oblique au début, car manuellement, on rajoute des "\" avant de concaténer le nom du fichier.

ExtractFileName

function ExtractFileName(FileName:string):string;

Enlève le dossier du nom de fichier.

Exemple

uses Dialogs;
begin
  ShowMessage(ExtractFileName('c:dossierfichier.txt')); //= 'fichier.txt'
end.

ExtractFileExt

function ExtractFileExt(FileName:string):string;

Extrait l'extension du fichier donné.

Exemple

uses Dialogs;
begin
  ShowMessage(ExtractFileExt('c:dossierfichier.txt')); //= '.txt'
end.

ChangeFileExt

function ChangeFileExt(FileName,Extension:string):string;

Change l'extension du fichier donné.

Exemple

uses Dialogs;
var s : string;
begin
  s:='c:dossierfichier.txt';
  s:=ChangeFileExt(s,'dat');
  ShowMessage(s); //= 'c:dossierfichier.dat'
end.

Diverses

procedure AssignFile(var F:file; FileName:string);

Assigne un fichier à une variable de gestion.

procedure Reset;

Ouvre le fichier en lecture seule.

procedure Rewrite;

Ouvre le fichier en écriture et écrase tout le contenu du fichier.

procedure Read(var F:file; var Buffer);

Lit une quantité de donnée et la stocke dans Buffer. La quantité lue dépend de la capacité de la variable passée en paramètre.

procedure ReadLn(var F:file; var Buffer);

Lit une ligne complète dans fichier texte et ne garde pas le retour chariot final. Passez un string comme Buffer.

function Eof(var F:file):boolean;

Dit si on est arrivé à la fin du fichier (en mode lecture).

procedure Write(var F:file; var Buffer);

Ecrit le Buffer dans le fichier en fin de fichier.

procedure WriteLn(var F:file; var Buffer);

Ecrit le Buffer dans le fichier en fin de fichier et rajoute un retour chariot (CrLf).

procedure CloseFile(var F:file);

Ferme le fichier ouvert.

Exemple

{$APPTYPE Console}
var Fic : textfile;
    s : string;
begin
  AssignFile(Fic,'c:autoexec.bat');
  try
    Reset; //ne pas mettre Rewrite pour Autoexec.bat !!
    repeat
      ReadLn(Fic,s);
      WriteLn(s); //sans Fic, tout se joue dans la console, activée par $APPTYPE
    until Eof(Fic);
  finally
    CloseFile(Fic);
  end;
end;

D'autres fonctions utiles

function ParamStr(Index:integer):string;

Récupère la ligne de commande et le paramétrage de l'application.

INDEX CONTENU
0 Nom complet de l'application
1 Paramétrage usuel : fichiers assignés avec "Ouvrir avec", configuration des raccourcis "fichier.exe -nocheck"
2..infini Paramétrage complémentaire souvent inutilisé. Tout dépend si vous utilisez %2 ou %1 dans les commandes de Explorer.exe

Tanguy ALTERT, http://altert.family.free.fr/

A voir également
Ce document intitulé « [delphi] 40 fonctions utiles classées par thème » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
24 Commentaires