Unité de type TForm

| parhelie | chris37 |

Voici un petit tutoriel sans prétention pour aider les nouveaux venus à Lazarus à démarrer d'un bon pied dans cet environnement.
Nous allons regarder comment Lazarus crée la fiche principale d'une application. Avec un très petit exemple, on va voir comment Lazarus la modifie quand on ajoute des composants sur la fiche et comment utiliser les événements.

Commentez

- Titre : Unité de type TForm

- Auteurs : parhelie, chris37

- Parution : 4 novembre 2008

- Mise à jour : 2 janvier 2020

- Licence : Copyright ® 2008-2010 parhelie et chris37. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- Nouveau projet application

- Modification de la fiche

- Le code

- Conclusion

Nouveau projet application

Voici comment se présente l'unité de base :

unit Unit1;

{$mode objfpc}{$H+}

En-tête d'unité

Indique le nom (par défaut Unit1). Le fichier source s'appellera « Nom ».pas, le fichier compilé « Nom ».ppu.

Conseil : ne pas éditer cette ligne, les noms seront correctement mis à jour par la commande.

interface

uses
Classes, SysUtils,
LResources, Forms, Controls,
Graphics, Dialogs;

type
TForm1 = class(TForm)
private {private declarations}
public  {public declarations}
end;

var  Form1: TForm1;

Section interface

La clause uses liste les unités qui sont utilisées. Chaque fois qu'un composant est glissé sur la fiche, la liste des unités est complétée. On n'a pas besoin d'ajouter 'à la main' que les composants non visuels, tels que les autres unités de l'application et des unités spécialisées comme math, synaser, etc.

Suit la déclaration des types.

Et enfin les variables et les constantes accessibles au client.

implementation

Section implémentation

Sont définies ici toutes les procédures et fonctions de la section interface. Suivent les déclarations des types, variables, constantes, procédures et fonctions inaccessibles aux clients (privées) et leur définition.
Conseil : veillez à définir tous les objets avant de tenter de les utiliser. Si la procédure Proc1 utilise la procédure Proc2, il faut déclarer Proc2 avant Proc1.

initialization

{$I unit1.lrs}

Section initialisation (facultative)

Permet d'initialiser des variables au démarrage du programme. Par exemple :

Debut := true;
DecimalSeparator := '.';

end.

Toujours la dernière ligne de l'unité (notez le « . »).

Modification de la fiche

On dépose maintenant trois Labels côte à côte sur la fiche (LbHeure, LbMinute, LbSeconde) et un Timer. Mettons la propriété Caption de la Fiche à « Il est exactement ». Nous obtenons ceci :

Le Timer étant sélectionné, dans l'inspecteur d'objets, onglet événements, double-clic sur le champ vide « OnTimer ».
La Form étant sélectionnée, dans l'inspecteur d'objets, onglet événements, double-clic sur le champ vide « OnCreate ».

Enregistrer sous :
Unit1 --> Afficheur
Project1 --> Horloge

Voici maintenant à quoi doit ressembler notre unité :

unit Afficheur;

{$mode objfpc}{$H+}

En-tête d'unité

Le nom a été modifié. De même, le fichier source s'appelle Afficheur.pas, le fichier compilé Afficheur.ppu.

interface

uses
Classes, SysUtils, LResources,
Forms, Controls, Graphics,
Dialogs, StdCtrls, ExtCtrls;

type

TForm1 = class(TForm)

LbHeure: TLabel;
LbMinute: TLabel;
LbSeconde: TLabel;

Timer: TTimer;

procedure FormCreate(Sender: TObject);
procedure TimerTimer(Sender: TObject);

private  {private declarations}

public {public declarations}

end;

var TForm1:TForm1;

Section interface

Dans la clause uses, la liste des unités a été complétée par deux nouvelles références : StdCtrls pour TLabel et ExtCtrls pour TTimer.

La Classe TForm1 est définie ici,

avec ses labels,

son Timer,

et la déclaration des procédures de gestion des événements.

implementation { TForm1 }

procedure TForm1.TimerTimer(Sender: TObject);
begin end;

procédure TForm1.FormCreate(Sender: TObject);
begin end;

Section implémentation

initialization

{$I Afficheur.lrs}

end.

Section initialisation

Le code

Il ne reste plus que très peu de choses à écrire :

- définir les variables dont nous aurons besoin au début de la section implémentation :

var
heure,minute,seconde : byte;

- une fonction pour formater les affichages :

function Intto2Digits(X: byte): string;
var S: string;
begin
S := '0'+InttoStr(X);
result := copy(S,length(S)-1,2)
end;

- la procédure OnCreate de TForm1 entre les begin et end; de la déclaration :

procedure TForm1.FormCreate(Sender: TObject);
begin
LbSeconde.caption := Intto2Digits(seconde);
LbMinute.caption := Intto2Digits(minute)+':';
LbHeure.caption := Intto2Digits(Heure)+':';
end;

- la procédure OnTimer :

procedure TForm1.TimerTimer(Sender: TObject);
begin
inc(seconde,1);
if seconde = 60 then
begin
seconde := 0;
inc (minute,1);
if minute = 60 then
begin
minute := 0;
inc(heure,1);
if heure = 24 then
heure := 0;
LbHeure.caption := Intto2Digits(Heure)+':';
end;
LbMinute.caption := Intto2Digits(minute)+':';
end;
LbSeconde.caption := Intto2Digits(seconde);
end;

- et, si vous ne voulez pas vous lever la nuit pour faire démarrer votre horloge, dans la partie initialisation :

initialization
{$I afficheur.lrs}
Heure := 17;
Minute := 30;
Seconde := 0;
end.

Conclusion

Vous en savez suffisamment pour commencer à développer.

À vos claviers.