[delphi] drawgrid

Pagina: 1
Acties:
  • 103 views sinds 30-01-2008
  • Reageer

  • MisterE
  • Registratie: April 2002
  • Laatst online: 28-08 19:15
ik heb thumbs die ik wil weergeven.
daarvoor gebruik ik een TDrawGrid (ik neem aan dat dit het enige component is die dit kan)

iig, nou wil ik dus zo'n thumb in een bepaalde 'cell' zetten.

Ik heb nu dit:

procedure TForm1.Button2Click(Sender: TObject);
var
r : TRect;
begin
r := Drawgrid1.CellRect(3,3);
ImageList1.Draw(Drawgrid1.Canvas,r.Left,r.Top,0);
end;

Is er nog een andere manier, misschien iets dat ik meteen de canvas krijg van een cell??

  • Creepy
  • Registratie: Juni 2001
  • Nu online

Creepy

Tactical Espionage Splatterer

Een TStringGrid heeft een ondrawcell event, met als 1 van de paramters de rect van de te tekenen cell. Als je in dit event het tekenen van de cell afhandelt, kan je hele mooie effect krijgen (en dus alle soorten en maten tabellen tekeken in wat voor opmaak dan ook, inclusief bitmaps, meerdere regels text, randen, etc.)
Ik neem een dat de TDrawGrid ook wel zoiets heeft.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • MisterE
  • Registratie: April 2002
  • Laatst online: 28-08 19:15
ik vond dit in de help:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  index: integer;
begin
  index := aRow * DrawGrid1.ColCount + aCol;
  with Sender as TDrawGrid do
  begin
    Canvas.Brush.Color := clBackGround;
    Canvas.FillRect(Rect);
    ImageList1.Draw(Canvas,Rect.Left,Rect.Top,index);
    if gdFocused in State then
      Canvas.DrawFocusRect(Rect);
  end;

end;


Maar dit vult de cells al onstartup. Het punt is dat ik de waarden uitlees van een Array en aan de hand van die waarden word er bepaald welke bitmap weergegeven moet worden.

  • Kool
  • Registratie: September 1999
  • Niet online
Het grid meld het aan jou wanneer hij iets wil tekenen, en niet andersom, zoals alle OnDraw events in Delphi. Je moet dus even op een andere manier denken. In het Ondraw event krijg je b.v. door dat cell [1,1] getekend moet worden. Je checkt of deze bestaat in je array, zo ja teken je hem en anders niet.

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 01-09 21:18

Tomatoman

Fulltime prutser

1. Een TListView kan dit ook. Wel eerst de juiste ReportStyle kiezen.
2. Een TStringGrid is een descendant van TDrawGrid. Misschien is het handig om je control van TStringGrid te laten afstammen. Misschien heeft dat voordelen, maar het heeft zeker geen nadelen.

Een goede grap mag vrienden kosten.