Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    piccaweb
    Guest

    Colorare celle - Delphi

    Ciao a tutti!
    Come posso colorare una cella di un det. colore del componente DrawGrid e sciverci dentro?

    GRazie :quote:

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    CustomDraw

    Devi intercettare l'evento che viene generato quando sta per essere disegnata la cella.
    codice:
    procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
      DrawGrid1.Canvas.TextOut(Rect.Left, Rect.Top, 'yyy');
    end;
    Utilizzando la proprietà Canvas del controllo DrawGrid, puoi tracciare il contenuto della cella corrente, indicata dai parametri ACol e ARow passati alla routine di gestione dell'evento. Impostando la proprietà DefaultDrawing a True, il controllo provvederà al tracciamento standard dell'aspetto delle celle, a cui potrai aggiungere i tuoi effetti speciali personali. Disabilitando DefaultDrawing (False), dovrai accollarti anche il compito di disegnare il corpo della cella, che a volte può essere utile a seconda del controllo visuale che stai cercando di ottenere.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    piccaweb
    Guest
    Ti ringrazio, ma come posso colorare la cella?
    Ciao

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Ops...

    Ops, hai ragione, ho dimenticato il "succo" del topic, il dettaglio più importante.

    Per colorare la cella, modifichi le impostazioni della proprietà Brush del Canvas e tracci un rettangolo in questo modo:
    codice:
    procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
    begin
      with TDrawGrid(Sender) do
      begin
        Canvas.Brush.Color := clRed;
        Canvas.FillRect(Rect);
      end;
    end;
    Se devi visualizzare stringhe di testo, prediligi la StringGrid, che si comporta comunque in modo analogo.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    piccaweb
    Guest
    Ho provato il codice ma colora tutte le celle della DrawGrid, a me serve una cosa diversa!
    Dovrei gestire un calendario mensile: le celle sono i giorni e in base ai giorni della settimana la cella corrsipondente si colora di Verde o di Giallo!

    Spero di essermi spiegato!
    e spero che tu mi possa spiegare...


  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Beh, io ti ho mostrato come colorare le celle in modo generico...non potevo sapere lo scopo per il quale tu avresti dovuto colorarle...ci possono essere milioni di possibilità!

    Come avrai notato, l'evento OnDrawCell ti passa come parametri l'indice di riga e colonna della cella che sta per essere disegnata. Puoi utilizzare quegli indici per individuare esattamente quale cella sta per essere disegnata. A questo punto, utilizzando i metodi e le proprietà del Canvas del controllo (vedi la descrizione nella Guida in linea di Delphi), puoi colorare la cella, copiarvi immagini, scrivere del testo al suo interno, ecc.
    Nel tuo caso, forse l'approccio più semplice è quello di verificare il contenuto della cella già inizializzata con il giorno (ad esempio, "L", "M", "G", ecc.) e impostare il colore di conseguenza nel modo in cui ti ho indicato nella risposta precedente.

    Spero di essermi spiegato adeguatamente.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    piccaweb
    Guest
    Ti sei spiegato nel migliore dei modi!
    Da quanto ho capito allora posso scrivere all'interno dell'evento OnDrawCell
    if ARow = 1 Then
    begin
    Canvas.Brush.Color := clBlue;
    Canvas.FillRect(Rect);
    end;
    ...e mi dovrebbe colorare la riga 1 di blu, o sbaglio?

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Esattamente!
    Mmm...non ricordo se le righe vengono numerate partendo da 0, ma penso che ti basti eseguire il programma una volta o consultare la Guida in linea per scoprirlo immediatamente.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9
    piccaweb
    Guest
    Grazie di tutto!
    Cmq la prima riga ha indice 0!
    Ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.