ich beschäftige mich gerade mit Grids und habe mir folgenden Beispielcode für ein DrawGrid gebastelt, nachem ich diverse Tutorials durchgesehen habe:
Code: Alles auswählen
unit DGTest;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Grids,
StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Pitch: TDrawGrid;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure PitchDrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect;
aState: TGridDrawState);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
pic : TBitmap;
X,Y : Integer;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
pic := TBitmap.Create;
pic.LoadFromFile('C:/.../Pictures/Player.bmp');
X := 1;
Y := 1;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Y := Y + Pitch.RowHeights[0];
Pitch.Invalidate;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
pic.Free;
end;
procedure TForm1.PitchDrawCell(Sender: TObject; aCol, aRow: Integer;
aRect: TRect; aState: TGridDrawState);
begin
Pitch.Canvas.Draw(X,Y,pic);
end;
end.
Der Code funktioniert und macht, was ich will (das Picture wird abwärts von einer Zelle zur nächsten bewegt). Trotzdem kommt mir das komisch vor:
Code: Alles auswählen
Y := Y + Pitch.RowHeights[0];
Ich bewege das Bild nicht von Zelle X nach Zelle Y, sondern ich benutze das Gitternetz der Zellen eher wie ein Koordinatensystem. Außerdem kommt es mir sehr unschön vor, dass meine Koordinaten für das bmp von diesem völlig getrennt und auch noch global sind. Meine Frage daher: Benutze ich das DrawGrid ungefähr so, wie es von seinen Autoren gedacht war oder habe ich mir da ein funktionierendes, aber nichts desto trotz krummes WorkAround konstruiert? Falls ja, wie würde man ein bmp denn "korrekt" über ein DrawGrid bewegen?