Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: Mimmo - Aprile 29, 2025, 03:05:24 pm

Titolo: Compatibilità delphi - lazarus, metodo GetColorResolvingParent
Inserito da: Mimmo - Aprile 29, 2025, 03:05:24 pm
Ciao,
qualcuno sa se in Delphi esiste una chiamata equivalente al GetColorResolvingParent delle LCL?
Chiedo a tutti anche se credo che di esperti di Delphi nel forum ce ne sia solo uno... @DragoRosso  ;)
Il motivo è che ho trovato un piccolo problema in un set di componenti su github (ATFlatControls) e la soluzione per lazarus passa per il metodo in oggetto ma forse non esiste un equivalente in Delphi per cui l'autore del progetto, volendo giustamente mantenere la compatibilità, sta cercando un workaround.
Titolo: Re:Compatibilità delphi - lazarus, metodo GetColorResolvingParent
Inserito da: DragoRosso - Aprile 29, 2025, 09:31:00 pm
In questo momento non ho Lazarus installato.

Se il problema è quello che hai segnalato su github (ora l'ISSUE è chiusa) la soluzione sarebbe semplicemente quella di usare la proprietà Color del componente.
Tale proprietà devrebbe automaticamente a runtime essere settata sul colore reale del component (sia ereditato che imposto a design time).

Provo a fare una prova, perchè occorre verificare con i temi (che non esistono in Lazarus) che valore questo assume.

In genere un componente deve soddisfare tutte le peculiarità del componente da cui deriva, e quindi anche i temi (ovvero gli STILI in Delphi)

Domani ti sò dire.
Titolo: Re:Compatibilità delphi - lazarus, metodo GetColorResolvingParent
Inserito da: DragoRosso - Aprile 29, 2025, 10:16:10 pm
La proprietà Color del controllo rispecchia il colore attuale del background del componente stesso, sia essa derivata dal Parent (tramite la proprieta ParentColor settata a True) che impostata.

Con eventuali Stili invece tale proprietà non ha significato in quanto lo stile ha un suo "motore" di disegno (il background può essere anche complesso con elementi decorativi).

Il componente che è rappresentato nella ISSUE a cui ti sei riferito in Delphi ha una modalità di riempimento di tipo "gradient" nativa (sia orrizontale che verticale) oltre a quella normale a tinta unita.

In ogni caso, se vuoi conoscere il colore del "Parent", riferisciti alla proprietà Brush dello stesso (ovviamente riferito al contesto desiderato):

Codice: [Seleziona]
Parent.Brush  <-- ritorna il colore ed il modo usato per dipingere il backgruond del controllo "padre".