09 novembre 2007

A la découverte de Lazarus

Présentation

Lazarus est un environnement de développement rapide open source largement inspiré par Delphi, et basé sur Free Pascal, une implémentation orientée objet du langage Pascal. Cependant, il possède un atout supplémentaire non négligeable: la portabilité. Bien que le langage soit compilé, il n'y a pas à se soucier des plateformes cibles dans le code.



L'un des principes de Lazarus est de "coder une fois, puis compiler n'importe où" (en opposition à Java où l'on "code une fois" , puis on "exécute n'importe où"). Le souci d'optimisation et la rapidité d'exécution sont nettement palpables lorsqu'on utilise Lazarus, par rapport à du Java ou du Dot Net. Pas besoin non plus de machine virtuelle.


Exemple

Voici maintenant un exemple de mini paintbrush fait avec Lazarus à télécharger ici (je n'en ai pas trouvé en farfouillant sur internet).



Son principe est relativement simple. L'ardoise magique est représentée par un composant TImage dans lequel on peut dessiner de manière persistante. Pour éviter les clignotements, il faut activer le mode Double Buffered :

procedure TFrmMain.FormCreate(Sender: TObject);
begin
  Inherited;
  self.DoubleBuffered := true;
  (* ... *)
end;


On détermine si le crayon est levé ou non en utilisant les événements OnMouseDown (click souris) et OnMouseUp (fin du click souris) de l'image.

procedure TFrmMain.ImgWhiteBoardMouseDown(Sender: TOBject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  self.ImgWhiteBoard.Canvas.MoveTo(X, Y);
  self._draw := true;
end;

procedure TFrmMain.ImgWhiteBoardMouseUp(Sender: TOBject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  self._draw := false;
end;

Ensuite, lors du déplacement de la souris sur l'ardoise (événement OnMouseMove), on dessine une ligne si le bouton est appuyé.

procedure TFrmMain.ImgWhiteBoardMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if (self._draw) then begin
    self.ImgWhiteBoard.Canvas.LineTo(X,Y);
  end;
end;

Voilà. Dans mon souvenir, faire la même chose en Java Swing est un tantinet plus compliqué...

Libellés : , , ,


Commentaires:
Ahaha. Spece d'old skool :D
 
Enregistrer un commentaire



<< Home

This page is powered by Blogger. Isn't yours?