Problème d'homonymie des fonctions delphi et api windows

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 638 fois - Téléchargée 26 fois

Contenu du snippet

Il peut arriver qu'une fonction Delphi et qu'une fonction API Windows portent le même nom (avec cependant généralement des paramètres différents).
Un exemple simple nous est fourni par la procédure BEEP.
En Delphi, on écrit simplement BEEP, mais Windows définit une autre procédure BEEP comportant 2 paramètres.

EXEMPLE 1 (correct):
uses
Windows, Messages, SysUtils...
...
procedure TForm1.Button1Click(Sender: TObject);
begin
beep;
end;

EXEMPLE 2 (=> erreur de compilation):
uses
Windows, Messages, SysUtils...
...
procedure TForm1.Button1Click(Sender: TObject);
begin
beep(440,100);
end;

Le problème provient du fait que dans la clause uses, les 1ères définitions sont masquées par celles écrites après. Une solution serait d'inverser les définitions "Windows" et "SysUtils" dans uses, comme ci-dessous:

uses
SysUtils, Windows, Messages...
...
procedure TForm1.Button1Click(Sender: TObject);
begin
beep(440,100);
end;

Mais il existe une solution très simple et beaucoup plus sûre qui évite de s'occuper de l'ordre des occurrences de uses. Selon que vous voulez utiliser la procédure sous Delphi ou Windows, vous écrirez:

procedure TForm1.Button1Click(Sender: TObject);
begin
SysUtils.beep; {pour Delphi}
end;

OU

procedure TForm1.Button1Click(Sender: TObject);
begin
Windows.beep(440,100); {pour Windows}
end;

Conclusion :


Je ne sais pas s'il y a beaucoup de téléscopages de ce genre dans Delphi. Mais il y en a!

A voir également

Ajouter un commentaire Commentaire
Messages postés
4
Date d'inscription
jeudi 18 mars 2010
Statut
Membre
Dernière intervention
14 février 2017

bonjour tous le monde
je travail actuellement sous un programme un peu compliqué et je cherche a récuperer les resultats des procédures et fonctions sous pascal , et je veux recuperer le resultat des procedures et ces fonction par un composant label.caption, je ne sais pas comment faire appel a ces procedure et ces fonction en utilisons des composants de la VCL. SVP, si vous avez des reponse aidez-moi,
merci

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.