Znalazłem wiele przykładów jak wyciągnąć ikonę z pliku, ale nigdzie nie mogę znaleźć przykładu jak wyświetlić w gridzie nazwę pliku razem z ikoną (w jednej komórce).
Wszędzie są przykłady rysowania obrazka w osobnym polu.
Pomożecie?
Rysujesz w tym polu obrazek, tak jak w tych przykładach po czym rysujesz tekst:
http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Graphics_TCanvas_TextRect@TRect@Integer@Integer@string.html
Ciągle się z tym męczę.
Najpierw wyciągam ikone, dodaję ją do ImageList:
(ImageList_PlikiMale.AddIcon(MyIcon)
Ale później przy rysowaniu potrzebny jest obrazek TBitmap.
Ale później przy rysowaniu potrzebny jest obrazek TBitmap.
Zwykłe płótno klasy TCanvas
posiada metodę Draw
- jej możesz przekazać dowolną grafikę, w tym także ikonę.
function DodajIkonePliku(plik : string) : integer;
var
MyIcon: TIcon;
bmpImage: tBitmap;
Filter: Word;
begin
Filter:=0;
MyIcon:=TIcon.Create;
MyIcon.Handle:=ExtractAssociatedIcon(hInstance, PChar(plik), Filter);
bmpImage := tBitmap.Create;
bmpImage.Height := MyIcon.Height;
bmpImage.Width := MyIcon.Width;
bmpImage.Canvas.Draw(0, 0, MyIcon);
Result := ImageList_PlikiMale.Add(bmpImage,nil);
bmpImage.Free;
//Result := ImageList_PlikiMale.AddIcon(MyIcon);
MyIcon.Free;
//Result := Image1.Canvas.Draw(0, 0, MyIcon);
end;
zrobiłem taką funkcję która zwraca index dodanej ikony
A później na zdarzeniu gridDrawColumnCell próbuję odczytać te obrazki:
var
bmpImage: tBitmap;
intX, intY: Integer;
begin
inherited;
{
if Column.FieldName = 'nazwa' then
begin
if gridZalaczniki.DataSource.DataSet.FieldByName('ikona').IsNull then Exit;
with gridZalaczniki.Canvas do
begin
fillRect(rect);
bmpImage := tBitmap.Create;
try
lgPrzegladPism.ImageList_PlikiMale.GetBitmap(gridZalaczniki.DataSource.DataSet.FieldByName('ikona').Value,bmpImage);
intX := ((rect.Right - rect.Left) div 2) - (bmpImage.Width div 2);
intY := ((rect.Bottom - rect.Top) div 2) - (bmpImage.Height div 2);
draw(rect.Left + intX, rect.Top + intY, bmpImage);
finally
bmpimage.Free;
end;
end;
end;
I tu mam zawsze Access (na linii GetBitmap)
lgPrzegladPism.ImageList_PlikiMale.Draw(gridZalaczniki.Canvas,rect.Left + intX, rect.Top + intY,Tu_Numer_Pod_Którym_Dodałeś);
_13th_Dragon napisał(a):
lgPrzegladPism.ImageList_PlikiMale.Draw(gridZalaczniki.Canvas,rect.Left + intX, rect.Top + intY,Tu_Numer_Pod_Którym_Dodałeś);
Nadal mam Accesa
Nie wiem czy dobrze zapisuję do ImageList.
Podejrzewam że robisz to w jakieś innej formatce, więc to lgPrzegladPism
jest równe nil
@Pele2 - trochę mało kodu podałeś, więc ciężko stwierdzić dlaczego leci wyjątek; W każdym razie przede wszystkim sprawdź debuggerem w której linijce występuje błąd i sprawdź wartości zmiennych w oknie Watches
.