[Delphi6] err à l'insertion d'un composants perso ds une fiche

err à l'insertion d'un composants perso ds une fiche [Delphi6] - Programmation

Marsh Posté le 24-01-2002 à 14:38:08    

voilà, c'est encore moi avec un nouveau pb que je ne comprend pas bien :
 
voilà le constructeur :
TSpectrumDisplayer = class(TPaintBox, ISpectrumDisplayer)
[...]
   public
       constructor Create(AOwner: TComponent); override;
[...]
end;
 
 
constructor TSpectrumDisplayer.create(AOwner: TComponent);
begin
   inherited create(AOwner);
   self.Height := SPECTRUM_HEIGHT;
   self.Width := SPECTRUM_WIDTH;
   // rempli la zone en noir.
   self.clearSpectre;
   positionZero:= ZERO_BAS;
   sensFluxSanguin := true;
 
   bmpTemp := TBitmap.Create;
   bmpTemp.Height := 200; // bitmap d'une colonne de spectre.
   bmpTemp.Width := 1;
 
   tabColorSpec := @NOIRBLANC;  
end;
 
 
 
qd j'essaye de placer mon composant sur une fiche, il me sort l'erreur suivante :
'Le control '' n'a pas de fenêtre parente'...
comme le seul contrôle du composant est le composant lui-même et que je lui fais bien inherited create(A0wner), je ne vois pas bien d'où ça peut venir !

Reply

Marsh Posté le 24-01-2002 à 14:38:08   

Reply

Marsh Posté le 24-01-2002 à 14:54:45    

TSpectrumDisplayer = class(TPaintBox, ISpectrumDisplayer)
 
c'est quoi ? un héritage de deux trucs en même temps ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 24-01-2002 à 15:00:57    

oui, c'est de l'héritage mutliple :) déguisé :
delphi n'accepte pas l'heritage multiple. Par contre, il accepte qu'une classe hérite d'une classe "concrète" et de plusieurs classes abstraites (interface en delphi).
c'est le cas ici : ISpectrumDisplayer est une interface.
 
(cf 4-19 du Guide du développeur BorlandDelphi 6.)
 
je ne pense pas que le pb vienne de là puisque tous mes composants qui marchent très bien héritent eux aussi d'une interface et d'une classe de delphi...
 
 
par exemple :
TBloodDirectionIndicator = class(TPanel, IBloodDirectionIndicator)
    private
         imageSonde: TImage;
         imageSens: TImage;
    public
       constructor create(AOwner: TComponent); override;
       procedure setDirection(sens: boolean);
   end;
 
avec
   IBloodDirectionIndicator = interface
    procedure setDirection(sens: boolean);
   end;

 

[edtdd]--Message édité par Moustaaki--[/edtdd]

Reply

Marsh Posté le 24-01-2002 à 15:46:48    

tu vois pas doù ça vient ?
t'as besoin d'autres infos ?

Reply

Marsh Posté le 24-01-2002 à 15:49:44    

bhen non je vois pas trop d'où ça vient...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 24-01-2002 à 15:58:13    

antp a écrit a écrit :

bhen non je vois pas trop d'où ça vient...  




 
 :cry:  
'vois pas du tout non plus...  
parceque le control '', je ne sais pas trop lequel c'est ;)!
ça peut pas être le TBitmap ? ça a pas besoin d'avoir un parent, ce tru c?

Reply

Marsh Posté le 24-01-2002 à 16:22:10    

oui, en effet, j'ai pas encore essayer mais je pense que c'est ça parceque en debugant, on s'apperçoit que ça bloque sur
"self.Canvas.FillRect(Rect(0,0,512,200));" dans la procedure suivante : je vais la mettre dans loaded donc... pour voir.
 
procedure TSpectrumDisplayer.clearSpectre;
begin
 self.Canvas.Brush.Color := clBlack;
   self.Canvas.FillRect(Rect(0,0,512,200));
   spectrEnOrdre := false; // nouveau spectre, il n'est donc plus ordonné.
   specEntier := false; // nouveau spectre, donc pas entier.
end;

Reply

Marsh Posté le 24-01-2002 à 16:29:51    

heu.. j'ai plus d'erreur mais :
self.Canvas.Brush.Color := clBlack;  
self.Canvas.FillRect(Rect(0,0,512,200));  
 
fait queudale... même si je fais un repaint...
j'ai oublié de faire un truc, là ?
 
 
Edit =>
en fait, ça marche po dans le loaded mais si je fais un bouton qui lance la procedure lorsqu'on clique dessus, ça marche...
si je lance clearSpectre dans FormCreate de la fiche, ça fait queud.
comprend pas bien, là... vous avez une explication ?

 

[edtdd]--Message édité par Moustaaki--[/edtdd]

Reply

Marsh Posté le 24-01-2002 à 16:34:42    

j'viens de m'appercevoir en tapant le dernier message que lorsque je perd le focus sur la fenêtre et que je reviens dessus, la zone de dessin est redevenu transparente... je clique => ça devient noir... je perd le focus... ça redevient transparent... non mais c'est quoi ce bordel ?? il faut redessiner le canevas à chaque fois ??

Reply

Marsh Posté le 24-01-2002 à 16:47:20    

Moustaaki a écrit a écrit :

j'viens de m'appercevoir en tapant le dernier message que lorsque je perd le focus sur la fenêtre et que je reviens dessus, la zone de dessin est redevenu transparente... je clique => ça devient noir... je perd le focus... ça redevient transparent... non mais c'est quoi ce bordel ?? il faut redessiner le canevas à chaque fois ??  




 
bon, en fait, c'est tout à fait normal... au temps pour moi les gars...  
il faut juste que je redessine, ce qui est normal...

Reply

Marsh Posté le 24-01-2002 à 16:47:20   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed