Newsgroup: it.comp.lang.delphi
Titolo: Immagine su Tstringgrid

Buongiorno a tutti,
sono nuovo del gruppo ed anche alle prime armi con delphi.
Sto cercando di sviluppare una applicazione con delphi XE6.
Vorrei fare comparire in una colonna del Tstringrid una immagine (se associata al record che sto leggendo).
Come devo fare?
Grazie anticipate per chi volesse aiutarmi.
Finora sul web ho letto un po di cose e sto facendo così, ma non esce fuori niente come immagine:
....
....
type
  TFelRegProCol = class(TFbasedb)
.......
   Image2: TImage;
.......
procedure TFelRegProCol.leggilistecollegate;
begin
  riga:=0;
  colonna:=0;
  maxcols:=0;
  sg1.Cells[colonna,riga]:='Seq. Lista';
  colonna:=colonna+1;
  sg1.Cells[colonna,riga]:='N.Lis.Coll.';
  colonna:=colonna+1;
  sg1.Cells[colonna,riga]:='Partito';
  colonna:=colonna+1;
  sg1.Cells[colonna,riga]:='Sigla';
  colonna:=colonna+1;
  sg1.Cells[colonna,riga]:='Descrizione';
  colonna:=colonna+1;
  tablistecollegate.contalistecoll(codele, tipele, turno, codcandi);
  n:=tablistecollegate.aqt.fieldbyname('totcol').asinteger;
  setlength(ar1,n);
  tablistecollegate.read_view_liscolcan(codele, tipele, turno, codcandi);
  while tablistecollegate.aqt.Eof = false do
    begin
      riga:=riga+1;
      colonna:=0;
.....            
sg1.cells[colonna,riga]:=tablistecollegate.aqt.fieldbyname('par_descri').AsString;
      colonna:=colonna+1;
        if trimright(tablistecollegate.aqt.fieldbyname('par_icona').AsString) <> '' then
          begin
Bitmap.LoadFromFile(trimright(tablistecollegate.aqt.fieldbyname('par_icona').AsString));
            image2.Create(self);
            image2.Picture.LoadFromFile(trimright(tablistecollegate.aqt.fieldbyname('par_icona').AsString));
            ar1[riga-1]:=trimright(tablistecollegate.aqt.fieldbyname('par_icona').AsString);
 
            sg1.canvas.StretchDraw(sg1.CellRect(colonna, riga),image2.Picture.Bitmap);
            colonna:=colonna+1;
          end;
      if colonna > maxcols then
        maxcols:=colonna;
      tablistecollegate.aqt.Next;
    end;
  sg1.RowCount:=riga+1;
  sg1.ColCount:=maxcols+1;
  totlistecol:=riga;
  autosize;
end;

Ciao Roberto,
    mi permetto di darti un paio di suggerimenti .....
 
1) Evita di usare colonna := Colonna + 1;
Dato che le colonne le imposti tu e, puo' essere, che domani devi 
riarrangiare la griglia ... il tutto e' molto complicato.
Trovo, a titolo personale, mettere le colonne come costanti tipo
 
const ColLista = 1;
       ColSigla = 4;
 
sg1.Cells[colLista,riga]:='Seq. Lista';
sg1.Cells[colLista,riga]:='Sigla';
 
2) Dato che qualcuno ha gia' avuto il tuo stesso problema e, molto 
probabilmente, lo ha gia' risolto ... perche' non attingere ed 
utilizzare quella soluzione?
Nello specifico, anche se poco aggiornato, ti consiglio il sito
www.torry.net
 
che e' una miniera di componenti ma, come divevo, poco aggiornato.
Per le griglie, cosi' su due piedi, ti suggerisco di dare un'occhiata 
alla griglia che trovi in questo sito
www.scalabium.com
 
E' aggiornata, stabile, funziona bene ma (credo) e' un DBGrid.
Pregi: E' totalmente FREE e (quando la usavo) lavora bene ed e' facile 
da capire.
Svantaggi: Forse e' solo una DBGrid e lavora solo con i data base.
 
La seconda, che ti suggerisco, e' la griglia delle TMS: AdvStringGrid.
Pregi: Per me molti, stabile, lavora bene e ha la versione DB Aware per 
chi la vuole lavorare direttamente con i db
Svantaggi: E' Commerciale, quindi costicchia. Essendo scritta da TMS 
c'e' chi dice peste e corna di questi componenti ... ma per il prezzo 
che costano ... valgono quanto spendi.
 
C'e' una terza (super)griglia scritta da DevExpress.
Non usandola non so dirti pregi e difetti, ma costa molto ... tanto!
Hai comunque 30 giorni per valutarla
 
In caso di necessita' usa goole, inserendo
"delphi stringgrid bitmap"
ecco alcuni, delle decine di, risultati.
 
https://stackoverflow.com/questions/9924259/inserting-image-in-stringgrid-cell
 
 
https://stackoverflow.com/questions/61419682/how-do-i-properly-display-a-combined-image-in-a-delphi-tstringgrid-component
 
 
 
Buona navigazione
 
Ciao
Daniele
 
 

Ciao,
 
se vuoi farlo da codice devi intercettare e ridefinire l'evento
  TDrawCellEvent = procedure (Sender: TObject; ACol, ARow: Longint; Rect: TRect; State: TGridDrawState) of object;
  property OnDrawCell: TDrawCellEvent;
 
Io ho fatto la stessa cosa, ma per la DbGrid, quindi sono andato a ridefinire
  procedure DrawColumnCell(const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); dynamic;
 
Trovi molto codice online se cerchi l'argomento
 

Avevo avuto un problema del genere ho estrapolato la parte che ti interessa e ho fatto questo semplice progetto di test lo trovi a questo indirizzo 
https://u.pcloud.link/publink/show?code=XZQdPPXZkkt348GUctfzCkRzEX8TD4FlVbXV
 ciao
 

 image2.Create(self); 
 
A.