Newsgroup: it.comp.lang.delphi
Titolo: Property color [componenti]

ho provato a installare questo componente ( vedi codice sotto ) ereditato da
TButton, il problema č che la proprietą Color, pur essendo presente sul
Object Inspector non funziona, ossia
non cambia il colore al nuovo componente TButton1
Cosa ho sbagliato?
Devo sovrascrivere qualche funzione o procedura dell'oggetto genitore?
La risposta a tutto ciņ mi farebbe capire molte cose sulla
progettazione dei componenti, quindi ringrazio chi posta la risposta
unit BUtton1;
interface
uses
  Windows,Graphics, Messages, SysUtils, Classes, Controls, StdCtrls;
type
  TBUtton1 = class(TBUtton)
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
  property color;
    { Published declarations }
  end;
procedure Register;
implementation
procedure Register;
begin
  RegisterComponents('Samples', [TBUtton1]);
end;
end.

tu dici al tuo componente che ha una prop color.
Ma lui dovrebbe essere telepatico per capire cosa deve farsene di
questa prop.
Dovresti vedere se la classe da cui hai ereditato espone un evento relativo
al
disegno dell'oggetto.
Ad esempio, la tbgrid, usando la prop defaultdrawing e l'evento
OnDrawColumnCell,
permette di cambiare il modo in cui vengono disegnate le celle.
Bye
A.

 questa prop.
Anche a me era capitata una cosa del genere e ancora adesso non so spiegarmela
(ovviamente per ignoranza mia): il fatto è che, se ci badi, la proprietà Color
viene ereditata da TControl, e il comportamento (almeno io pensavo) è già
definito, quindi basterebbe pubblicare la proprietà, proprio come si fa con le
altre.
Forse che bisogna overridare anche il metodo Paint?
--
Jax

 questa prop.
l'oggetto discende da TButton che non possiede la proprietą Color, quello
che cercavo io č proprio il codice che bisogna scrivere per inplementarla

 che cercavo io è proprio il codice che bisogna scrivere per inplementarla
Non è tanto un problema di codice quanto di ereditarietà, ovvero, DOVE
implementarla.
Se guardi la gerarchia di TButton vedrai che discende da:
twincontrol
tbuttoncontrol
Dovendo ridefinire i metodi per il disegno del componente e non essendo essi
presenti in
TButton, credo ti tocchi salire di almeno un livello (tbuttoncontrol), o
addirittura 2
(twincontrol).
Bye
A.

"giuseppe" ha scritto
| l'oggetto discende da TButton che non possiede la proprietą Color, quello
| che cercavo io č proprio il codice che bisogna scrivere per inplementarla
Non e' affatto semplice cambiare il colore di un bottone. In sintesi,
bisogna dapprima impostare lo stile del bottone in CreateParams a
BS_OWNERDRAW, poi intercettare e gestire i messaggi WM_MEASUREITEM
(al momento della creazione) e WM_DRAWITEM (quando
l'aspetto del bottone cambia) ridisegnando il bottone come desideri.
Vedi, come esempio, l'oggetto TBitBtn (dal quale derivare poi il tuo
bottone colorato).
--
Ciao.
ACSH
[D4]
---------------------------
Chi fa da se'
fatica il doppio

 bottone colorato).
.....
Grazie, ACS  la tua risposta č sicuramente giusta
sono riuscito a trovare un sorgente su internet
relativo al mio  problema
il fatto č che il componente da me trovato era piů complesso di un  TButton
colorato per cui non sono riuscito a capire quale parte del codice era
determinante.
Nel codice c'erano le righe da te citate ma non sapevo minimamente a cosa si
riferissero.
Proverň ad esaminare      il sorgente dell'oggetto  TBitBtn, per vedere se
ci capisco qualcosa
Ciao