Avatar billede nca Juniormester
08. december 2003 - 15:55 Der er 4 kommentarer og
1 løsning

Bitmap i StringGrid

Jeg har en StringGrid, hvor jeg lægger noget tekst ind. Nu vil jeg gerne lægge en bitmap ind sammen med teksterne. Jeg har samlet 4 bitmaps i en ImageList.
Jeg vil gerne ha' et eksempel som viser, hvordan jeg kan lægge billede nr. 3 fra min ImageList ind i celle(0,1) i min StringGrid.
Avatar billede Slettet bruger
08. december 2003 - 20:49 #1
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  B: TBitmap;
begin
  if (ACol = 1) and (ARow = 1) then
  begin
    B := TBitmap.Create;
    ImageList1.GetBitmap(3, B);
    StringGrid1.Canvas.FillRect(Rect);
    StringGrid1.Canvas.TextRect(Rect, Rect.Left + 2 + ImageList1.Width, Rect.Top + 2, StringGrid1.Cells[aCol, aRow]);
    StringGrid1.Canvas.Draw(Rect.Left+2, Rect.Top+2, B);
  end;
end;

Det skulle vist virke :)
Avatar billede nca Juniormester
09. december 2003 - 16:03 #2
Jeg laver en scanning af nogle maskiner. Resultatet af denne scanning samler jeg i en StringGrid. Jeg vil så gerne supplere scanningsresultatet med et ikon.
På linie 1, skal jeg måske bruge ikon nr.1 fordi scanningen gik godt. På linie 2 skal jeg måske bruge ikon nr.3, fordi maskinen ikke var på nettet, da scanningen blev udført.
Jeg har derfor brug for en generel procedure, som kan smide et billede ind i en StringGrid sammen med noget tekst. Alle billederne vil komme til at stå i samme kolonne.
Avatar billede Slettet bruger
09. december 2003 - 16:14 #3
Jeg tror ikke du kan få en procedure til at smide billederne i StringGriden uden de bliver slettet meget hurtigt igen, men måske virker det her:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  B: TBitmap;
begin
  if ACol = 0 then
    exit;
  B := TBitmap.Create;
  ImageList1.GetBitmap(ARow-1, B);
  StringGrid1.Canvas.FillRect(Rect);
  StringGrid1.Canvas.TextRect(Rect, Rect.Left + 2 + ImageList1.Width, Rect.Top + 2, StringGrid1.Cells[aCol, aRow]);
  StringGrid1.Canvas.Draw(Rect.Left+2, Rect.Top+2, B);
end;
Avatar billede nca Juniormester
09. december 2003 - 17:28 #4
Jeg har fundet en løsning på problemet :-)
I den celle, hvor jeg vil ha' et billede placeret, skriver jeg nummeret på billedet fra ImageList. Hvis jeg bruger nedenstående procedure, bliver nummeret udskiftet med billedet i OnDraw.
Hvis man ikke kommenterer TextRect ud, bliver nummeret skrevet sammen med billedet.


procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  B: TBitmap;
  Picture: Integer;
begin
  //Fyld cellen i kolonne 2 med nummeret på det billede, der skal viss fra ImageList
  If (ACol=2) then begin
    if TryStrToInt(StringGrid1.Cells[ACol,ARow],Picture) then begin
      B := TBitmap.Create;
      ImageList1.GetBitmap(Picture, B);
      StringGrid1.Canvas.FillRect(Rect);
      //StringGrid1.Canvas.TextRect(Rect, Rect.Left + 2 + ImageList1.Width, Rect.Top + 2, StringGrid1.Cells[aCol, aRow]);
      StringGrid1.Canvas.Draw(Rect.Left+2, Rect.Top+2, B);
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  StringGrid1.Cells[1,1]:='Test 1';
  StringGrid1.Cells[2,1]:='1';
  StringGrid1.Cells[1,2]:='Test 0';
  StringGrid1.Cells[2,2]:='0';
end;
Avatar billede nca Juniormester
09. december 2003 - 17:29 #5
>>hejhej
Tak for inspiration til løsning af problemet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester