Rysowanie ikon z ich nazwami w DBGrid

0

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?

0

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.

0

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ę.

0
 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)

0
lgPrzegladPism.ImageList_PlikiMale.Draw(gridZalaczniki.Canvas,rect.Left + intX, rect.Top + intY,Tu_Numer_Pod_Którym_Dodałeś);
0
_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.

0

Podejrzewam że robisz to w jakieś innej formatce, więc to lgPrzegladPism jest równe nil

0

@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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1