pascalabcnet/TestSuite/CompilationSamples/DrawManField.pas
Бондарев Иван 59169b5168 ...
2015-06-27 18:33:50 +02:00

1031 lines
27 KiB
ObjectPascal

// Copyright (c) Ivan Bondarev, Stanislav Mihalkovich (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
unit DrawManField;
//#savepcu false
interface
uses GraphABC,DMCollect,System.Drawing;
const
IniFileName = 'ABC.ini';
colorTask = clRed;
colorSolve = clBlue;
var
BackColor: Color;
LabelReadyColor: Color;
LabelDoColor: Color;
LabelStopColor: Color;
LabelErrorColor: Color;
LabelBadEndColor: Color;
LabelGoodEndColor: Color;
ZazX1 := 18;
ZazY1 := 5;
ZazX2 := 10;
ZazY2 := 16;
type
TDMField = class
private
orx,ory: integer;
DMColl, DMMakerColl: SortedCollection;
DMX, DMY: integer;
PenIsUp: boolean;
MakerX, MakerY: integer;
MakerPenIsUp: boolean;
Interval: integer;
StepFlag: boolean;
movenum: integer;
CellSize,DimX,DimY,X0,Y0: integer;
DMPicture: Picture;
procedure Draw0;
procedure DrawFieldOnly;
procedure DrawXY;
public
// Äîáàâèë - ÌÀ
TaskName: string;
//
constructor Create(sizex,sizey,cellsize: integer);
procedure DrawCentered;
procedure Draw;
procedure DrawDMDrawing;
procedure DrawDMMakerDrawing;
procedure DMLine(x1,y1,x2,y2: integer; c: GraphABC.Color);
procedure Clear;
procedure SetSpeed(speed: integer);
property StepState: boolean read StepFlag;
property SizeX: integer read DimX;
property SizeY: integer read DimY;
function IsSolution: boolean;
procedure CheckTaskCall;
// ïðèìèòèâû äëÿ ïîñòàíîâùèêà (Maker)
procedure SetOrigin(x0,y0: integer);
procedure SetDim(DX,DY,CellSz: integer);
procedure TaskText(s: string);
procedure AddMakerLine(x1,y1,x2,y2: integer);
procedure MakerPenUp;
procedure MakerPenDown;
procedure MakerToPoint(x,y: integer);
procedure MakerOnVector(x,y: integer);
// ïðèìèòèâû äëÿ âûïîëíèòåëÿ
procedure DrawDM;
procedure ClearDM;
procedure PenUp;
procedure PenDown;
procedure ToPoint(x,y: integer);
procedure OnVector(x,y: integer);
procedure Pause;
procedure Start;
procedure Stop;
end;
procedure CorrectWHLT;
procedure SetTaskCall;
procedure DrawmanError(s: string);
procedure DrawmanError(s,s1: string);
var
DMField: TDMField;
///--
procedure __InitModule__;
///--
procedure __FinalizeModule__;
implementation
uses
System,
System.Windows.Forms,
System.Drawing,
GraphABCHelper,GraphABC,
IniFile;
type
TLabel = System.Windows.Forms.Label;
IniSettings = record
Width: integer;
Height: integer;
Left: integer;
Top: integer;
Speed: integer;
end;
var
BottomPanel: Panel;
panelBottomLeft: Panel;
buttonHelp: Button;
buttonExit: Button;
buttonStep: Button;
buttonStart: Button;
tableLayoutPanelBottom: TableLayoutPanel;
labelExState: TLabel;
groupBoxExState: GroupBox;
tableLayoutPanel1: TableLayoutPanel;
labelState: TLabel;
labelStep: TLabel;
trackBarSpeed: TrackBar;
labelSpeed: TLabel;
tableLayoutPanelTop: TableLayoutPanel;
labelZad: TLabel;
TaskIsCalled: boolean;
t: System.Threading.Thread;
//------------ Âñïîìîãàòåëüíûå -------------
procedure SetLabelStepText(s: string);
begin
labelStep.Text := s;
end;
procedure SetSafeLabelStepText(s: string);
begin
labelStep.Invoke(SetLabelStepText,s);
end;
procedure SetLabelZadText(s : string);
begin
labelZad.Text := s;
end;
procedure SetSafeLabelZadText(s: string);
begin
labelZad.Invoke(SetLabelZadText,s);
end;
procedure SetLabelExStateText(s: string);
begin
labelExState.Text := s;
end;
procedure SetTrackBarSpeedValue(speed: integer);
begin
trackBarSpeed.Value := speed;
end;
procedure SetSafeTrackBarSpeedValue(speed: integer);
begin
trackBarSpeed.Invoke(SetTrackBarSpeedValue,speed);
end;
//------------ TDMField -------------
constructor TDMField.Create(sizex,sizey,cellsize: integer);
begin
orx := 0;
ory := 0;
Self.CellSize := cellsize;
DimX := sizex;
DimY := sizey;
X0 := 0;
Y0 := 0;
DMX := 0;
DMY := 0;
PenIsUp := True;
MakerX := 0;
MakerY := 0;
MakerPenIsUp := True;
DMColl := new SortedCollection;
DMMakerColl := new SortedCollection;
DMPicture := new Picture(9,9);
// DMRedrawPicture := new Picture(9,9);
StepFlag := False;
movenum := 0;
end;
procedure TDMField.Draw;
begin
if (MainForm.windowstate=formwindowstate.Minimized) then
Exit;
LockDrawing;
ClearWindow(BackColor);
Draw0;
UnLockDrawing;
end;
procedure TDMField.DrawDMDrawing;
var i: integer;
begin
for i:=0 to DMColl.Count-1 do
DMLine(DMColl[i].p.x,DMColl[i].p.y,DMColl[i].p.x+DMColl[i].v.x,DMColl[i].p.y+DMColl[i].v.y,colorSolve);
end;
procedure TDMField.DrawDMMakerDrawing;
var i: integer;
begin
for i:=0 to DMMakerColl.Count-1 do
DMLine(DMMakerColl[i].p.x,DMMakerColl[i].p.y,DMMakerColl[i].p.x+DMMakerColl[i].v.x,DMMakerColl[i].p.y+DMMakerColl[i].v.y,colorTask);
end;
procedure TDMField.DrawCentered;
var w,h: integer;
begin
if (DimX=0) or (DimY=0) then
exit;
w := CellSize*DimX+ZazX1+ZazX2;
h := CellSize*DimY+ZazY1+ZazY2;
X0 := (GraphABCControl.Width - w) div 2;
Y0 := (GraphABCControl.Height - h) div 2;
Draw;
end;
procedure TDMField.DrawFieldOnly;
var ix,iy,w,h: integer;
begin
w := CellSize*DimX;
h := CellSize*DimY;
Brush.Color := clWhite;
FillRectangle(X0,Y0,X0+ZazX1+w+1+ZazX2,Y0+ZazY1+h+1+ZazY2);
Pen.Width := 1;
Pen.Color := RGB(191,191,191);
for ix:=0 to DimX do
Line(X0+ZazX1+ix*CellSize,Y0+ZazY1,X0+ZazX1+ix*CellSize,Y0+ZazY1+h);
for iy:=0 to DimY do
Line(X0+ZazX1,Y0+ZazY1+iy*CellSize,X0+ZazX1+w,Y0+ZazY1+iy*CellSize);
Pen.Color := clGray;
if (orx>-DimX) and (orx<0) then
Line(X0+ZazX1-orx*CellSize,Y0+ZazY1,X0+ZazX1-orx*CellSize,Y0+ZazY1+h);
if (ory>-DimY) and (ory<0) then
Line(X0+ZazX1,Y0+ZazY1+(DimY+ory)*CellSize,X0+ZazX1+w,Y0+ZazY1+(DimY+ory)*CellSize);
Pen.Color := clBlack;
DrawRectangle(X0+ZazX1,Y0+ZazY1,X0+ZazX1+w+1,Y0+ZazY1+h+1);
end;
procedure TDMField.DrawXY;
var x,y,ww: integer;
s: string;
interval: integer;
bs: BrushStyleType;
begin
interval:=2;
case CellSize of
0..1: interval:=20;
2..3: interval:=10;
4..5: interval:=5;
6..7: interval:=3;
8..100: interval:=2;
end;
bs := Brush.Style;
Brush.Style := bsClear;
Font.Name := 'MS Sans Serif';
Font.Size := 8;
for x:=0 to DimX do
if (x+orx) mod interval = 0 then
begin
s:=IntToStr(x+orx);
ww:=TextWidth(s);
// hh:=Canvas.TextHeight(s);
TextOut(X0+ZazX1+x*CellSize-ww div 2+1,Y0+ZazY1+DimY*CellSize+1+2,s);
end;
for y:=0 to DimY do
if (y+ory) mod interval = 0 then
begin
s:=IntToStr(y+ory);
ww:=TextWidth(s);
if (y+ory>=10) or (y+ory<0) then
Dec(ww);
// hh:=Canvas.TextHeight(s);
TextOut(X0+ZazX1-ww-3,Y0+ZazY1+(DimY-y)*CellSize+1-8,s);
end;
Brush.Style := bsSolid;
end;
procedure TDMField.DMLine(x1,y1,x2,y2: integer; c: GraphABC.Color);
begin
Line(X0+ZazX1+(x1-orx)*CellSize,Y0+ZazY1+(DimY-y1+ory)*CellSize,X0+ZazX1+(x2-orx)*CellSize,Y0+ZazY1+(DimY-y2+ory)*CellSize,c);
end;
procedure TDMField.Draw0;
begin
DrawFieldOnly;
DrawXY;
DrawDMMakerDrawing;
DrawDMDrawing;
DrawDM;
end;
procedure TDMField.SetDim(DX, DY, CellSz: integer);
begin
Clear;
DimX := DX;
DimY := DY;
CellSize := CellSz;
// DrawCentered;
end;
procedure TDMField.SetOrigin(x0,y0: integer);
begin
orx := x0;
ory := y0;
if orx<=-10 then
ZazX1 := 23
else ZazX1 := 18;
end;
procedure TDMField.AddMakerLine(x1,y1,x2,y2: integer);
begin
DMMakerColl.Insert(x1,y1,x2,y2);
end;
procedure TDMField.MakerPenUp;
begin
MakerPenIsUp := True;
end;
procedure TDMField.MakerPenDown;
begin
MakerPenIsUp := False;
end;
procedure TDMField.MakerToPoint(x,y: integer);
begin
if not MakerPenIsUp then
AddMakerLine(MakerX,MakerY,x,y);
MakerX := x;
MakerY := y;
end;
procedure TDMField.MakerOnVector(x,y: integer);
begin
MakerToPoint(MakerX+x,MakerY+y);
end;
procedure TDMField.DrawDM;
var
ZZ: integer;
r,r1: System.Drawing.Rectangle;
begin
if PenIsUp then
ZZ := 4
else ZZ := 2;
r := new System.Drawing.Rectangle(0,0,8,8);
r1 := r;
r1.Offset(X0+ZazX1+(DMX-orx)*CellSize-4+1,Y0+ZazY1+(DimY-DMY+ory)*CellSize-4+1);
DMPicture.CopyRect(r,GraphBufferBitmap,r1);
DrawRectangle(X0+ZazX1+(DMX-orx)*CellSize-ZZ+1,Y0+ZazY1+(DimY+ory-DMY)*CellSize-ZZ+1,X0+ZazX1+(DMX-orx)*CellSize+ZZ,Y0+ZazY1+(DimY+ory-DMY)*CellSize+ZZ);
end;
procedure TDMField.ClearDM;
begin
DMPicture.Draw(X0+ZazX1+(DMX-orx)*CellSize-4+1,Y0+ZazY1+(DimY-DMY+ory)*CellSize-4+1)
end;
procedure TDMField.PenUp;
begin
CheckTaskCall;
ClearDM;
PenIsUp := True;
DrawDM;
Inc(movenum);
SetSafeLabelStepText('Øàã: ' + IntToStr(movenum));
end;
procedure TDMField.PenDown;
begin
CheckTaskCall;
ClearDM;
PenIsUp := False;
DrawDM;
Inc(movenum);
SetSafeLabelStepText('Øàã: ' + IntToStr(movenum));
end;
procedure TDMField.ToPoint(x,y: integer);
begin
CheckTaskCall;
ClearDM;
if (x<orx) or (x>DimX+orx) or (y<ory) or (y>DimY+ory) then
DrawmanError('×åðòåæíèê: âûøåë çà ãðàíèöû ïîëÿ ðèñîâàíèÿ','Çàäàíèå ïðåðâàíî');
if not PenIsUp then
begin
DMLine(DMX,DMY,x,y,colorSolve);
DMColl.Insert(DMX,DMY,x,y);
end;
DMX := x;
DMY := y;
DrawDM;
Inc(movenum);
SetSafeLabelStepText('Øàã: ' + IntToStr(movenum));
end;
procedure TDMField.OnVector(x,y: integer);
begin
ToPoint(DMX+x,DMY+y);
end;
procedure TDMField.TaskText(s: string);
begin
SetSafeLabelZadText(s);
end;
procedure TDMField.SetSpeed(speed: integer);
begin
if speed<0 then speed := 0;
case speed of
0: Interval := 2*1024;
1: Interval := 2*512;
2: Interval := 2*256;
3: Interval := 2*128;
4: Interval := 2*64;
5: Interval := 2*32;
6: Interval := 2*16;
7: Interval := 2*8;
8: Interval := 2*4;
9: Interval := 2*2;
10: Interval := 2*1;
1000: Interval := 0;
end;
if speed>10 then speed := 10;
SetSafeTrackBarSpeedValue(speed);
end;
procedure TDMField.Stop;
begin
buttonStart.Text := 'Ïóñê (Enter)';
buttonStep.Enabled := True;
t.Suspend;
end;
procedure TDMField.Start;
begin
buttonStart.Text := 'Ñòîï (Enter)';
buttonStep.Enabled := False;
t.Resume;
end;
procedure TDMField.Pause;
begin
Sleep(Interval);
end;
procedure TDMField.Clear;
begin
DMColl.Clear;
DMMakerColl.Clear;
DMX := 0;
DMY := 0;
PenIsUp := True;
MakerX := 0;
MakerY := 0;
MakerPenIsUp := True;
end;
function TDMField.IsSolution: boolean;
begin
DMColl.Normalize;
DMMakerColl.Normalize;
{ for i:=0 to DMColl.Count-1 do
writeln(DMColl[i]);
writeln;
for i:=0 to DMMakerColl.Count-1 do
writeln(DMMakerColl[i]);
}
Result := IsEqualSC(DMColl,DMMakerColl) and (DMX=0) and (DMY=0) and (PenIsUp);
end;
procedure TDMField.CheckTaskCall;
begin
if not TaskIsCalled then
DrawManError('Ïðîöåäóðà Task âûçîâà çàäàíèÿ äîëæíà áûòü ïåðâîé','Âûïîëíåíèå ïðîãðàììû ïðåðâàíî');
end;
//--------- Èíòåðôåéñ è îáðàáîò÷èêè
procedure LoadIni(var settings: IniSettings);
var Ini: TIniFile;
begin
Ini := new TIniFile(IniFileName);
settings.Width := Ini.ReadInteger('DrawmanWindow','Width',679);
settings.Height := Ini.ReadInteger('DrawmanWindow','Height',490);
settings.Left := Ini.ReadInteger('DrawmanWindow','Left',(Screen.PrimaryScreen.Bounds.Width-settings.Width) div 2);
settings.Top := Ini.ReadInteger('DrawmanWindow','Top',(Screen.PrimaryScreen.Bounds.Height-settings.Height) div 2);
if settings.Width>screen.PrimaryScreen.Bounds.Width then
settings.Width := Screen.PrimaryScreen.Bounds.Width;
if settings.Height>Screen.PrimaryScreen.Bounds.Height then
settings.Height := Screen.PrimaryScreen.Bounds.Height;
if settings.Left < 0 then
settings.Left := 0;
if settings.Top < 0 then
settings.Top := 0;
if (settings.Left > Screen.PrimaryScreen.Bounds.Width - 10) or
(settings.Top > Screen.PrimaryScreen.Bounds.Height - 10) then
begin
settings.Left := 0;
settings.Top := 0;
end;
settings.Speed := Ini.ReadInteger('DrawmanWindow','Speed',3);
Ini := nil;
end;
procedure SaveIni;
var Ini: TIniFile;
begin
if (MainForm.Left<0) or (MainForm.Top<0) then
exit;
Ini := new TIniFile(IniFileName);
Ini.WriteInteger('DrawmanWindow','Width',MainForm.Width);
Ini.WriteInteger('DrawmanWindow','Height',MainForm.Height);
Ini.WriteInteger('DrawmanWindow','Left',MainForm.Left);
Ini.WriteInteger('DrawmanWindow','Top',MainForm.Top);
Ini.WriteInteger('DrawmanWindow','Speed',trackBarSpeed.Value);
Ini.Save;
end;
procedure buttonExitClick(o: Object; e: EventArgs);
begin
SaveIni;
halt;
end;
procedure ABCWindowResize(o: Object; e: EventArgs);
begin
CorrectWHLT;
end;
procedure MainWindowClose;
begin
SaveIni;
end;
procedure buttonStartClick(o: Object; e: EventArgs);
begin
if t.ThreadState = System.Threading.ThreadState.Suspended then
begin
DMField.StepFlag := False;
labelExState.Text := '×åðòåæíèê: Âûïîëíÿþ çàäàíèå';
DMField.Start;
end
else
begin
DMField.StepFlag := True;
labelExState.Text := '×åðòåæíèê: Îñòàíîâèëñÿ';
DMField.Stop;
end;
(GraphABCControl as Control).Focus;
end;
procedure buttonStepClick(o: Object; e: EventArgs);
begin
DMField.StepFlag := True;
t.Resume;
(GraphABCControl as Control).Focus;
labelExState.Text := '×åðòåæíèê: Êîìàíäà âûïîëíåíà';
end;
procedure buttonHelpClick(o: Object; e: EventArgs);
begin
MessageBox.Show('Ðàçðàáîò÷èê èñïîëíèòåëÿ ×åðòåæíèê: Ìèõàëêîâè÷ Ñ.Ñ., 2002-07 '#10#13#10#13+
'Êîìàíäû èñïîëíèòåëÿ ×åðòåæíèê:'#10#13+
' PenDown - îïóñòèòü ïåðî'#10#13+
' PenUp - ïîäíÿòü ïåðî'#10#13
' ToPoint(x,y) - ïåðåìåñòèòüñÿ â òî÷êó ñ êîîðäèíàòàìè (x,y)'#10#13+
' OnVector(a,b) - ïåðåìåñòèòüñÿ èç òåêóùåé òî÷êè íà âåêòîð (a,b)'#10#13
' a>0 - âïðàâî, a<0 - âëåâî, b>0 - ââåðõ, b<0 - âíèç'#10#13
' Speed(n) - óñòàíîâèòü ñêîðîñòü n (n=0..10)'#10#13
' Stop - îñòàíîâèòü ×åðòåæíèêà'#10#13
' Start - çàïóñòèòü ×åðòåæíèêà'#10#13,
'Èñïîëíèòåëü ×åðòåæíèê - Ñïðàâêà');
(GraphABCControl as Control).Focus;
end;
procedure trackBarSpeedScroll(o: Object; e: EventArgs);
begin
DMField.SetSpeed(trackBarSpeed.Value);
end;
procedure MainWindowKeyDown(o: Object; e: KeyEventArgs);
begin
if (e.KeyCode = Keys.Return) and buttonStart.Enabled then
buttonStartClick(o,e)
else if e.KeyCode = Keys.Escape then
buttonExitClick(o,e)
else if (e.KeyCode = Keys.Space) and buttonStep.Enabled then
buttonStepClick(o,e)
else if (e.KeyCode = Keys.Right) then
DMField.SetSpeed(trackBarSpeed.Value+1)
else if (e.KeyCode = Keys.Left) then
DMField.SetSpeed(trackBarSpeed.Value-1)
else if (e.KeyCode = Keys.F1) then
buttonHelpClick(o,e)
end;
procedure CorrectWHLT;
var mw,mh: integer;
begin
if (DMField.DimX=0) or (DMField.DimY=0) then
exit;
mw := (GraphABCControl.Width - Zazx1 - ZazX2 - 30) div DMField.DimX;
mh := (GraphABCControl.Height - ZazY1 - ZazY2 - 20) div DMField.DimY;
DMField.CellSize := min(mw,mh);
{ if DMField.CellSize mod 2 = 1 then
DMField.CellSize := DMField.CellSize - 1;}
DMField.DrawCentered;
end;
procedure SetTaskCall;
begin
TaskIsCalled := True;
end;
procedure InitControls;
begin
BottomPanel := new Panel();
panelBottomLeft := new Panel();
buttonHelp := new Button();
buttonExit := new Button();
buttonStep := new Button();
buttonStart := new Button();
tableLayoutPanelBottom := new TableLayoutPanel();
labelExState := new TLabel();
groupBoxExState := new GroupBox();
tableLayoutPanel1 := new TableLayoutPanel();
labelState := new TLabel();
labelStep := new TLabel();
trackBarSpeed := new TrackBar();
labelSpeed := new TLabel();
tableLayoutPanelTop := new TableLayoutPanel();
labelZad := new TLabel();
// CenterPanel := new Panel();
BottomPanel.SuspendLayout();
panelBottomLeft.SuspendLayout();
tableLayoutPanelBottom.SuspendLayout();
groupBoxExState.SuspendLayout();
tableLayoutPanelTop.SuspendLayout();
MainForm.SuspendLayout();
//
// BottomPanel
//
BottomPanel.Controls.Add(panelBottomLeft);
BottomPanel.Controls.Add(groupBoxExState);
BottomPanel.Dock := DockStyle.Bottom;
BottomPanel.Location := new Point(0, 407);
BottomPanel.Size := new Size(679, 83);
//
// panelBottomLeft
//
panelBottomLeft.Anchor := ((System.Windows.Forms.AnchorStyles)((integer(System.Windows.Forms.AnchorStyles.Bottom) or integer(System.Windows.Forms.AnchorStyles.Left))));
panelBottomLeft.Controls.Add(buttonHelp);
panelBottomLeft.Controls.Add(buttonExit);
panelBottomLeft.Controls.Add(buttonStep);
panelBottomLeft.Controls.Add(buttonStart);
panelBottomLeft.Controls.Add(tableLayoutPanelBottom);
panelBottomLeft.Location := new Point(0, 0);
panelBottomLeft.Size := new Size(474, 83);
//
// buttonHelp
//
buttonHelp.FlatStyle := System.Windows.Forms.FlatStyle.System;
buttonHelp.Location := new Point(359, 18);
buttonHelp.Size := new Size(107, 24);
buttonHelp.TabStop := false;
buttonHelp.Text := 'Ñïðàâêà (F1)';
// buttonHelp.UseVisualStyleBackColor := true;
//
// buttonExit
//
buttonExit.FlatStyle := System.Windows.Forms.FlatStyle.System;
buttonExit.Location := new System.Drawing.Point(241, 18);
buttonExit.Size := new System.Drawing.Size(107, 24);
buttonExit.TabStop := false;
buttonExit.Text := 'Âûõîä (Esc)';
// buttonExit.UseVisualStyleBackColor := true;
//
// buttonStep
//
buttonStep.FlatStyle := FlatStyle.System;
buttonStep.Location := new Point(123, 18);
buttonStep.Size := new Size(107, 24);
buttonStep.TabStop := false;
buttonStep.Text := 'Øàã (Space)';
// buttonStep.UseVisualStyleBackColor := true;
//
// buttonStart
//
buttonStart.FlatStyle := FlatStyle.System;
buttonStart.Location := new Point(5, 18);
buttonStart.Size := new Size(107, 24);
buttonStart.TabStop := false;
buttonStart.Text := 'Ïóñê (Enter)';
// buttonStart.UseVisualStyleBackColor := true;
//
// tableLayoutPanelBottom
//
tableLayoutPanelBottom.BackColor := LabelReadyColor;
tableLayoutPanelBottom.CellBorderStyle := System.Windows.Forms.TableLayoutPanelCellBorderStyle.Outset;
tableLayoutPanelBottom.ColumnCount := 1;
tableLayoutPanelBottom.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50));
tableLayoutPanelBottom.Controls.Add(labelExState);
tableLayoutPanelBottom.ForeColor := System.Drawing.Color.White;
tableLayoutPanelBottom.Location := new Point(4, 52);
tableLayoutPanelBottom.RowCount := 1;
tableLayoutPanelBottom.RowStyles.Add(new RowStyle(SizeType.Percent, 50));
tableLayoutPanelBottom.Size := new Size(463, 23);
//
// labelExState
//
labelExState.AutoEllipsis := true;
labelExState.AutoSize := true;
labelExState.Dock := DockStyle.Fill;
labelExState.FlatStyle := FlatStyle.System;
labelExState.Font := new System.Drawing.Font('Microsoft Sans Serif', 8, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
labelExState.Location := new Point(5, 2);
labelExState.Margin := new Padding(3, 0, 3, 3);
labelExState.Size := new Size(453, 15);
labelExState.Text := '×åðòåæíèê: Ãîòîâ';
labelExState.TextAlign := ContentAlignment.MiddleCenter;
//
// groupBoxExState
//
groupBoxExState.Controls.Add(tableLayoutPanel1);
groupBoxExState.Controls.Add(labelState);
groupBoxExState.Controls.Add(labelStep);
groupBoxExState.Controls.Add(trackBarSpeed);
groupBoxExState.Controls.Add(labelSpeed);
groupBoxExState.Dock := DockStyle.Right;
groupBoxExState.Location := new Point(475, 0);
groupBoxExState.Size := new Size(204, 83);
groupBoxExState.TabStop := false;
//
// tableLayoutPanel1
//
tableLayoutPanel1.BackColor := LabelDoColor;
tableLayoutPanel1.CellBorderStyle := TableLayoutPanelCellBorderStyle.Outset;
tableLayoutPanel1.ColumnCount := 1;
tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(System.Windows.Forms.SizeType.Percent, 50));
tableLayoutPanel1.Location := new Point(91, 52);
tableLayoutPanel1.RowCount := 1;
tableLayoutPanel1.RowStyles.Add(new RowStyle(System.Windows.Forms.SizeType.Percent, 50));
tableLayoutPanel1.Size := new Size(22, 22);
//
// labelState
//
labelState.AutoSize := true;
labelState.Location := new Point(6, 54);
labelState.Margin := new Padding(0);
labelState.Size := new Size(83, 17);
labelState.Text := 'Ñîñòîÿíèå:';
//
// labelStep
//
labelStep.BackColor := SystemColors.Control;
labelStep.Font := new System.Drawing.Font('Microsoft Sans Serif', 8, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
labelStep.ForeColor := System.Drawing.Color.Black;
labelStep.Location := new Point(130, 54);
labelStep.Size := new Size(66, 18);
labelStep.Text := 'Øàã: 0';
labelStep.TextAlign := ContentAlignment.MiddleLeft;
//
// trackBarSpeed
//
trackBarSpeed.CausesValidation := false;
trackBarSpeed.LargeChange := 1;
trackBarSpeed.Location := new Point(80, 11);
trackBarSpeed.Size := new Size(121, 53);
trackBarSpeed.TabStop := false;
//
// labelSpeed
//
labelSpeed.AutoSize := true;
labelSpeed.Location := new Point(6, 16);
labelSpeed.Margin := new Padding(0);
labelSpeed.Size := new Size(73, 17);
labelSpeed.Text := 'Ñêîðîñòü:';
//
// tableLayoutPanelTop
//
tableLayoutPanelTop.BackColor := System.Drawing.Color.FromArgb(238,238,238);
tableLayoutPanelTop.CellBorderStyle := TableLayoutPanelCellBorderStyle.Outset;
tableLayoutPanelTop.ColumnCount := 1;
tableLayoutPanelTop.ColumnStyles.Add(new ColumnStyle(System.Windows.Forms.SizeType.Percent, 50));
tableLayoutPanelTop.Controls.Add(labelZad);
tableLayoutPanelTop.Dock := DockStyle.Top;
tableLayoutPanelTop.Location := new Point(0, 0);
tableLayoutPanelTop.RowCount := 1;
tableLayoutPanelTop.RowStyles.Add(new RowStyle(System.Windows.Forms.SizeType.Percent, 50));
tableLayoutPanelTop.Size := new Size(679, 23);
//
// labelZad
//
labelZad.AutoEllipsis := true;
labelZad.AutoSize := true;
labelZad.Dock := DockStyle.Fill;
labelZad.FlatStyle := FlatStyle.System;
labelZad.Font := new System.Drawing.Font('Microsoft Sans Serif', 8, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
labelZad.ForeColor := SystemColors.HotTrack;
labelZad.Location := new Point(6, 3);
labelZad.Margin := new Padding(4, 1, 3, 0);
labelZad.Size := new Size(668, 14);
labelZad.Text := 'Çàäàíèå';
labelZad.TextAlign := ContentAlignment.MiddleLeft;
//
// ExecutorForm
//
MainForm.BackColor := SystemColors.Control;
// MainForm.ClientSize := new Size(679, 490);
MainForm.Controls.Add(tableLayoutPanelTop);
MainForm.Controls.Add(BottomPanel);
MainForm.MinimumSize := new Size(687, 240);
MainForm.Text := 'Èñïîëíèòåëü ×åðòåæíèê';
BottomPanel.ResumeLayout(false);
panelBottomLeft.ResumeLayout(false);
tableLayoutPanelBottom.ResumeLayout(false);
tableLayoutPanelBottom.PerformLayout();
groupBoxExState.ResumeLayout(false);
groupBoxExState.PerformLayout();
tableLayoutPanelTop.ResumeLayout(false);
tableLayoutPanelTop.PerformLayout();
MainForm.ResumeLayout(false);
MainForm.PerformLayout();
MainForm.KeyPreview := True;
MainForm.KeyDown += MainWindowKeyDown;
(GraphABCControl as Control).Resize += ABCWindowResize;
buttonStart.Click += buttonStartClick;
buttonStep.Click += buttonStepClick;
buttonHelp.Click += buttonHelpClick;
buttonExit.Click += buttonExitClick;
trackBarSpeed.Scroll += trackBarSpeedScroll;
end;
procedure NonSafeDrawmanError(s: string);
begin
buttonStart.Enabled := False;
buttonStep.Enabled := False;
tableLayoutPanel1.BackColor := LabelErrorColor;
labelExState.BackColor := LabelErrorColor;
labelExState.Text := s;
tableLayoutPanelBottom.BackColor := LabelErrorColor;
t.Suspend;
end;
procedure DrawmanError(s: string);
begin
buttonStart.Invoke(NonSafeDrawmanError,s);
end;
procedure DrawmanError(s,s1: string);
begin
//labelZad.Text := s1;
SetSafeLabelZadText(s1);
DrawmanError(s);
end;
var
settings: IniSettings;
procedure _InternalAssignBackColor;
begin
BackColor := MainForm.BackColor;
end;
procedure _HideInternal;
begin
MainForm.Hide;
end;
procedure _SetBoundsInternal;
begin
MainForm.Bounds := new System.Drawing.Rectangle(settings.Left,settings.Top,settings.Width,settings.Height);
end;
procedure _ShowInternal;
begin
MainForm.Show;
end;
procedure _SetButtonStartEnabled(value : boolean);
begin
buttonStart.Enabled := value;
end;
procedure _SetButtonStepEnabled(value : boolean);
begin
buttonStep.Enabled := value;
end;
procedure SetSafeTextLabelExState(s : string);
begin
labelExState.Text := s;
end;
// Äîáàâèë - ÌÀ
procedure ResDM(TaskName: string);
external '%PABCSYSTEM%\PT4\PT4PABC.dll' name 'resdm';
//
var __initialized := false;
procedure __InitModule;
begin
MainForm.Invoke(_HideInternal);
//MainForm.Hide;
MainForm.Invoke(_InternalAssignBackColor);
//BackColor := MainForm.BackColor;
LabelReadyColor := RGB(95,109,154);
LabelDoColor := RGB(95,109,154);
LabelStopColor := RGB(95,109,154);
LabelErrorColor := clRed;
LabelBadEndColor := clBlack;
LabelGoodEndColor:= RGB(0,156,0);
TaskIsCalled := False;
Brush.Color := MainForm.BackColor;
FillRectangle(0,0,1280,1024);
MainForm.Invoke(InitControls);
OnClose := MainWindowClose;
// CenterWindow;
DMField := new TDMField(0,0,50);
// DMField.DrawCentered;
t := System.Threading.Thread.CurrentThread;
LoadIni(settings);
DMField.SetSpeed(settings.Speed);
MainForm.Invoke(_SetBoundsInternal);
//MainForm.Bounds := new System.Drawing.Rectangle(settings.Left,settings.Top,settings.Width,settings.Height);
SetSmoothingOff;
//GraphABCControl.BackColor := MainForm.BackColor;
MainForm.Invoke(MainForm.Show);
end;
procedure __InitModule__;
begin
if not __initialized then
begin
__initialized := true;
GraphABC.__InitModule__;
__InitModule;
end;
end;
procedure __FinalizeModule;
begin
buttonStart.Invoke(_SetButtonStartEnabled, false);
buttonStep.Invoke(_SetButtonStepEnabled, false);
//buttonStart.Enabled := False;
//buttonStep.Enabled := False;
if DMField.DimX*DMField.DimY=0 then
DrawmanError('×åðòåæíèê: Íå âûçâàíà ïðîöåäóðà Task','Çàäàíèå îòñóòñòâóåò')
else if DMField.IsSolution then
begin
tableLayoutPanel1.BackColor := LabelGoodEndColor;
labelExState.BackColor := LabelGoodEndColor;
tableLayoutPanelBottom.BackColor := LabelGoodEndColor;
labelExState.Invoke(SetSafeTextLabelExState,'×åðòåæíèê: Çàäàíèå âûïîëíåíî');
//labelExState.Text := '×åðòåæíèê: Çàäàíèå âûïîëíåíî';
// Äîáàâèë - ÌÀ
try
ResDM(DMField.TaskName);
except
end;
//
end
else
begin
labelExState.Invoke(SetSafeTextLabelExState,'×åðòåæíèê: Ðàáîòà îêîí÷åíà, çàäàíèå íå âûïîëíåíî');
//labelExState.Text := '×åðòåæíèê: Ðàáîòà îêîí÷åíà, çàäàíèå íå âûïîëíåíî';
end;
end;
var __finalized := false;
procedure __FinalizeModule__;
begin
if not __finalized then
begin
__finalized := true;
__FinalizeModule;
end;
end;
initialization
__InitModule;
finalization
__FinalizeModule;
end.