[Risolto] Modificare Font in stringGrid di Lazarus Linux

di il
5 risposte

[Risolto] Modificare Font in stringGrid di Lazarus Linux

Scrivo in questa sezione perchè non ho trovato la specifica per Lazarus.

Sto costruendo un programma, in ambiente Linux Lazarus , che esegue una ricerca di record dentro un DB e compila una StingGRid.

Alla fine della compilazione devo aggiungere una riga che riporta, nella prima di tre celle della riga, la costante "Totali" e nelle successive due la sommatoria di ciascun importo contenuto nelle celle delle rispettive colonne.

Tutto fatto e funzionante. Vorrei però aggiungere un effetto, diciamo speciale: Colorare lo sfondo ed il testo di ciascuna delle tre celle e farne apparire in grassetto il testo .

Ho visto anche che potrei sfruttare l'evento OnPrepareCanvas richiamandone da codice la relativa procedura. Essa però presenta i suoi parametri

procedure TForm1.StringGrid1PrepareCanvas(sender: TObject; aCol,
  aRow: Integer; aState: TGridDrawState);
begin

end; 
Dovendo inserire detti parametri nell'istruzione di chiamata, ho cercato di capire, senza riuscirvi, cosa scrivere come primo e ultimo parametro:

 begin
 . . .
     procedure CompilaStringGrid( sender (?), numeroColonna, numeroRiga,  aState (?))
. . .
end;     

5 Risposte

  • Re: [Risolto] Modificare Font in stringGrid di Lazarus Linux

    Hai provato l'evento OnDrawCell

    Una cosa del tipo, se ho capito bene:
    [CODE] procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); Var c1 : Integer; txt : String; ts : TTextStyle; begin if (aRow=4)and(aCol=1) Then Begin StringGrid1.Canvas.Brush.Color := clgreen; StringGrid1.Canvas.FillRect(aRect); txt := 'Tot:'; for c1 := 0 to 3 do txt := txt + StringGrid1.Cells[1,c1]; ts.Alignment := taLeftJustify; ts.Layout := tlCenter; ts.SingleLine := False; ts.Clipping := False; ts.ExpandTabs := False; ts.ShowPrefix := False; ts.Wordbreak := False; ts.Opaque := True; ts.SystemFont := True; ts.RightToLeft := False; ts.EndEllipsis := False;; StringGrid1.Canvas.TextRect(aRect,aRect.Left,aRect.Top,txt,ts); end; end; procedure TForm1.Button1Click(Sender: TObject); begin StringGrid1.Cells[1,1] := 'aaa'; StringGrid1.Cells[1,2] := 'bbb'; StringGrid1.Cells[1,3] := 'ccc'; StringGrid1.Cells[1,4] := 'ddd'; end;
  • Re: [Risolto] Modificare Font in stringGrid di Lazarus Linux

    dobby ha scritto:


    Hai provato l'evento OnDrawCell
    [...]
    Mi associo al suggerimento di usare la tecnica del cosiddetto owner drawing, ovvero "disegno fai da te".

    Intercettando l'evento, puoi usare proprietà e metodi del Canvas per disegnare nella cella virtualmente tutto ciò che vuoi.

    Comprendo che, per certe semplici esigenze, diventa un po' una scocciatura doversi sobbarcare questo onere, però alla fine non è nemmeno complesso da codificare (vedi l'esempio che ti è stato fornito).

    Ciao!
  • Re: [Risolto] Modificare Font in stringGrid di Lazarus Linux

    @ dobby e MARCO BREVEGLIERI

    Il mio problema è che io non devo intercettare alcun evento, ma devo solamente richiamare la procedura da codice, qualunque sia la procedura. L'importante è che mi permetta di impostare bold nel Font della cella e colorare sia il testo che lo sfondo.

    Purtroppo non ho capito cosa scrivere nei parametri di richiamo della procedura. Quindi se la procedura è StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState), per restare nell'esempio di dobby,

    ed io la devo richiamare con
     StringGrid1DrawCell( parametro1(TObject), numero_colonna, numero_riga, parametro4(aRect), parametro5(aState))
    cosa devo scrivere come parametro1(TObject), parametro4(aRect), parametro5(aState)?

    Spero di avere chiarito meglio la mia difficoltà.
  • Re: [Risolto] Modificare Font in stringGrid di Lazarus Linux

    petrusic ha scritto:


    @ dobby e MARCO BREVEGLIERI
    Il mio problema è che io non devo intercettare alcun evento, ma devo solamente richiamare la procedura da codice, qualunque sia la procedura.
    No, tu DEVI intercettare quell'evento, che viene scatenato quando la griglia sta per disegnare una specifica cella, allo scopo di "prendere il controllo" della fase di disegno e scrivere quello che deve apparire usando il Font e gli stili che preferisci, o virtualmente tracciando qualsiasi cosa: rettangoli, cerchi, testi, poligoni, ecc.

    Invocare manualmente quel metodo non ha alcun senso, che è il motivo per cui risultano altrettanto privi di senso i parametri che vuoi passare.

    Ciao!
  • Re: [Risolto] Modificare Font in stringGrid di Lazarus Linux

    Alka ha scritto:


    tu DEVI intercettare quell'evento, che viene scatenato quando la griglia sta per disegnare una specifica cella, allo scopo di "prendere il controllo" della fase di disegno e scrivere quello che deve apparire usando il Font e gli stili che preferisci
    Hai ragione. Avevo dimenticato che l'evento OnDrawCell viene scatenatoi automaticamente al momento della compilazione della data cella.

    Non ho ancora preso confidenza con gli eveti di una StringGrid.
    Modifica fatta: funziona.
Devi accedere o registrarti per scrivere nel forum
5 risposte