Advertisement
Guest User

circuit.pas

a guest
Mar 6th, 2013
267
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.41 KB | None | 0 0
  1.  
  2. uses
  3. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  4. Dialogs, StdCtrls, Cell_Component, Bulb_Component, ExtCtrls;
  5.  
  6. type
  7. TCirForm = class(TForm)
  8. CellButton: TButton;
  9. BulbButton: TButton;
  10. CurrentLabel: TLabel;
  11. DrawTimer: TTimer;
  12. Button1: TButton;
  13. PaintBox1: TPaintBox;
  14. procedure FormCreate(Sender: TObject);
  15. procedure CellButtonClick(Sender: TObject);
  16. procedure BulbButtonClick(Sender: TObject);
  17. procedure DrawTimerTimer(Sender: TObject);
  18. procedure PaintBox1Click(Sender: TObject);
  19. procedure Button1Click(Sender: TObject);
  20. private
  21. { Private declarations }
  22. public
  23. { Public declarations }
  24.  
  25. Published
  26.  
  27. end;
  28.  
  29.  
  30. Type
  31. TComponent = Record
  32. Start,Finish:TPoint;
  33. ID: Integer;
  34. End;
  35.  
  36. Type
  37. TValue = Record
  38. Resistance, Volts : Double;
  39. ID:Integer;
  40. End;
  41.  
  42. TNodePtr = ^TNode;
  43. TNode = Record
  44. Component : TValue;
  45. NodePtr : TNodePtr;
  46. End;
  47.  
  48. var
  49. CirForm: TCirForm;
  50. Head,Tail:TNodePtr;
  51. LinePoints:Array[0..10] of TComponent;
  52. Cell:Array[0..10] of TBattery;
  53. Bulb:Array[0..10] of TBulb;
  54. ActiveConnection,Done:Boolean;
  55. Start, Finish: TPoint;
  56. YDistance,XDistance,Count,I,BulbCount,CellCount:Integer;
  57. Bitmap: TBitmap;
  58.  
  59. Procedure Drawlines;
  60. Procedure AddNode(Component : TValue);
  61.  
  62. implementation
  63.  
  64.  
  65. {$R *.dfm}
  66.  
  67.  
  68. Procedure DistanceBetweenPoints(Start,Finish:TPoint);
  69. begin
  70. YDistance:= Finish.Y-Start.Y;
  71. XDistance:= Finish.X-Start.X;
  72. end;
  73.  
  74.  
  75. procedure TCirForm.BulbButtonClick(Sender: TObject);
  76. begin
  77. Bulb[BulbCount]:= TBulb.Create(nil);
  78. Bulb[BulbCount].Top := Random(500);
  79. Bulb[BulbCount].Left := Random(500);
  80. Bulb[BulbCount].Parent := Self;
  81. Bulb[BulbCount].ID := BulbCount;
  82. BulbCount:= BulbCount + 1;
  83. end;
  84.  
  85. procedure TCirForm.CellButtonClick(Sender: TObject);
  86. begin
  87. Cell[CellCount]:= TBattery.Create(nil);
  88. Cell[CellCount].Top := Random(500);
  89. Cell[CellCount].Left := Random(500);
  90. Cell[CellCount].Parent := Self;
  91. Cell[CellCount].ID := CellCount;
  92. CellCount := CellCount + 1;
  93. end;
  94.  
  95. procedure TCirForm.Button1Click(Sender: TObject);
  96. begin
  97. DrawTimer.Enabled := True;
  98. end;
  99.  
  100.  
  101. procedure TCirForm.DrawTimerTimer(Sender: TObject);
  102.  
  103. begin
  104.  
  105. for I := 0 to Count do
  106. begin
  107. DistanceBetweenPoints(LinePoints[I].Start,LinePoints[I].Finish);
  108. PaintBox1.canvas.fillrect(rect(0,0,clientwidth,clientheight));
  109. PaintBox1.Canvas.MoveTo(LinePoints[I].Start.X,LinePoints[I].Start.Y);
  110. PaintBox1.Canvas.LineTo(LinePoints[I].Start.X+Round(XDistance/2),LinePoints[I].Start.Y);
  111. PaintBox1.Canvas.LineTo(LinePoints[I].Start.X+Round(XDistance/2),(LinePoints[I].Start.Y+YDistance));
  112. PaintBox1.Canvas.LineTo(LinePoints[I].Start.X+(XDistance),LinePoints[I].Finish.Y);
  113. Sleep(50);
  114. end;
  115.  
  116. end;
  117.  
  118. procedure TCirForm.FormCreate(Sender: TObject);
  119. begin
  120.  
  121. PaintBox1.Canvas.Handle := GetDC(0);
  122. PaintBox1.Canvas.Pen.Color := clBlack;
  123. PaintBox1.Canvas.Pen.Width := 2;
  124. PaintBox1.Canvas.Pen.Style := psSolid;
  125. ActiveConnection := False;
  126. InitLinkedList;
  127. Done := False;
  128. Count := 0;
  129. BulbCount :=0;
  130. CellCount := 0;
  131. end;
  132.  
  133. procedure TCirForm.PaintBox1Click(Sender: TObject);
  134.  
  135. begin
  136.  
  137. {PaintBox1.Canvas.MoveTo(Start.X,Start.Y);
  138. PaintBox1.Canvas.LineTo(Start.X+Round(XDistance/2),Start.Y);
  139. PaintBox1.Canvas.LineTo(Start.X+Round(XDistance/2),(Start.Y+YDistance));
  140. PaintBox1.Canvas.LineTo(Start.X+(XDistance),Finish.Y); }
  141.  
  142. end;
  143.  
  144. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement