begin process at 2008 05 16 04:35:19
1 173 215 membres
57 nouveaux aujourd'hui
13 970 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Pb Référence With [ Système / Périphérique ] (Jean_Jean)

Pb Référence With le 14/12/2007 18:46:00

Jean_Jean

 Bonjour à tous,

Voilà, j'ai trouvé une bizarerie avec le référencement de With. Bien que j'ai contourné le problème en n'utilisant pas cette instruction, j'aime bien comprendre le pourquoi. Si qlq a une idée!!

J'ai des panels créés dynamiquement que je charge dans un tableau de Panel CurActivite. Je change la couleur du Panel concerné par la classique instruction qui fonctionne :
    CurActivite[NumActivite].Color := TPanel(FindComponent('Panel'+IntToStr(NumSelect))).Color;

Mais comme j'ai d'autres réglages à effectuer sur les Panels du Tableau, j'utilise With et là ça plante à l'exécution :
Message d'erreur "...accès violation at xxx : read of adress..."

With CurActivite[NumActivite] do
 begin
     Color   := TPanel(FindComponent('Panel'+IntToStr(NumSelect+17))).Color;
     ...
 end;

Merci!

Jean_Jean


Re : Pb Référence With le 14/12/2007 19:07:11

cirec
Membre Club
(Admin CS)
Réponse acceptée !
Salut,

tu t'y prends mal

il faut faire :

With TPanel(FindComponent('Panel' + IntToStr(NumSelect + 17))) do
Begin
  CurActivite[NumActivite].Color := Color;
  CurActivite[NumActivite].Width := Width;
End;
 
@+
Cirec


Re : Pb Référence With le 14/12/2007 20:15:25

Guillemouze
Réponse acceptée !
With CurActivite[NumActivite] do
begin
  Color    //color de
CurActivite[]
  :=
  TPanel(
    FindComponent( //findcomponent est appelé sur
CurActivite[] !!! => nil
      'Panel'+IntToStr(NumSelect+17)
    )
  )
  .Color; //nil.color = ?
      
     ...
 end;

tu peux palier le probleme en faisant comme ca :

With CurActivite[NumActivite] do
 begin
     Color   := TPanel(Self.FindComponent('Panel'+IntToStr(NumSelect+17))).Color;
     ...
 end;



Re : Pb Référence With le 14/12/2007 20:39:44

japee
Membre Club
(Admin CS)
Réponse acceptée !
Bien vu, Guillemouze.

En effet, ça fonctionne aussi comme ça :

var
  AColor: TColor;

AColor := TPanel(FindComponent('Panel'+IntToStr(NumSelect+17))).Color;

with CurActivite[NumActivite] do
begin  
  Color := AColor;
  // ...
end;


Re : Pb Référence With le 14/12/2007 20:48:03

Guillemouze
merci jappe ;)

Attention notez bien ce qui va suivre, je vais pas le dire souvent :
C'est un avantagede VB su Delphi, en VB, il faut prefixer d'un point les elements du with. par exemple :
with monpanel do
 
.Color := findcomponent

"." devant color => color du with
pas de "." devant le findcomponent => methode de l'objet implicite (self?)


 

Re : Pb Référence With le 14/12/2007 21:25:31

Caribensila
Membre Club
Salut,

Moi, j'aime pas le "with" car je trouve que ça rend souvent le code moins lisible.
Je l'emploie quand ça évite une variable locale, et encore!

Re : Pb Référence With le 14/12/2007 22:08:05

Jean_Jean
Merci à tous!

@Cirec, bien vu! J'avais effectivemlent inversé, Mdr, c'est quand même pas Alzheimer!
@ Guillemouze : intéressant la référence à self
@ Japee : toujours pour la simplification de lecture! Tu devrais écrire un bouquin pour débutant
@ Cari : Qd même ds certains cas, ça allège! Mais j'ai remarqué aussi que dans d'autres effectivement on ne sait plus à qui appartient la propriété!
Bien à vous!

Jean_Jean

Re : Pb Référence With le 14/12/2007 23:39:41

f0xi
Membre Club
(Admin CS)
Réponse acceptée !

function AssignProp(src, dest : TPanel): boolean;
begin
  result := assigned(src) and assigned(dest);
  if not result then
    exit;

  dest.color := src.color;
  dest.width := src.width;
  // dest.      := src. ;
end;


...
var P1, P2 : TPanel;
begin
  P1 := CurActivite[NumActivite];
  P2 := TPanel(FindComponent('Panel'+IntToStr(NumSelect+17))); // <== BEURK!!

  AssignProp(P1, P2);
end;



deefsign.gif

Re : Pb Référence With le 16/12/2007 11:24:08

Jean_Jean
Bon je refais un essai de commentaire.

Jean_Jean

Re : Pb Référence With le 16/12/2007 11:26:42

Jean_Jean
Ah, ça y est!
J'avais un problème avec mon éditeur.
Merci donc Foxi pour ce code très intéressant et simplificateur d'écriture de la série FindComponent...
A+
Jean_Jean


[Page 1 Page 2]
Classé sous : pb, panel, color, with, curactivite

Participer à cet échange

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS