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

 


Dernière réponse
Sujet : [Delphi 6] creation de composants, pb avec 1 propriété.
Moustaaki bin voilà, j'ai rajouté ça :
 
 
procedure TIndexDisplayer.Loaded;
begin
 inherited loaded;
   idxNameFont := idxNFont;
   idxValueFont := idxVFont;
end;
 
 
 
et maintenant, ça marche !!!!!
c'est qu'effectivement, il ne delphi ne stockait pas les font dans les propriétés des labels alors il falait le lui rappeler...
c'est tout de même pas top et ça fait très bidouillage !
si t'as une autre solution, dis moi sinon, merci pour tout est à la prochaine !

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 bin voilà, j'ai rajouté ça :
 
 
procedure TIndexDisplayer.Loaded;
begin
 inherited loaded;
   idxNameFont := idxNFont;
   idxValueFont := idxVFont;
end;
 
 
 
et maintenant, ça marche !!!!!
c'est qu'effectivement, il ne delphi ne stockait pas les font dans les propriétés des labels alors il falait le lui rappeler...
c'est tout de même pas top et ça fait très bidouillage !
si t'as une autre solution, dis moi sinon, merci pour tout est à la prochaine !
Moustaaki bin, non... maintenant, il ne change plus aucune font à part à la conception...
j'ai l'impression qu'il ne concerve pas les valeurs des propriétés des labels... est-ce que je me trompe ?
'vais essayer de "bidouiller" en redéfinissant la méthode loaded...  
 
mais quelle galère qd même pour pas grand chose !
antp essaie d'ajouter dans le debut du create:
idxNFont := TFont.Create;
idxVFont := TFont.Create;
 
et de faire un assign pour ceux la aussi (juste avant le for, là où y a un simple := que j'avais pas vu)
Moustaaki bon, j'ai utiliser la méthode assign à chaque fois que j'attribuais font à une valeur et ya plus d'erreur !
sur la fiche à la conception, tous les labels ont la même police, ça a l'air nickel !
 
MAIS si je compile, seul le premier panneau de label utilise la police de caractère spécifiée, les autres panneau concervent la police de base.... POURQUOI ????  :cry:  
 
bref, je pensais que ça marchait, j'étais comme un fou mais en fait : ça marche po du tout....  
et pourtant, si j'attribut manuellement les valeurs, tout est nickel.
 
c'est pas à cause de mon TIndexDisplayer.create ? au niveau de l'initialisation des propriétés....
Moustaaki bin non, ça fait pareil : si je change le idxNameFont ou idxValueFont, on voit bien le changement de la police sur la fiche mais impossible de compiler (violation d'accès) et impossible de développer la propriété (en cliquant sur +)...
 
une autre possibilité ?
antp après une première lecture je ne vois pas de vraie erreur, sauf une que j'ai commise moi-même avec des TStringList donc je me dis que c'est peut-être le même problème :
 
panels[i].labValue.Font := font;
 
change ça en  
 
panels[i].labValue.Font.Assign(font);
 
et l'autre ligne similaire de même, avec labName, de manière à ce qu'il copie les données du font passé en param au lieu de pointer simplement sur ce nouveau font (sans le savoir on manipule plein de pointeurs)

 

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

Moustaaki up !
Moustaaki slut,
j'écrit un composant dérivant de TPanel contenant 5 panneau dérivant aussi de TPanel et contenant chacun 2 labels. J'aimerais au final pouvoir à partir du composant parent (le premier donc) modifier le font du groupe de label.
je vais essayer de faire un schéma pour mieux me faire comprendre :
il ya donc 5 panneau avec 2 TLabel chacun :
lab1    lab1     lab1     lab1       lab1
  lab2     lab2    lab2     lab2       lab2
 
ça ressemble un peu à ça...
 
donc, j'aimerais créer des propriétés fontLab1 et fontLab2 qui modifierais respectivement la police de tous les lab1 et de tous les lab2.
 
 
LE PB EST INDIQUE EN BAS...
 
passons au code, maintenant :
j'ai défini l'interface de cette façon :
 
 
 
// Le "grand-papa", le conteneur de tout les contenant, le pére des pére, 'fin bref, c'est lui qui contient tout quoi... :)
 
TIndexDisplayer = class(TPanel, IIndexDisplayer)
[...]
 private
    panels : array [0..4] of TIndexValuePanel;
[...]
    idxNFont, idxVFont: TFont;
[...]
    procedure setNFont(font: TFont);
    procedure setVFont(font: TFont);
    function getNFont(font: TFont);
    function getVFont(font: TFont);
[...]
  published
    property idxNameFont: TFont read getNFont write setNFont stored true;
    property idxValueFont: TFont read getVFont write setVfont stored true;
[...]
end;
 
// ceci est bien entendu défini avant la classe précédente :
TIndexValuePanel = class(TPanel)
public
  constructor Create(AOwner: TComponent); override;
[...]
      protected
       labName: TLabel;   // intitulé de l'index
       labValue: TLabel;   // valeur de l'index.
[...]
   end;
 
 
 
 
au niveau de l'implantation :  
 
constructor TIndexDisplayer.create(AOwner: TComponent);
var
i: SmallInt;
begin
   inherited create(AOwner);
 [...]
   for i := 0 to 4 do
   begin
      panels[i] := TIndexValuePanel.Create(self);
      self.insertControl(panels[i]);   // ils sont ainsi censés se "tuer" tout seul !
      [...]
      panels[i].labName.ParentFont := false;
      panels[i].labValue.ParentFont := false;
   end;
   idxNFont := panels[0].labName.Font;
   idxVFont := panels[0].labValue.Font;
[...]
end;
 
procedure TIndexDisplayer.setNFont(font: TFont);
var
 i: SmallInt;
begin
 if font <> nil then
   begin
    idxNFont := font;
      for i := 0 to 4 do
       panels[i].labName.Font := font;
   end;
end;
 
procedure TIndexDisplayer.setVFont(font: TFont);
var
 i: SmallInt;
begin
 if font <> nil then
   begin
    idxVFont := font;
      for i := 0 to 4 do
       panels[i].labValue.Font := font;
   end;
end;
 
 
function TIndexDisplayer.getVFont: TFont;
begin
 result := idxVFont;
end;
 
function TIndexDisplayer.getNFont: TFont;
begin
 result := idxNFont ;
end;
 
 
 
 
 
 
constructor TIndexValuePanel.Create(AOwner: TComponent);
begin
   inherited create(AOwner);
   labName := TLabel.Create(self);
   labValue := TLabel.create(Self);
   [...]
   InsertControl(labName);
   InsertControl(labValue);
   [...]
end;
 
 
 
 
LE PROBLEME :
compilation ok.
insertion du composant dans une fiche: pas de pb.
mais lorsque je modifie la propriété idxNameFont ou idxValueFont, j'obtient parfois une erreur du type : "Violation d'accès à l'adresse 4001D0A2 dans le module RTL60.BPL. lecture de l'adresse FFFFFFFF." ensuite j'obtient systèmatiquement ce message si j'essaye de compiler. parfois, je n'ai pas d'erreur mais la police ne se modifie que sur le premier groupe de label (que dans le premier TIndexValuePanel).
j'ai essayé de l'utiliser manuellement (insertion "manuelle" dans la fiche) et de modifier manuellement les propriétés et tout marche nickel : pas d'erreurs et tous les labels se retrouve avec la police spécifiée. :ouch:  
 
 
alors, ma question est : quelle connerie ai-je fais pour que l'éditeur de propriétés de delphi m'en veuille autant ? quelle subtilité n'ai-je pas saisie ? quels sont les erreurs d'algo qui entraine ceci ?  
si le code ne parait pas à l'origine de cette erreur, comment y faire face ??

 

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


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