Problema con listbox

Buon giorno
ho un problema con una listbox.
applicazione per raspberry linux

carico i dati da una tabella mysql tramite un ciclo, la row composta da 9 colonne di cui nella 5 devo posizionare un immagine salvata in blob nel database e ridurla

ora il problema che quando carico le row nella listbox alla colonna 5 trovo sempre %.png

dove sbaglio ?
allego codice

rs1 = profilalex.SQLSelect(“SELECT * FROM prioritaattrezzaggio”)

Listbox2.DeleteAllRows

If rs1 <> Nil then
while not rs1.eof
Listbox2.AddRow “”

for i = 1 to rs1.FieldCount
  Listbox2.Cell( Listbox2.LastIndex, i-1 ) = rs1.IdxField(i).Value
next
rs1.MoveNext

wend
rs1.close
end if

Uno spunto su cui lavorare…

A livello superiore alla listbox, per esempio nella window o nel containerControl che contengono la listbox, creerei una propriet di nome “p” e tipo picture

Nell’evento “CellTextPaint” della listbox metterei un codice del tipo:

if column = 4 then g.DrawPicture(p, 0, 0)
Return True

Lavorando con i parametri del metodo DrawPicture puoi ottimizzare posizionamento e ridimensionamento dell’immagine

Nel ciclo che carica i campi del record, inserirei questo codice

if i = 5 then p = rs1.IdxField(i)

Cos facendo, ad ogni “riempimento” di cella, viene innescato l’evento CellTextPaint, il cui codice per prevede di essere eseguito solo per la quinta colonna. Nel caso della quinta colonna, la cella verr riempita con l’immagine di p, precedentemente riempita con il valore blob proveniente dal db. Non sono certo se la sintassi “p = rs1.IdxField(i)” funzioni o se vada eventualmente corretta/implementata.

Puoi anche utilizzare invece che la propriet p il cellTag della cella in modo da avere immagini diverse a seconda della riga.

Per il caricamento dell’immagine devi utilizzare FromData.

In pratica nel tuo loop:

while not rs1.eof Listbox2.addRow "" for i=1 to rs1.fieldCount if i=5 then //o il tuo numero di campo dell'immagine Listbox2.cellTag(Listbox2.LastIndex, i-1)=Picture.FromData(rs1.IdxField(i).NativeValue) else Listbox2.cell(Listbox2.LastIndex, i-1)=rs1.IdxField(i).StringValue end if next rs1.moveNext wend

Come suggerito da @PietroBeccegato poi nell’evento cellTextPaint:

if column=4 and me.cellTag(row, column)<>nil then g.DrawPicture(me.cellTag(row, column), 0, 0 end if
Puoi anche leggere le dimensioni dell’immagine e ridimensionarla in base alla altezza della riga e la larghezza reale della colonna (non usare le dimensioni di g che sono relative alla porzione visibile della cella quindi fuorvianti in questo caso)

Riesco a vedere le immagini inserite .

Grazie a tutti e due.
Alessandro

ciao ho un altro problema ora non riesco a ricaricare l’immagine dal db per fare l’anteprima nel canvas

qualche consiglio grazie

Se gi valorizzi la propriet backdrop del canvas, ma non vedi l’immagine, forse sufficiente richiamare il metodo canvas.Refresh subito dopo la valorizzazione della propriet backdrop.

no il problema che non riesco a caricarlo mi da errore canvas1.backdrop nil

Vado a naso, ma forse questo pu essere un punto di partenza; nel caso, confidiamo in S. Antonio (Rinaldi).

dim mb As MemoryBlock
mb = rs1.Field("nomeCampoBlob").NativeValue

dim p as Picture
p = p.FromData(mb)

canvas.backdrop = p

good funziona
grazie per l’aiuto.