Newsgroup: it.comp.lang.delphi
Titolo: penne malefiche

sto realizzando un componente dove uso delle penne tpen.
nel componente setto dei colori di default ( nel costruttore).
Poi a designtime imposto altri colori, peccato che non li registra, 
potete dirmi dove e' l'errore, non riesco a capire perche' non me lo prende.
grazie
type
   tpenne= class(TLabel)
   private
     { Private declarations }
     FPen : Array [1..3] of Tpen;
     aaa   : tpen;
     procedure SetPen(ndx:Integer;Value: TPen);
     procedure SetPena(Value: TPen);
     function GetPen(ndx:integer):Tpen;
     procedure penChange(sender:Tobject);
     procedure paChange(sender:Tobject);
   protected
     { Protected declarations }
   public
     { Public declarations }
     Constructor Create(AOwner: TComponent); override;
     destructor Destroy; override;
     procedure paint; override;
   published
     { Published declarations }
     property Pen1 : TPen Index 1 read GetPen write SetPen;
     property Pen2 : TPen Index 2 read GetPen write SetPen;
     property Pen3 : TPen Index 3 read GetPen write SetPen;
     property Pen4 : Tpen read aaa write SetPena;
   end;
procedure Register;
implementation
procedure Register;
begin
   RegisterComponents('Samples', [tpenne]);
end;
Constructor tpenne.Create(AOwner: TComponent);
var c1 : integer;
begin
   Inherited;
   for c1 := 1 to 3 do
   begin
     FPen[c1] := TPen.Create;
     FPen[c1].OnChange := PenChange;
  end;
  aaa := TPen.Create;
  aaa.OnChange := paChange;
  // Valore di colore di default
  Pen1.Color  := $00FAD2C0;
  Pen2.Color  := $00FF8000;
  Pen3.Color  := $00FF8080;
  aaa.Color  := rgb(255,0,0);
end;
destructor tpenne.Destroy;
var c1 : integer;
Begin
   for c1 := 1 to 3 do
      FPen[c1].Free;
   Inherited;
End;
procedure tpenne.SetPen(ndx:Integer;Value: TPen);
begin
   FPen[ndx].Assign(value);
   Invalidate;
end;
function tpenne.GetPen(ndx:integer):Tpen;
begin
   GetPen := FPen[ndx];
end;
procedure tpenne.paint;
begin
   inherited;
   Canvas.Pen.Assign(pen1);
   Canvas.MoveTo(0,10);
   Canvas.LineTo(100,10);
   Canvas.Pen.Assign(pen2);
   Canvas.MoveTo(0,30);
   Canvas.LineTo(100,30);
   Canvas.Pen.Assign(pen3);
   Canvas.MoveTo(0,50);
   Canvas.LineTo(100,50);
   Canvas.Pen.Assign(pen4);
   Canvas.MoveTo(0,70);
   Canvas.LineTo(100,70);
end;
procedure tpenne.penChange(sender:Tobject);
begin
   Invalidate;
end;
procedure tpenne.paChange(sender:Tobject);
begin
   aaa.assign(tpen(Sender));
   Invalidate;
end;
procedure tpenne.SetPena(Value: TPen);
begin
   aaa.Assign(value);
   Invalidate;
end;
end.
-- 
-------------------------------
per scrivere in privato
togliere "1975nosp"
to reply remove "1975nosp"

 sto realizzando un componente dove uso delle penne tpen. [...]
Ad una prima occhiata, diciamo che il codice presenta diverse stranezze.
Non capisco ad esempio perchè usare quell'accesso indicizzato per 
impostare le caratteristiche della singola "penna".
Inoltre, c'è un evento /OnChange/ legato all'oggetto TPen referenziato 
da "aaa" che reimposta le proprietà dello stesso oggetto. :-|
Il nome "aaa" non è poi l'ideale, secondo me. ;-)
Erediti tra l'altro da un controllo *TLabel*... :-|
Il metodo /GetPen/ non usa l'identificatore implicito /Result/ per 
restituire il valore.
Insomma, secondo me con un po' di refactoring forse si riuscirebbe ad 
avere un codice più pulito e, se il problema persiste, magari è più 
semplice scovare cosa non va. :-)
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

 semplice scovare cosa non va. :-)
forse l'ho risolto.
a: le proprieta' le dichiaro stored
property Pen1 : TPen Index 1 read GetPen write SetPen stored true;
b:  l'evento on change
procedure tpenne.penChange(sender:Tobject);
begin
   Tpen(sender).Assign(Tpen(sender));
   Invalidate;
end;
se entro 5 minuti non riscrivo vuol dire che funziona anche nel 
componnte ufficiale :-)


 end;
Non so perché, ma mi sembra che non abbia senso. :-)
Stai assegnando un oggetto a se stesso, quindi copi nelle proprietà 
dell'oggetto A gli stessi valori che le proprietà di A possiede. :-|


 end;
ho tolto la riga tpen(.......);
funziona ( o almeno sembra ).


 dell'oggetto A gli stessi valori che le proprietà di A possiede. :-|
Lo so. Riuffua


 Forse dovrei andare in ferie...........
Temo di sì.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it