08. december 2003 - 15:55Der 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.
Danmark vil mindske afhængigheden af globale techgiganter, men det kræver mere end politiske formuleringer og strategier, understreger PROSA’s formand Niels Bertelsen.
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;
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.
Synes godt om
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;
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;
>>hejhej Tak for inspiration til løsning af problemet.
Synes godt om
Ny brugerNybegynder
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.