TPicture et Dfm

Utilisateur anonyme - 22 déc. 2007 à 11:11
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 23 déc. 2007 à 06:20
Salut à tous,

Il y a quelques temps j'ai été confronté à un problème. Je voulais faire un composant dans lequel j'utilisais un TPicture. En run-time il n'y a pas de soucis. Mais en Design-Time, je ne voyais rien.

J'ai trouvé un bout d'explication ici : http://delphi.newswhat.com/geoxml/forumhistorythread?groupname=borland.public.delphi.vcl.components.writing.win32&messageid=40d078fa@newsgroups.borland.com

Hormis le coté très intéressant, la solution proposée me laisse perplexe d'autant plus que si on ne veut pas utiliser un TImage mais un TPicture, la solution devient crade.

Donc j'en appelle à votre opinion et vos lumières

Merci

@++

3 réponses

WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
22 déc. 2007 à 15:58
Bonjour

Quelques questions en passant.  Je suppose que ton composant était intégré à un paquet; comment était l'option d'utilisation de ce paquet ? Seulement en conception, Seulement en execution ou Conception et Execution ?
Utilisais tu un format perso d'image (PNG,GIF,...) ? Au quel cas avais tu bien enregistrer ton format au moyen d'un RegisterFileFormat ?

P.S. Un peu plus de précision sur ton composant pourrait nous aider à y voir plus clair.

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
0
Utilisateur anonyme
22 déc. 2007 à 17:11
Salut WhiteHippo,

Cet exemple fonctionne tres bien :

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

type
  TExemple = class(TCustomPanel)
  private
    FPicture:TPicture;
    Procedure SetPicture(Value:TPicture);
  protected
    Procedure Paint;Override;
  public
   constructor Create(AOwner:TComponent); override;
   destructor Destroy; override;
  published
    Property Picture:TPicture Read fPicture Write SetPicture;
  end;

procedure Register;

implementation

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

constructor TExemple.Create(AOwner:TComponent);
begin
  inherited Create(AOwner);
  Parent := TWinControl(AOwner);
  fPicture:=TPicture.Create;
end;

destructor TExemple.Destroy;
begin
  fPicture.Free; //<---- Là il faut le mettre : c'est pour Cirec
  inherited;
end;

Procedure TExemple.SetPicture(Value:TPicture);
Begin
  If Assigned(Self) Then
  fPicture.Assign(Value);
End;

Procedure TExemple.Paint;
Var
Rect:TRect;
Begin
  Inherited;
  If Assigned(Self) Then
    Begin
      Rect:=Self.ClientRect;
      Self.Canvas.StretchDraw(Rect,fPicture.Graphic);
    End;
End;   

end.

Javais du merdouiller un truc dans les options : car là ca fonctionne. Semble bizarre cette histoire : à l'époque j'avais demandé à FLo de jeter un oeil et il avait conlut que le TImage n'était pas mis dans le dfm.

Désolé du dérangement. En meme temps ca permet aux gens de savoir comment on implante le glyph ou le Picture comme dans un TImage, dans un composant.
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
23 déc. 2007 à 06:20
Francky, arrete de faire ça :

  If Assigned(Self) Then
    ---

ça sert a rien, puisque si self n'existe pas, un appel a une de ces methodes provoquera une erreur peu importe le code du composant.

<hr size="2" width="100%" />
http://deefaze.gnomz.com
0
Rejoignez-nous