Editeur graphique en Delphi : utilisation des TShape

sebmime Messages postés 11 Date d'inscription mardi 23 mars 2004 Statut Membre Dernière intervention 8 septembre 2004 - 11 mai 2004 à 15:46
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 - 12 mai 2004 à 09:54
Salut tout le monde,
j'ai besoin d'aide.
Je dois développer un éditeur de GRAFCET (succession d'étapes et de transitions) en DELPHI. C'est donc du dessin.

Pour les étapes (des rectangles), j'utilise des TShape. Il faut que j'affiche l'étape et son numéro. Mais je ne sais pas comment on peut écrire dans un TShape. Il me semble que ce n'est pas possible.
L'autre solution est d'ajouter un TLabel dans le TShape. Est-ce que quelqu'un sait faire çà.
J'espère avoir été clair.

Sinon si certains d'entre vous ont déjà fait des éditeurs graphiques, quelques exemples pourraient m'aider.

Merci

1 réponse

cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
12 mai 2004 à 09:54
Salut,
Je pense que le plus simple est de créer un nouveau composant héritant de TShape (par ex TTextShape) de rendre visible les propriétés Caption et Font (héritées de TControl) et de surcharger la méthode Paint.
Ce qui donne :

unit TextShape;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, 
  Controls, Forms, Dialogs, ExtCtrls;

type
  TTextShape = class(TShape)
  private
  protected
    procedure Paint; override;
  public
  published
    property Caption;
    property Font;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Exemples', [TTextShape]);
end;

procedure TTextShape.Paint;
var
  X, Y: Integer;
  Rect : TRect;
  Size : TSize;
begin
  // Méthode hétitée de TShape
  Inherited Paint;
  With Canvas do
    begin
      // taille du texte
      Size := TextExtent(Caption);
      // Taille du controle
      Rect := ClientRect;
      // Centrage
      X := (Rect.Right - Size.Cx) div 2;
      Y := (Rect.Bottom - Size.Cy) div 2;
      // Affichage du texte
      TextOut(X,Y,Caption);
    end;
end;


Kenavo

Code, Code, Codec !
0
Rejoignez-nous