Bạn có chắc chắn muốn phân bổ tất cả các đối tượng đó không? Bằng cách nhìn vào cấu trúc bản ghi có vẻ như bạn muốn một đối tượng trên mỗi hàng - không phải cho mỗi ô. Để làm điều đó, bạn có ít nhất 2 tùy chọn:
- (Yêu thích của tôi vì tự do nó cung cấp) Bạn sử dụng TDrawGrid thay thế và vẽ nội dung của ô theo cách thủ công. Nó thực sự không phải là khó!
- Bạn tạo một đối tượng đóng gói bản ghi này. Đó là một điều dễ dàng là tốt, ví dụ như:
type
TMyRec= packed record
FullName : string[255];
RelativePath : boolean;
IsInvalid : boolean;
end;
TMyData = object (TObject)
private
FData: TMRec;
public
constructor Create(AData: TMyRec);
property FullName: String read FData.FullName write FData.FullName;
property RelativePath: Boolean read FData.RelativePath write FData.RelativePath;
property IsInvalid: Boolean read FData.IsInvalid write FData.IsInvalid;
end;
...
constructor TMyData.Create(AData: TMyRec);
begin
FData := AData;
end;
Bây giờ bất cứ khi nào bạn muốn để treo lên dữ liệu của mình vào lưới bạn chỉ cần đóng gói nó vào đối tượng đó và sau đó bạn có thể sử dụng bộ sưu tập Objects.
Bây giờ thay vì trải qua tất cả những rắc rối đó, chỉ cần tạo trình xử lý sự kiện cho TDrawGrid.DrawCell như
procedure TMainForm.GrdPathsDrawCell(Sender: Object; ...);
GrdPaths.Canvas.Handle sử dụng với DrawText hoặc nếu Unicode là cần thiết sử dụng DrawTextW (cả hai đến từ Windows API để có tấn ví dụ về cách sử dụng nó) và bạn sẽ giúp bạn và khách hàng của bạn tiết kiệm rất nhiều thất vọng, trí nhớ và trên tất cả - thời gian.
Nguồn
2008-12-30 20:47:26
Bạn tạo hồ sơ của mình như thế nào? Sử dụng New (PMyRec) sẽ mất một lượng thời gian tương tự (hoặc bất kỳ phương pháp nào khác tạo ra chúng trên đống) –