Aide Mémoire Delphi
Introduction
Cette page à pour but de rappeler quelques Trucs de
programmation en Delphi.
Astuces
- Paramètre Sender: Comment Utiliser une seule
procedure OnClick pour plusieurs
Boutons. Exemple
1
- Remplir rapidement les champs .text ou .caption de nombreux
contrôles d'un formulaire. Exemple
2
- Contrôle Twebbrowser.Exemple 3
Ces exemples sont fait à partir de Delphi turbo Explorer
mais la plupart fonctionnent dans les autres versions de Delphi.
Exemple
1:
Paramètre
Sender: Comment Utiliser une seule
procédure OnClick pour plusieurs
Boutons.
Creéez une nouvelle Fiche
Form1,
sur laquelle on pose 3 boutons
(
button1,
button2,
button3)
. Dans Tform1,
déclarez une
procédure
BoutonClick
(Sender: Tobject) et implémentez cette
procédure dans la partie implémentation (on peut utiliser
les
touches ctrl+shift+c )
voir Code ci-dessous
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure BoutonClick(Sender : Tobject);
private
{ Déclarations
privées }
public
{ Déclarations publiques }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.BoutonClick(Sender: Tobject);
begin
if Sender=Button1 then showmessage('Vous avez
cliqué sur
le 1er Bouton') else showmessage('Vous n''avez pas cliqué
sur le
1er bouton');
showmessage('Vous avez cliqué sur ' +
TButton(Sender).Caption + ' Objet de Classe '+Sender.ClassName);
end;
end.
Si vous copiez collez ce texte, à l'exécution les boutons ne
fonctionnent pas, il faut donc pour chaque
bouton paramétrer
l'évènement OnClick.
Pour chaque boutons du formulaire: sélectionnez le,
et dans
l'inspecteur d'objets, sur l'évènement OnClick, a
l'aide de
la zone de liste choisissez la procédure BoutonClick; les 3
boutons visent donc la procédure BoutonClick (3
boutons, 1
procédure).
Explications
Le paramètre
Sender
Contient l'objet appelant la procédure , on peut
donc tester sender pour connaître l'objet appelant avec un
"if
sender=Objet"
Par contre, pour atteindre les propriétés, méthodes de
l'objet ,
il est nécessaire de transtyper Sender "Ici
Tbutton(Sender)"
avec le type de
l'objet attendu, si le type de l'objet n'est pas connu on peut le
récupérer avec
Sender.ClassName.
Ajoutez un Champ
Tedit dans
la Form1 et dans l'événement OnClick du
champ choisissez la procédure
BoutonClick.
Modifiez la procédure comme ceci.
procedure TForm1.BoutonClick(Sender: Tobject);
begin
if Sender.ClassName='TEdit' then Tedit(Sender).Text:='Felix';
if (Sender.ClassName='TButton')and (Sender=Button1) then
showmessage('Vous avez cliqué sur le 1er Bouton') else
showmessage('Vous n''avez pas cliqué sur le 1er bouton');
showmessage('Vous avez cliqué sur ' +
TButton(Sender).Caption + ' Objet de Classe '+Sender.ClassName);
end;
On teste le type d'objet envoyé et on peut agir en
conséquence avec le bon transtypage ici TEdit() et TButton();
Attention à l'orthographe (Majuscules, Minuscules) dans les
test de Sender.classname.
Exemple 2:
Remplir rapidement les
champs .text ou .caption de nombreux
contrôles d'un formulaire.
Créez une nouvelle Fiche
Form1,
sur laquelle on pose 3 champ TEdit
(
Titi,
Tata,
Toto), un
bouton
Button1
. Complétez le code de Unit1 comme ci-dessous.
En mode conception, double cliquez sur le bouton de manière
à remplir l'évenement
OnClick sur la
procédure
Button1click
et double-cliquez dans une partie grise du formulaire afin de remplir
l'évènement
OnCreate
du formulaire sur la procédure
FormCreate;
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Titi: TEdit;
Tata: TEdit;
Toto: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
var
Form1: TForm1;
Mo:TList;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
Tab: Array[0..2] of String;
begin
for i:=0 to 2 do Tab[i]:='Mon Edit'+ intTostr(i);
For i:=0 to Mo.Count-1 do Tedit(Mo.Items[i]).Text:=Tab[i];
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Mo:=TList.Create;
Mo.Add(Titi);
Mo.Add(Tata);
Mo.Add(Toto);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Mo.Free;
end;
end.
Si vous lancez le programme et cliquez sur le bouton, vous remplissez
les 3 champs en une ligne de code,
On utilise pour cela une liste d'objets (ici la liste Mo.)
personalisée avec les composants qui nous intéressent et
avec le
transtypage
TEdit()
et les items de
Mo,
on peut remplir les zones texte des champs.
Ceci est intérressant si vous avez de nombreux champs à
remplir ou à initialiser plusieurs fois dans le programme.
Une autre solution dans le cas ou les noms des champs sont du type Edit1, Edit2, Edit3, etc...
on peut utiliser la fonction
FindComponent()
et dans ce cas il n'y a pas besoin de créer de liste
d'objets.
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
T:array[0..2] of string;
begin
T[0]:='Mon Edit1';
T[1]:='Mon Edit2';
T[2]:='Mon Edit3';
for I := 0 to 2 do TEdit(Form1.FindComponent('Edit'+IntToStr(i+1))).text:=T[i];
end;
Exemple 3:
Contrôle Twebbrowser
end.
Visites:
