mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-07 07:08:32 +02:00
113 lines
2.8 KiB
ObjectPascal
113 lines
2.8 KiB
ObjectPascal
program tw40019;
|
|
|
|
{$mode delphi}{$H+}
|
|
|
|
type
|
|
TArray4IntegerType = array[0..3] of Longint;
|
|
|
|
TPoint = record
|
|
X : Longint; Y : Longint;
|
|
end;
|
|
|
|
TRect = record
|
|
case Longint of
|
|
0: (Left,Top,Right,Bottom : Longint);
|
|
1: (TopLeft,BottomRight : TPoint);
|
|
2: (Vector:TArray4IntegerType);
|
|
end;
|
|
|
|
THead=class
|
|
end;
|
|
|
|
TDrawCellInfo=class
|
|
m1,m2:integer;
|
|
end;
|
|
|
|
TCanvas=class
|
|
procedure dosmth(arect:TRect);
|
|
end;
|
|
|
|
TCellState=set of (A,B,C,D);
|
|
TDrawCellState=set of (xA,xB,xC,xD);
|
|
|
|
{ TGridObject }
|
|
|
|
TGridObject=class
|
|
fCellInfo:TDrawCellInfo;
|
|
procedure GetCellInfo(ACol, ARow:integer; AState:TCellState; AColHead, ARowHead:THead; ACellInfo:TDrawCellInfo);
|
|
procedure DrawCell(APrevCol, APrevRow, ACol, ARow, ANextCol, ANextRow: Integer;
|
|
AColHead, ARowHead: THead;
|
|
AState: TCellState; ARect: TRect; DrawSelection: Boolean; ACanvas: TCanvas);overload;virtual;
|
|
procedure DrawCell(CellInfo: TDrawCellInfo; APrevCol, APrevRow, ACol, ARow, ANextCol, ANextRow: Integer;
|
|
AColHead, ARowHead: THead;
|
|
AState: TCellState; ARect: TRect; DrawSelection: Boolean; ACanvas: TCanvas);
|
|
|
|
end;
|
|
|
|
procedure TGridObject.GetCellInfo(ACol, ARow: integer; AState: TCellState;
|
|
AColHead, ARowHead: THead; ACellInfo: TDrawCellInfo);
|
|
begin
|
|
AColHead:=ARowHead;
|
|
ACellInfo.m1:=ACellInfo.m2;
|
|
end;
|
|
|
|
procedure TGridObject.DrawCell(APrevCol, APrevRow, ACol, ARow, ANextCol, ANextRow: Integer;
|
|
AColHead, ARowHead: THead;
|
|
AState: TCellState; ARect: TRect; DrawSelection: Boolean; ACanvas: TCanvas);
|
|
var
|
|
ACellInfo: TDrawCellInfo;
|
|
begin
|
|
if ARect.left<>1 then
|
|
halt(1);
|
|
if ARect.right<>2 then
|
|
halt(2);
|
|
if ARect.top<>3 then
|
|
halt(3);
|
|
if ARect.bottom<>4 then
|
|
halt(4);
|
|
ACellInfo := fCellInfo;
|
|
GetCellInfo(ACol, ARow, AState, AColHead, ARowHead, ACellInfo);
|
|
if not Assigned(ACellInfo) then
|
|
ACellInfo := fCellInfo;
|
|
DrawCell(ACellInfo,APrevCol,APrevRow,ACol,ARow,ANextCol,ANextRow,
|
|
AColHead,ARowHead,AState,ARect,false,nil);
|
|
end;
|
|
|
|
procedure TGridObject.DrawCell(CellInfo: TDrawCellInfo; APrevCol, APrevRow, ACol, ARow, ANextCol, ANextRow: Integer;
|
|
AColHead, ARowHead: THead;
|
|
AState: TCellState; ARect: TRect; DrawSelection: Boolean; ACanvas: TCanvas);
|
|
var
|
|
//CellInfo: TDrawCellInfo;
|
|
FrameFlags, FrameFlagsOuter, RegionIndex: Integer;
|
|
|
|
|
|
|
|
begin
|
|
if drawSelection then Acanvas.dosmth(Arect);
|
|
end;
|
|
|
|
procedure TCanvas.dosmth(arect:TRect);
|
|
begin
|
|
if arect.left<>1 then
|
|
halt(21);
|
|
if arect.right<>2 then
|
|
halt(22);
|
|
if arect.top<>3 then
|
|
halt(23);
|
|
if arect.bottom<>4 then
|
|
halt(24);
|
|
arect.left:=arect.top+arect.right
|
|
end;
|
|
|
|
var go:TGridObject;
|
|
r: TRect;
|
|
begin
|
|
go:=TGridObject.Create;
|
|
r.left:=1;
|
|
r.right:=2;
|
|
r.top:=3;
|
|
r.bottom:=4;
|
|
go.DrawCell(nil,0,0,0,0,0,0,nil,nil,[],r,true,TCanvas.create);
|
|
end.
|
|
|