StringGrid - Grafika w komórkach

0

Witam - proboje wstawic w komórke StringGrida bitmape za pomoca nastepujacego kodu:

procedure TForm1.FormCreate(Sender: TObject);
var
grafika : TGraphic;
begin
grafika.LoadFromFile('DRUMHEAD.bmp');
stringgrid1.Col := 1;
stringgrid1.Row := 1;
stringgrid1.Canvas.Draw(0,0,grafika);
end;

  • niestety program generuje blad typu access violation
    Oczywiscie wiem o istnieniu DrawGrida - jednak bardzo czesto operuje na tekscie w tabeli i o wiele łatwiej jest to robic w StringGridzie.
    Czy ma ktos pomysl jak wstawic bitmape lub ikone w StringGrida ??
0

błąd powoduje brak:
grafica.Create

StringGrid to grid stringów - widzę że jeszcze tego nie zauważyłeś. :P

0
karmel napisał(a)

błąd powoduje brak:
grafica.Create

chyba miałeś na myśli

grafica := grafica.Create;

0

Zgada sie - mozna smiało powiedziec ze z tym konstruktorem to dalem D**SKA

StringGrid to grid stringów - widzę że jeszcze tego nie zauważyłeś.
Zauwazylem za to inną rzecz. Skoro StringGrid posiada wlasciwosc canvas, oraz procedure Draw (stringgrid1.Canvas.Draw(), gdzie jako parametry mozna wstawic x,y : integet oraz zmienna typy TGraphics), to dlaczego nie dalo by sie wstawic w komorke grafiki w postaci obrazka BMP. W wielu programach mozna spotkac w tabelach podobnych do StringGrida oprocz textu grafike wiec mysle ze juz na pewno ktorys z zaawansowanych forumowiczow rozwiazał ten problem. Bardzo mi zalezy na waszej pomocy w tej prawie, dlatego prosze o jakas rade lub pomysl lub podpowiedz.

0

Widze ze nikt nie potrafil odpowiedizec na postawiony problem. Jednak udało mi sie osiagnac sukces. Gdyby ktos miał podobny problem oto jak sobie z nim poradzic:
Na formularzu nalezy umiescic ImageList i wczytac do niego dowolny obraz/obrazy. Nastepnie umiesic nastepujacy kod w ZDARZENIU OnDrawCell W StringGridzie:
Oto on:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
index: integer;
begin
if (ACOl = 1) then
begin
with Sender as TStringGrid do
begin
Canvas.FillRect(Rect);
ImageList1.Draw(Canvas,rect.Left+15,rect.Top,0);
if gdFocused in State then
Canvas.DrawFocusRect(Rect);
end;
end;
end


Ponizszy kod we wszystkich wierszach kolumny pierwszej umiesci obrazy wstawione do ImageList pod indexem 0.
Mam nadzieje ze komus tym kodem pomoglem pzdr.

0

Pomogłeś. Dzięki!

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