err à l'insertion d'un composants perso ds une fiche [Delphi6] - Programmation
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 ?
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]
Marsh Posté le 24-01-2002 à 15:49:44
bhen non je vois pas trop d'où ça vient...
Marsh Posté le 24-01-2002 à 15:58:13
antp a écrit a écrit : bhen non je vois pas trop d'où ça vient... |
'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?
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;
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]
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 ??
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...
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 !