Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2715 connectés 

 


Dernière réponse
Sujet : [Delphi6] err à l'insertion d'un composants perso ds une fiche
Moustaaki

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...


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Moustaaki

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...

Moustaaki 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 ??
Moustaaki 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]

Moustaaki a écrit a écrit :

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;  




 
Mouais ca doit etre ca.

Moustaaki 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;

Moustaaki a écrit a écrit :

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 !  




 
Boaf, le parent n'est pas encore défini dans le constructeur...
Si tu mets ton code dans le loaded ca marchera.
Dans le SetParent aussi, ki est virtual.
 :hello:

Moustaaki

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?

antp bhen non je vois pas trop d'où ça vient...
Moustaaki tu vois pas doù ça vient ?
t'as besoin d'autres infos ?
Moustaaki 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]

antp TSpectrumDisplayer = class(TPaintBox, ISpectrumDisplayer)
 
c'est quoi ? un héritage de deux trucs en même temps ?
Moustaaki 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 !

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)