Newsgroup: it.comp.programmare.win32
Titolo: [C++ Builder] Sempre bianco

Ho uno STRANO problema con il C++ Builder 6 Professional.
Quando provo a colorare una TImage con un colore, QUALUNQUE colore
scelgo la TImage viene colorata di BIANCO.
Se per esempio provo a scrivere
Image1->Canvas->FloodFill(0,0,clBlue,fsSurface);
invece che di blu la TImage viene colorata di bianco.
Credevo che fosse un malfunzionamento del C++ Builder 6, ma quando
provo a scrivere
Image1->Canvas->Draw(0,0,Bitmap_Di_Prova);
tutto funziona correttamente.
Ho provato a ri-compilare sotto C++ Builder 6 un programma che avevo
scritto con il C++ Builder 3 e il programma, che usa spesso
l'istruzione "FloodFill()", funziona correttamente.
Come devo fare per far funzionare correttamente il C++ Builder 6?
Ringrazio tutti coloro che mi risponderanno.

 correttamente il C++ Builder 6?
La versione di BCB non c'entra nulla, stai solo sbagliando ad 
utilizzare il metodo FloodFill. Per fare quello che ti serve č 
meglio usare FillRect, ad esempio:
    Image1->Canvas->Brush->Color = clBlue;
    Image1->Canvas->FillRect(Rect(0, 0, Image1->Width, 
Image1->Height));
HTH,
-- 
Stefano Frosio
www.esse-effe.com
 


Perche' mi dici che uso FloodFill() nel modo sbagliato?
Non dovrebbe colorare la TImage in ogni caso?
Comunque devo colorare anche disegni NON rettangolari, se non sbaglio
FillRect() funziona solo con i rettangoli.

 FillRect() funziona solo con i rettangoli.
FloodFill e FillRect servono a scopi diversi. Se il Canvas ha 
già qualcosa al suo interno, allora FloodFill funzionerà, 
altrimenti no. La tua richiesta era su come colorare 
genericamente una TImage e per quello devi usare un metodo che 
disegni effettivamente qualcosa (quindi non necessariamente 
FillRect che era solo un esempio). Se invece la TImage è già 
colorata, evidentemente stai sbagliando qualcosa nell'utilizzo 
di FloodFill.
-- 
Stefano Frosio
www.esse-effe.com
 

 scelgo la TImage viene colorata di BIANCO.
Così a naso:
1) verifica le proprietà della dialog o del componente che ospita la TImage;
2) controlla se per caso non c'è un redraw o un invalidaterect dopo il 
fillrect, hai visto mai che appena lo colori di blu qualcosa da qualche 
parte chiama subito un bel redraw in bianco...


Ho provato a RIEMPIRE la TImage con una ellisse, l'ellisse blu viene
disegnata ma il testo della TImage rimane bianco, FloodFill() non
funziona.
Di seguito riporto il codice:
//--------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Image1->Canvas->Brush->Color = clBlue;
   Image1->Canvas->Ellipse(10,10,100,200);
   Image1->Canvas->FloodFill(0,0,clRed,fsSurface);
}
//--------------------------------------------------------
La cosa strana e' che il programma scritto con il C++ Builder 3, che
usa FloodFill(), anche se ri-compilato sotto C++ Builder 6 FUNZIONA.

 FUNZIONA.
Evidentemente c'è qualcosa di diverso nel programma, la versione 
di BCB non c'entra.
-- 
Stefano Frosio
www.esse-effe.com
 

 non c'entra.
Si infatti e' come dici te, grazie, sbagliavo nell'uso di FloodFill().
Il programma con il C++ Builder 3 l'ho scritto alcuni anni fa, mi ero
dimenticato di come usare FloodFill().