Newsgroup: it.comp.lang.delphi
Titolo: Dubbio su Canvase e Brush

Salve a tutti,
Ho un dubbio sul funzionamento e sull'interazione tra l'oggetto Brush di un
TCustomControl
e quello relativo alla Canvas dello stesso TCustomControl.
Provo a spiegare :)
Sto realizzando dei componenti wrapper attorno a degli oggetti (da me
realizzati) che mi
permettano di averne una rappresentazione grafica.
TCMNetLayerGfx = class(TCustomControl)
....
end;
procedure TCMNetLayerGfx.Paint;
begin
    if Assigned(fBMap) then
    begin
        if not fStretch then
            Canvas.Brush.Bitmap:=fBMap
        else
            Canvas.StretchDraw(Rect(0,0,Width,Height),fBMap);
    end
    else
    begin
        Canvas.Brush.Bitmap:=Nil;
        Canvas.Brush.Assign(Brush);
        Canvas.CopyMode
    end;
    with Canvas do
    begin
        RoundRect(0,0,Width-0,Height-0,5,5);
        Brush.Style:=bsClear;
        TextOut(2,2,format('L:%d',[fLayerNum]));
    end;
end;
Il metodo Paint di cui sopra ha un comportamento strano.
Supponiamo di avere una variabile:
mio    : TCMNetLayerGfx;
mio:=TCMNetLayerGfx.Create(Self);
...
...
mio.Brush.Style:=bsCross;
mio.Brush.Color:=clLime;
La prima volta che l'oggetto viene disegnato si comporta esattamente come mi
aspetto, e cioè
disegna un pattern (bsCross) di colore clLime e si intravede lo sfondo del
form che ospita il
controllo.
Quando poi assegno una bitmap, essa viene disegnata correttamente. Nel
momento in cui annullo
l'associazione della bitmap, il controllo mi viene disegnato rispettando lo
stile ed il colore impostati
(bsCross,clLime) però lo sfondo è di un bellissimo bianco.
Non riesco a capire perchè, sarà la giornata piovosa che mi annacqua il
cervello o l'età
che avanza (...vorrà dire che la metterò in frigo...) :)
Qualche suggerimento (non cruento per favore)?
Salumi e baci

 controllo.
Se sarei stato io a programmare mi sarei preoccupato che non mi veniva fuori
il bianco di sfondo!
In effetti non capisco come ti possa restare la form sotto mentre usi il
Canvas, almeno tutte le volte che ho provato ad usarlo mi mette fisso lo
sfondo bianco di default!
Cmq ben per te che sei riuscito a far rimanere sotto la form, magari č dato
dalla creazione di un componente diretto e generico TCustomControl. Se
veramente di lascia lo sfondo fai prima a distruggere e ricreare il
controllo in deallocazione della bitmap, oppure io avrei catturato la
porzione di immagine che risiede sotto il controllo prima della propria
creazione e poi lo avrei mantenuto nella fBMap fino a quando non ci fosse
stato un'ulteriore ed esterna assegnazione. Potresti magari lavorare con due
Bitmap e quando non č assegnata la fBMap puoi semplicemente assegnare al
Brush l'immagine salvata al momento della creazione del componente.
Ciao,
  Fabio

 sfondo bianco di default!
[Cut]
In effetti, il comportamento ottenuto non č assolutamente voluto!
Normalmente
mette lo sfondo bianco, solo che in questa occasione, all'atto della prima
chiamata
al metodo Paint, mi disegna solo il pattern (csCross).
Riducendo ad icona il form, e successivamente ripristinandolo, il
comportamento ritorna
normale (leggi: sfondo bianco).
Non č mia intenzione avere un background trasparente, sarebbe del tutto
inutile visto il tipo di
applicazione :)
Grazie per il tuo interessamento.
Saluti,
Carmine