Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: petrusic - Novembre 22, 2020, 05:23:40 pm

Titolo: [Risolto] colorare testo e sfondo di oggetti grafici
Inserito da: petrusic - Novembre 22, 2020, 05:23:40 pm
Mi rendo conto che senza il vostro aiuto non posso andare avanti.
Mi si presenta almeno un problema al giorno che diventa, regolarmente, un monte da scalare.
Da alcuni giorni cerco di colorare il testo di un TButton.Caption, ma niente da fare, non ci riesco.
Ho provato a cercare la soluzione fra le guide disponibili sul web, ma non sono capace a trovare quella giusta.
E allora come fare?
Visto che non c'è una proprietà corrispondente fra quelle disponibili per il TButton, penso che dovrei farlo da codice. Ma come?
Pensavo a qualcosa simile a:
"mioPulsante.proprietaColore = &H000080&    // colore blu"
oppure
"mioPulsante.Caption.proprietaColore = &H000080&
Ma qual'è la parolina magica che vale come "proprietaColore"?


Titolo: Re:colorare testo e sfondo di oggetti grafici
Inserito da: xinyiman - Novembre 22, 2020, 06:23:03 pm
Molto semplicemente vai dall'object inspector, seleziona il pulsante e poi vai in

Font->Color e selezioni quello che vuoi
Titolo: Re:colorare testo e sfondo di oggetti grafici
Inserito da: nomorelogic - Novembre 22, 2020, 06:25:42 pm
Lazarus demanda il rendering dei TButton al sistema operativo nel quale gira l'applicazione.
E' per questo che non puoi cambiare sfondo e colore del testo.

Se è sufficiente cambiare il colore del testo, puoi usare TSpeedButton, in alternativa puoi:
Titolo: Re:colorare testo e sfondo di oggetti grafici
Inserito da: petrusic - Novembre 22, 2020, 10:45:45 pm
Grazie per le vostre risposte.
Ho provato così: Ho sostituito il TButton con TSpeedButton, poi:
Codice: [Seleziona]
procedure TForm21.FormCreate(Sender: TObject);
begin
  PulsFine.Font.Color:= $003232E6;          // questo funziona. Il testo è comparso colorato in  rosso
  PulsFine.Color:= $0000FAD0;               // questo invece NON funziona. Lo sfondo non ha cambiato colore
end;
Ho capito solo in parte quello che mi avete suggerito, oppure quanto funziona per il testo non vale per lo sfondo?
Titolo: Re:colorare testo e sfondo di oggetti grafici
Inserito da: schumi - Novembre 23, 2020, 08:57:28 am
ciao,
se non ricordo male lo sfondo è legato al "tema" del SO, al tempo per fare bottoni colorati avevo usato quelli BGRAControls come suggerito da nomorelogic, li installi da OPM, devi solo perderci un po' di tempo a capire come funzionano (sfumature ecc) ma ci sono degli esempi oppure leggi qua https://wiki.freepascal.org/BGRAButton_Gallery
Titolo: Re:colorare testo e sfondo di oggetti grafici
Inserito da: petrusic - Novembre 23, 2020, 11:46:52 am
Ho capito. Speravo che fosse più semplice.
Penso che per ora rinunzierò a  BGRAControls.
 ::) ???
Titolo: Re:colorare testo e sfondo di oggetti grafici
Inserito da: petrusic - Agosto 23, 2021, 10:31:04 pm
Riprendo questa discussione perchè vorrei completare il mio escursus iniziale di apprendimento su lazarus free pascal.
Sfruttare l'ambiente grafico, significa, per me, attribuire caratteristiche peculiari per le schermate componenti in progetto che aiutano l'utente anche attraverso i colori di cui presenti all'interno dei vari controlli contenuti in una Form.
A causa dl caldo, ho trascurato la programmazione e Lazarus da qualche mese. Ora vorrei riprendere, ma non riesco a pensare ad un progetto con form ed alle sue aree grafiche , senza immaginarle colorate, mentre fino ad ora le ho potuto utilizzare tutte uniformemente grigie, con il testo sempre nero.
Tanto per fare un esempio, io vorrei riuscire ad ottenere effetti grafici identificativi all'occhio dell'utente come quelli che sono riuscito a realizzare nelle tante Form di un mio progetto scritto in Gambas e di cui riporto un'immagine esemplificativa per spiegare in maniera intuitiva  quello che voglio dire.
In Gambas tutto è molto semplice, In Lazarus posso ottenere un effetto simile?

La Form allegata può assumere , nell'area di digitazione, una colorazione di sfondo diversa, a seconda della natura del movimento corrente, passando dal rosa al celeste e viceversa, permettendo così di aiutare l'utente a capire, ad occhio, quale tipo di movimentazione sta impostando.

Titolo: Re:colorare testo e sfondo di oggetti grafici
Inserito da: DragoRosso - Agosto 24, 2021, 12:49:37 am
Ciao, alcuni controlli standard (ad esempio i TButton, come qualcuno ti ha già postato) vengono disegnati dal sistema operativo e con poche opzioni di variante, mentre altri controlli pur venendo sempre parzialmente disegnati dal sistema operativo hanno più opzioni. Ulteriormente su altri controlli a base grafica si può "disegnare" abbastanza liberamente.

In genere comunque su tutti i controlli di qualsiasi tipo si dovrebbe comunque poter effettuare il "rendering proprietario" (custom draw), opzione che consente di "disegnare" il controllo a libera fantasia dell'utente. (EDIT ..... in effetti non è proprio sempre così  ::) )

Ad esempio puoi facilmente riempire lo sfondo di un pulsante con un colore a tua scelta e usare un altro colore per la "caption", ma per fare un bel lavoro, con effetto 3d e sfumature come normalmente viene disegnato dal sistema operativo .... bhè ci vuole un pò di lavoro dietro.
Se poi pensiamo che gli stati grafici di un controllo sono innumerevoli allora ..... (N.B.: qualcuno dirà che gli stati sono 4 .... invece no ce ne sono molti di più perchè graficamente possono essere combinati).

Io ad esempio in diversi progetti uso una cella della griglia (TStringGrid) per disegnarci dentro due valori contemporaneamente, in particolare le tolleranze di una misura (ad esempio +0,015 e - 0,130) in modo che compaiano graficamente allineati al valore della misura scritta nella cella affiancata. L'effetto è molto bello e consente all'operatore di avere un quadro chiaro ed immediato della situazione. Uso il colore di sfondo (anzi i colori  degli sfondi) anche per identificare qual'è la tolleranza che eventualmente non è stata rispettata.

Ciò che vuoi fare, rispetto a quanto hai già fatto è facile e senza dispendio di energie.

Domani ti posto un progetto di base da cui puoi prendere spunto.

Bye
Titolo: Re:colorare testo e sfondo di oggetti grafici
Inserito da: DragoRosso - Agosto 24, 2021, 01:47:16 am
Progetto base, ma molto base per la modifica dei font e dei colori di una TEdit e un TPanel "in corso d'opera".

Ciao
Titolo: Re:colorare testo e sfondo di oggetti grafici
Inserito da: petrusic - Agosto 25, 2021, 07:28:51 pm
ti posto un progetto di base da cui puoi prendere spunto.
...
ti posto un progetto di base da cui puoi prendere spunto
Si, ho visto: Grazie.

Per le mie necessità attuali, quello che mi hai suggerito col tuo esempio andrebbe bene.
Mi è sembrato molto interessante il metodo per cambiare lo stile ed il colore del testo.
Ho fatto qualche prova, ma non riesco a cambiare, in un controllo di tipo TListBox, il Font della riga puntata col click del mouse. Sono riuscito a cambiare il Font di tutti i suoi componenti, ma non ho trovato nessuna proprietà che mi permettesse di limitarlo ad una sola riga.
Ma forse sono io che non ho capito come agire.
Ecco il codice ottenuto
Codice: [Seleziona]
procedure TForm1.lsDirClick(Sender: TObject);
var
  ixLsDir: Integer = 0;
  FontCorr: TFont; 

begin
  ixLsDir:= lsDir.ItemIndex;

  case   ixLsDir of
      0:
        begin
          FontCorr.Color := clRed;
          (Sender as TListBox).Font.Assign(FontCorr);
        end;
      else
        begin
          FontCorr.Color := clBlack;
          (Sender as TListBox).Font.Assign(FontCorr);
        end;
  end;
end;                                                                     
Ho allegato le due immagini coi colori di testo impostati a seconda della riga selezionata. Come è visibile, cambiando il colore in tutte le righe, non è possibile capire quale sia quella selezionata
Titolo: Re:colorare testo e sfondo di oggetti grafici
Inserito da: DragoRosso - Agosto 25, 2021, 11:27:21 pm
Ciao, immagino che tu voglia qualcosa di simile ...

Le freccine indicano le righe selezionate ... clonato da una idea di @Stilgar

Nel sorgente è spiegato il tutto da cui puoi prendere spunto.

Come vedi funziona anche la selezione multipla

bye
Titolo: Re:colorare testo e sfondo di oggetti grafici
Inserito da: petrusic - Agosto 28, 2021, 11:11:19 pm
@ DragoRosso
Ho guardato con attenzione il tuo programmino d'esempio e l'ho trovato veramente di grande aiuto.
Penso di avere capito come utilizzare al meglio la selezione delle righe interne ai controlli di tipo TListBox.
Grazie, grazie, grazie.