经典面试问题:12小球问题算法(源码)
2008-01-03 09:37
591 查看
(文档请参考:http://blog.csdn.net/CXXSoft/archive/2006/09/28/1299731.aspx)3、 运行效果
![](http://p.blog.csdn.net/images/p_blog_csdn_net/CXXSoft/exe0.jpg)
4、 算法源码
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
作品名称: 小球问题通用解决方案
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
开发作者: 成晓旭
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
开发时间: 2003年01月22日
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
完成时间: 2003年01月23日
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
修改时间1: 2003年11月14日
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
增加用户问题条件设置绘制方法
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
修改时间2: 2003年11月18日
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
增加比较过程的记录功能
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
unit Common;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
interface
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
uses
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Windows,SysUtils,Classes,Graphics,BallType;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//清除画面方法
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure ClearCanvas(aCanvas: TCanvas; aRect: TRect);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//小球问题条件设置方法
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Draw_Ball_Config(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
AllBall:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ACanvas:TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aClearRect: TRect;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bShowTrace:Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//小球问题解决方法
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Serach_Error_Ball(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
AllBall:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ACanvas:TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aClearRect: TRect;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bShowTrace:Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog1:AnsiString;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2:AnsiString;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog3:AnsiString;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
implementation
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//单元内部常量定义
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
const
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Fir_Pivot_X = 200;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Fir_Pivot_Y = 80;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Hint_X = 10;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
One_DrawDelta = 140;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
One_PreDelta = 70;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
One_FroDelta = 30;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strADyB = '比较:A端(重) > B端(轻)' + CHR(13) + CHR(10);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strAXDB = '比较:A端 = B端' + CHR(13) + CHR(10);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strAXyB = '比较:A端(轻) < B端(重)' + CHR(13) + CHR(10);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A_Team = 'A 组:';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
B_Team = 'B 组:';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
preTail0 = '号球' + CHR(13) + CHR(10);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
preTail1 = '号球';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
proHead = '结论:异常球在 [';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
lastResult = '结论:异常球是';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
nextHint = CHR(13) + CHR(10) + '启示:';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ErrorHint = '命题不严密,请检查设置条件!';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
function SearchBall_At4(AllBall:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A,G:array of Byte;var vErr_Ball_Order:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var vIsHeavy:Boolean;ACanvas:TCanvas;bShowTrace:Boolean):Boolean;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A2,B2:Word;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A3,B3:Word;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Loop:Word;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA,bPartB:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCmpPara:TC_CmpPara;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str:AnsiString;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := False;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A2 := AllBall[A[1]].Weight + AllBall[A[2]].Weight + AllBall[G[1]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
B2 := AllBall[A[3]].Weight + AllBall[G[2]].Weight + AllBall[G[3]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := A_Team + IntToStr(AllBall[A[1]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[A[2]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[G[1]].Order);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + preTail0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := B_Team + IntToStr(AllBall[A[3]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[G[2]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[G[3]].Order);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + preTail0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber := 3;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartA,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartB,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[0] := AllBall[A[1]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[1] := AllBall[A[2]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[2] := AllBall[G[1]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[0] := AllBall[A[3]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[1] := AllBall[G[2]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[2] := AllBall[G[3]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Balance_One_Compare(Point(Fir_Pivot_X,Fir_Pivot_Y + One_DrawDelta),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber,bPartA,bPartB,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A2 = B2 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A3 := AllBall[A[4]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
B3 := AllBall[G[1]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + strAXDB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := proHead;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + IntToStr(AllBall[A[4]].Order);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + ']' + preTail1 + ' 【排3余1】';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := '用任一正常球与之比较,即可知异常球是偏轻偏重!';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + nextHint + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
with bCmpPara do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Pre_LNumber := 4;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Fro_LNumber := 1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(Pre_Latency,Pre_LNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(Fro_Latency,Fro_LNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to Pre_LNumber - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Pre_Latency[Loop] := AllBall[Loop + 9];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Fro_Latency[0] := AllBall[A[4]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Balance_One_Latency(Point(Hint_X,Fir_Pivot_Y + One_DrawDelta - One_PreDelta),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Point(Hint_X,Fir_Pivot_Y + One_DrawDelta + One_FroDelta),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCmpPara,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber := 1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartA,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartB,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[0] := AllBall[A[4]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[0] := AllBall[G[1]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Balance_One_Compare(Point(Fir_Pivot_X,Fir_Pivot_Y + One_DrawDelta * 2),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber,bPartA,bPartB,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A3 = B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog3 := '异常球与正常球一样重!' + ErrorHint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[4];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := A3 > B3;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A3 := AllBall[A[1]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
B3 := AllBall[A[2]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A2 > B2 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + strADYB
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + strAXYB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := proHead;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + IntToStr(AllBall[A[1]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[A[2]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[A[3]].Order);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + ']' + preTail1 + ' 【排1余3】';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := '下一轮必须在本轮比较的同一端的两球中进行.即取:'
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+IntToStr(AllBall[A[1]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[A[2]].Order)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+'号球,在推算结果时,还必须用到此轮A、B端谁轻谁重!';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + nextHint + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber := 1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartA,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartB,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[0] := AllBall[A[1]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[0] := AllBall[A[2]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Balance_One_Compare(Point(Fir_Pivot_X,Fir_Pivot_Y + One_DrawDelta * 2),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber,bPartA,bPartB,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A3 = B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[3];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := A2 < B2;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A2 > B2 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A3 > B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[1]
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[2];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//IsHeavy := True;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A3 > B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[2]
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[1];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//IsHeavy := NOT True;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := A2 > B2;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Result := vErr_Ball_Order <> 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
function SearchBall_At8(AllBall:array of TC_Ball;IsAdyB:Boolean;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A,B,G:array of Byte;var vErr_Ball_Order:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var vIsHeavy:Boolean;ACanvas:TCanvas;bShowTrace:Boolean):Boolean;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A2,B2:Word;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A3,B3:Word;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA,bPartB:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
senPivot,thrPivot:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str:AnsiString;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := False;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A2 := AllBall[A[1]].Weight + AllBall[A[2]].Weight + AllBall[B[1]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
B2 := AllBall[A[3]].Weight + AllBall[B[2]].Weight + AllBall[G[1]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := A_Team + IntToStr(AllBall[A[1]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[A[2]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[B[1]].Order);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + preTail0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := B_Team + IntToStr(AllBall[A[3]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[B[2]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[G[1]].Order);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + preTail0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber := 3;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartA,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartB,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[0] := AllBall[A[1]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[1] := AllBall[A[2]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[2] := AllBall[B[1]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[0] := AllBall[A[3]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[1] := AllBall[B[2]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[2] := AllBall[G[1]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Balance_One_Compare(Point(Fir_Pivot_X,Fir_Pivot_Y + One_DrawDelta),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber,bPartA,bPartB,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A2 = B2 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A3 := AllBall[B[3]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
B3 := AllBall[B[4]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + strAXDB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := proHead;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + IntToStr(AllBall[A[4]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[B[3]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[B[4]].Order);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + ']' + preTail1 + ' 【排5余3】';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := '下一轮必须在本轮比较的同一端的两球中进行.即取:'
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+IntToStr(AllBall[B[3]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[B[4]].Order)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+'号球,在推算结果时,还必须用到此轮A、B端谁轻谁重!';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + nextHint + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber := 1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartA,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartB,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[0] := AllBall[B[3]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[0] := AllBall[B[4]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Balance_One_Compare(Point(Fir_Pivot_X,Fir_Pivot_Y + One_DrawDelta * 2),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber,bPartA,bPartB,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A3 = B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[4];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := IsAdyB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if IsAdyB then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A3 > B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := B[4]
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := B[3];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//IsHeavy := NOT IsAdyB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A3 > B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := B[3]
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := B[4];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//IsHeavy := NOT IsAdyB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := NOT IsAdyB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A2 > B2 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + strADYB
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + strAXYB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := proHead;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + IntToStr(AllBall[A[1]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[A[2]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[A[3]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[B[1]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[B[2]].Order);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + ']' + preTail1 + ' 【排3余5】';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := '此时,必须综合分析近两次的比较结果.当近两次比较的天平倾向相同时,'
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ '必须比较共同产生倾向因素的两个球;倾向相反时,'
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ '任取一个正常球与A组第3个球('
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[A[2]].Order)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ ')或B组第1个球('
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[B[1]].Order)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ ')比较.';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + nextHint + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if ((IsAdyB = True) and (A2 > B2)) or ((IsAdyB = False) and (A2 < B2)) then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A3 := AllBall[A[1]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
B3 := AllBall[A[2]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber := 1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartA,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartB,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[0] := AllBall[A[1]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[0] := AllBall[A[2]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Balance_One_Compare(Point(Fir_Pivot_X,Fir_Pivot_Y + One_DrawDelta * 2),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber,bPartA,bPartB,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A3 = B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := B[2];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := NOT IsAdyB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else if A2 > B2 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A3 > B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[1]
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[2];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := IsAdyB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else if A2 < B2 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A3 > B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[2]
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[1];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := IsAdyB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else if ((IsAdyB = True) and (A2 < B2)) or ((IsAdyB = False) and (A2 > B2)) then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A3 := AllBall[A[3]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
B3 := AllBall[G[1]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber := 1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartA,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartB,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[0] := AllBall[A[1]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[0] := AllBall[G[1]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Balance_One_Compare(Point(Fir_Pivot_X,Fir_Pivot_Y + One_DrawDelta * 2),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber,bPartA,bPartB,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A3 = B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := B[1];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := NOT IsAdyB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else if A3 > B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if IsAdyB then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[3];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := IsAdyB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog3 := '"偏轻"的异常球 > 正常球!' + ErrorHint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if IsAdyB then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog3 := '"偏重"的异常球 < 正常球!' + ErrorHint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[3];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := IsAdyB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Result := vErr_Ball_Order <> 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Serach_Error_Ball(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
AllBall:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ACanvas:TCanvas;aClearRect: TRect;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bShowTrace:Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A,B:Word;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Loop:Word;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BufC:array[0..4] of Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BufT:array[0..8] of Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BufA,BufB:array[0..4] of Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BufG:array[0..4] of Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bOrder:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bHeavy:Boolean;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
FoundBall :TC_SearchBall;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str:AnsiString;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA,bPartB:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCmpPara:TC_CmpPara;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A := 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog1 := '';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := '';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog3 := '';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ClearCanvas(aCanvas,aClearRect);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := A_Team;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 1 to 4 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A := A + AllBall[Loop].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + IntToStr(AllBall[Loop].Order) + ',';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//bPartA[Loop] := AllBall[Loop];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + preTail0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog1 := strLog1 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
B := 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := B_Team;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 5 to 8 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
B := B + AllBall[Loop].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + IntToStr(AllBall[Loop].Order) + ',';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//bPartB[Loop] := AllBall[Loop];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + preTail0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog1 := strLog1 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber := 4;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartA,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartB,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to bNumber - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[Loop] := AllBall[Loop+1];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[Loop] := AllBall[Loop+bNumber + 1];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Balance_One_Compare(Point(Fir_Pivot_X,Fir_Pivot_Y),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber,bPartA,bPartB,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A = B then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog1 := strLog1 + strAXDB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := proHead;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 1 to 4 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BufC[Loop] := AllBall[8 + Loop].Order;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + IntToStr(AllBall[8 + Loop].Order) + ',';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + '] ' + preTail1 + ' 【排8余4】';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog1 := strLog1 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 1 to 8 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BufT[Loop] := AllBall[Loop].Order;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
with bCmpPara do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Pre_LNumber := 12;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Fro_LNumber := 4;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(Pre_Latency,Pre_LNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(Fro_Latency,Fro_LNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to Pre_LNumber - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Pre_Latency[Loop] := AllBall[Loop + 1];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to Fro_LNumber - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Fro_Latency[Loop] := AllBall[Loop + 9];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Balance_One_Latency(Point(10,Fir_Pivot_Y - One_PreDelta),Point(10,Fir_Pivot_Y + One_FroDelta),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCmpPara,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if SearchBall_At4(AllBall,BufC,BufT,bOrder,bHeavy,ACanvas,bShowTrace) then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
FoundBall.Ball := AllBall[bOrder];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
FoundBall.IsHeavy := bHeavy;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if FoundBall.IsHeavy then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
FoundBall.ErrorMsg := '【偏重】'
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
FoundBall.ErrorMsg := '【偏轻】';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := '【'+ IntToStr(FoundBall.Ball.Order) + '】 = '
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(FoundBall.Ball.Weight) + ' ' + FoundBall.ErrorMsg;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog3 := lastResult + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A > B then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog1 := strLog1 + strADYB
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog1 := strLog1 + strAXYB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := proHead;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 1 to 8 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + IntToStr(AllBall[Loop].Order) + ',';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + '] ' + preTail1 + '【排4余8】';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog1 := strLog1 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 1 to 4 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BufA[Loop] := AllBall[Loop].Order;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BufB[Loop] := AllBall[4 + Loop].Order;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BufG[Loop] := AllBall[8 + Loop].Order;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
with bCmpPara do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Pre_LNumber := 12;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Fro_LNumber := 4;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(Pre_Latency,Pre_LNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(Fro_Latency,Fro_LNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to Pre_LNumber - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Pre_Latency[Loop] := AllBall[Loop + 1];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to Fro_LNumber - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Fro_Latency[Loop] := AllBall[Loop + 9];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Balance_One_Latency(Point(Hint_X,Fir_Pivot_Y - One_PreDelta),Point(10,Fir_Pivot_Y + One_FroDelta),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCmpPara,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if SearchBall_At8(AllBall,A > B,BufA,BufB,BufG,bOrder,bHeavy,ACanvas,bShowTrace) then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
FoundBall.Ball := AllBall[bOrder];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
FoundBall.IsHeavy := bHeavy;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if FoundBall.IsHeavy then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
FoundBall.ErrorMsg := '【偏重】'
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
FoundBall.ErrorMsg := '【偏轻】';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := '【'+ IntToStr(FoundBall.Ball.Order) + '】 = '
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(FoundBall.Ball.Weight) + ' ' + FoundBall.ErrorMsg;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog3 := lastResult + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//MessageBox(0,PChar(Str),'小球问题',MB_OK or MB_IConInformation);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Draw_Ball_Config(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
AllBall:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ACanvas:TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aClearRect: TRect;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bShowTrace:Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ClearCanvas(aCanvas,aClearRect);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Process_Initial_Ball(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Point(0,Fir_Pivot_Y - One_PreDelta-10),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
AllBall,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure ClearCanvas(aCanvas: TCanvas; aRect: TRect);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
with aCanvas do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Brush.Style := bsSolid;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Brush.Color := clWhite;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
FillRect(aRect);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end. 5、 显示绘制源码
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
作品名称: 小球问题通用解决方案
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
开发作者: 成晓旭
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
开发时间: 2003年01月22日
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
完成时间: 2003年01月22日
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
修改时间1: 2003年11月15日
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
增加小于问题初始状态绘制方法
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
unit BallType;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
interface
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
uses
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Dialogs,Windows,Classes,SysUtils,Graphics;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
type
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//小球问题:小球抽象数据类型
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
TC_Ball = Packed Record
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Order:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Weight:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BgColor:TColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
TextColor:TColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//小球问题:被寻找的目标小球抽象数据类型
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
TC_SearchBall = Packed Record
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Ball:TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
IsHeavy:Boolean;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ErrorMsg:AnsiString;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//小球问题:一次比较的参数的抽象数据类型
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
TC_CmpPara = Packed Record
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Pre_LNumber:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Pre_Latency:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Fro_LNumber:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Fro_Latency:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//小球问题:小球抽象类
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
TC_Ball_Class = class
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
private
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bDrawOrder: Boolean;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bAbstractBall:TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bStartPoint:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bSize:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bTextColor:TColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bBgColor:TColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bColorChanged: Boolean;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas: TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
public
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure SetBgAndTextColor(bgColor: TColor; ttColor: TColor);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure DrawSelf();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
constructor Create(bTrance: Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//小球问题:天平抽象类
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
TC_Balance = class
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
// published
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bMainPivot:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartAPivot:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartBPivot:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bColor:TColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPivotColor:TColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas: TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bWeightA:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bWeightB:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
private
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bWidth:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bHeight:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bDelta:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
public
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure DrawSelf();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//小球问题:天平比较一次抽象类[行为抽象]
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
TC_Compare = class
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cbPivot:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cbPreStart,cbFroStart:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cbCmpPara:TC_CmpPara;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cbCount:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cbPre_Latency:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBallPartA:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBallPartB:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cbFro_Latency:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance:TC_Balance;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cCanvas: TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
private
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cbPPartA,cbPPartB:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency:array of TC_Ball_Class;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA:array of TC_Ball_Class;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB:array of TC_Ball_Class;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency:array of TC_Ball_Class;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
isShowTrace:Boolean;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Draw_Balance();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Draw_Part_A();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Draw_Part_B();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Draw_Latency();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
public
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Draw_AllBall();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Weigh_Out();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
constructor Create(bTrace: Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//小球问题抽象类<2003-11-14至今未被使用,是为方法的通用性而设计>
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
TC_Ball_Problem = class
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bpBall:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bpCompareCount:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bpBallCount:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bpCanvas: TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bpCompare:array of TC_Compare;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pBalace:TC_Balance;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
public
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//procedure Weigh_Out(bCenterX,bCenterY:Integer);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//天平的一次比较结果处理算法
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Balance_One_Latency(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BallStart1,BallStart2:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmpPara:TC_CmpPara;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ACanvas:TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bTrace:Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//天平的一次比较执行算法
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Balance_One_Compare(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BalancePivot:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BallNum:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
PartA,PartB:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ACanvas:TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bTrace:Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//问题条件设置处理算法(小于的初始状态演示算法)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Process_Initial_Ball(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
StartPoint:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
AllBall:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ACanvas:TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bTrace:Boolean
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
implementation
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
...{ TC_Ball_Class }
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
constructor TC_Ball_Class.Create(bTrance: Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bDrawOrder := NOT bTrance;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TC_Ball_Class.DrawSelf();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strDrawText:String;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
w,h,r:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//暂时增加
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if bDrawOrder then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strDrawText := IntToStr(bAbstractBall.Order)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strDrawText := IntToStr(bAbstractBall.Weight);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if bColorChanged then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Brush.Color := bBgColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Pen.Color := bBgColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Font.Color := bTextColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Brush.Color := bAbstractBall.BgColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Pen.Color := bAbstractBall.BgColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Font.Color := bAbstractBall.TextColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Font.Size := bSize;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Font.Style := [fsBold];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
w := bCanvas.TextWidth(strDrawText);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
h := bCanvas.TextHeight(strDrawText);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if w > h then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
r := w
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
r := h;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//注意:此处的计算比例,是根据矩形的内接圆、外切圆推算出来的,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//再加以实现绘制时的位置系数调试、调整而来
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Ellipse(bStartPoint.X,bStartPoint.Y,bStartPoint.X + r * 1414 div 1000,bStartPoint.Y + r * 1414 div 1000);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if (Length(strDrawText) = 1) then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.TextOut(bStartPoint.X + r * 414 div 1000,bStartPoint.Y + r * 207 div 1000,strDrawText)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else if (Length(strDrawText) = 2) then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.TextOut(bStartPoint.X + r * 214 div 1000,bStartPoint.Y + r * 228 div 1000,strDrawText);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TC_Ball_Class.SetBgAndTextColor(bgColor: TColor; ttColor: TColor);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Self.bBgColor := bgColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Self.bTextColor := ttColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bColorChanged := true;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
...{ TC_Balance }
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TC_Balance.DrawSelf;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure DrawTray(ACanvas:TCanvas;aX,aY,Awidth,AHeight:Integer;aDeltaY:Integer);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
with ACanvas do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
MoveTo(aX,aY);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LineTo(aX - AWidth,aY + aDeltaY);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LineTo(aX - AWidth - AHeight,aY - AHeight + aDeltaY);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
MoveTo(aX,aY);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LineTo(aX + AWidth,aY - aDeltaY);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LineTo(aX + AWidth + AHeight,aY - aHeight - aDeltaY);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
X0,Y0,X1,Y1,X2,Y2,D,H:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bDelta := 6;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if bWeightA > bWeightB then//[A > B]
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bDelta := bDelta
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else if bWeightA = bWeightB then//[A = B]
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bDelta := 0
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else//[A < B]
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bDelta := - bDelta;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
X0 := bMainPivot.X;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Y0 := bMainPivot.Y;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
D := bWidth;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
H := bHeight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Pen.Color := bPivotColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Brush.Color := bPivotColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Polygon([Point(X0,Y0),Point(X0 - H,Y0 + H),Point(X0 + H,Y0 + H),Point(X0,Y0)]);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Pen.Color := bColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
DrawTray(bCanvas,X0,Y0,D,H,bDelta);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
X1 := X0 - D - H;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Y1 := Y0 - H + bDelta;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
DrawTray(bCanvas,X1,Y1,D div 2,H,0);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
X2 := X0 + D + H;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Y2 := Y0 - H - bDelta;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
DrawTray(bCanvas,X2,Y2,D div 2,H,0);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartAPivot.X := X1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartAPivot.Y := Y1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartBPivot.X := X2;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartBPivot.Y := Y2;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
...{ TC_Compare }
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
constructor TC_Compare.Create(bTrace: Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
isShowTrace := bTrace;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TC_Compare.Draw_AllBall;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
const
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strHint = '比较前:';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Loop:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(pPre_Latency,cbCmpPara.Pre_LNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(cbCmpPara.Pre_Latency,cbCmpPara.Pre_LNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to cbCmpPara.Pre_LNumber - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop] := TC_Ball_Class.Create(isShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].bAbstractBall := cbCmpPara.Pre_Latency[Loop];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].bSize := 10;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].bStartPoint := Point(80+cbPreStart.X + Loop * 25,cbPreStart.Y);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].SetBgAndTextColor(clBlue,clYellow);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].bCanvas := cCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].bCanvas.Font.Size := 11;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].bCanvas.Font.Style := [fsBold];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].bCanvas.Font.Color := clBlack;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].bCanvas.Brush.Color := clWhite;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].bCanvas.TextOut(cbPreStart.X,cbPreStart.Y,strHint);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].DrawSelf();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].Free();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TC_Compare.Draw_Balance;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Loop:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance := TC_Balance.Create();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.bWeightA := 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.bWeightB := 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to cbCount - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.bWeightA := cBalance.bWeightA + cBallPartA[Loop].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.bWeightB := cBalance.bWeightB + cBallPartB[Loop].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.bMainPivot := cbPivot;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.bPivotColor := clFuchsia;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.bColor := clBlue;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.bWidth := 100;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.bHeight := 18;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.bCanvas := cCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.DrawSelf();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cbPPartA := cBalance.bPartAPivot;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cbPPartB := cBalance.bPartBPivot;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.Free();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TC_Compare.Draw_Latency;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
const
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strHint = '比较后:';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Loop:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(pFro_Latency,cbCmpPara.Fro_LNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//SetLength(cbCmpPara.Fro_Latency,cbCmpPara.Fro_LNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//注意:下面Pre_Latency不能用Fro_Latency来代替,不知道为什么2003-11-20
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(cbCmpPara.Pre_Latency,cbCmpPara.Fro_LNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to cbCmpPara.Fro_LNumber - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop] := TC_Ball_Class.Create(isShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].bAbstractBall := cbCmpPara.Fro_Latency[Loop];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].bSize := 10;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].bStartPoint := Point(80+cbFroStart.X + Loop * 25,cbFroStart.Y);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].SetBgAndTextColor(clGreen,clYellow);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].bCanvas := cCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].bCanvas.Font.Size := 11;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].bCanvas.Font.Style := [fsBold];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].bCanvas.Font.Color := clBlack;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].bCanvas.Brush.Color := clWhite;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].bCanvas.TextOut(cbFroStart.X,cbFroStart.Y,strHint);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].DrawSelf();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].Free();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TC_Compare.Draw_Part_A;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Loop,r:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(pPartA,cbCount);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to cbCount - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop] := TC_Ball_Class.Create(isShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop].bAbstractBall.Order := cBallPartA[Loop].Order;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop].bAbstractBall.Weight := cBallPartA[Loop].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop].bSize := 10;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop].SetBgAndTextColor(clYellow,clRed);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop].bCanvas := cCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//注意:此句一定要有,设置字体的大小属性
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop].bCanvas.Font.Size := pPartA[Loop].bSize;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if pPartA[Loop].bCanvas.TextWidth(IntToStr(pPartA[Loop].bAbstractBall.Order)) >
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop].bCanvas.TextHeight(IntToStr(pPartA[Loop].bAbstractBall.Order)) then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
r := pPartA[Loop].bCanvas.TextWidth(IntToStr(pPartA[Loop].bAbstractBall.Order))
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
r := pPartA[Loop].bCanvas.TextHeight(IntToStr(pPartA[Loop].bAbstractBall.Order));
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
r := r * 1414 div 1000;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//下面的计算公式有点难
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop].bStartPoint.X := cbPPartA.X - (cbCount div 2) * r - r * 5 * (cbCount mod 2) div 10 + Loop * r;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop].bStartPoint.Y := cbPPartA.Y - r;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop].DrawSelf();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop].Free();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TC_Compare.Draw_Part_B;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Loop,r:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(pPartb,cbCount);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to cbCount - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop] := TC_Ball_Class.Create(isShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop].bAbstractBall.Order := cBallPartB[Loop].Order;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop].bAbstractBall.Weight := cBallPartB[Loop].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop].bSize := 10;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop].SetBgAndTextColor(clYellow,clRed);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop].bCanvas := cCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop].bCanvas.Font.Size := pPartB[Loop].bSize;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if pPartB[Loop].bCanvas.TextWidth(IntToStr(pPartB[Loop].bAbstractBall.Order)) >
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop].bCanvas.TextHeight(IntToStr(pPartB[Loop].bAbstractBall.Order)) then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
r := pPartB[Loop].bCanvas.TextWidth(IntToStr(pPartB[Loop].bAbstractBall.Order))
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
r := pPartB[Loop].bCanvas.TextHeight(IntToStr(pPartB[Loop].bAbstractBall.Order));
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
r := r * 1414 div 1000;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop].bStartPoint.X := cbPPartB.X - (cbCount div 2) * r - r * 5 * (cbCount mod 2) div 10 + Loop * r;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop].bStartPoint.Y := cbPPartB.Y - r;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop].DrawSelf();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop].Free();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TC_Compare.Weigh_Out();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Draw_Balance();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Draw_Part_A();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Draw_Part_B();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Balance_One_Compare(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BalancePivot:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BallNum:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
PartA,PartB:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ACanvas:TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bTrace:Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp:TC_Compare;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Loop:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp := TC_Compare.Create(bTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.cbPivot := BalancePivot;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.cbCount := BallNum;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.cCanvas := ACanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(OneCmp.cBallPartA,OneCmp.cbCount);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(OneCmp.cBallPartB,OneCmp.cbCount);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to OneCmp.cbCount - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.cBallPartA[Loop] := PartA[Loop];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.cBallPartB[Loop] := PartB[Loop];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.Weigh_Out();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.Free();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Balance_One_Latency(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BallStart1,BallStart2:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmpPara:TC_CmpPara;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ACanvas:TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bTrace:Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp:TC_Compare;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp := TC_Compare.Create(bTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.cCanvas := ACanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.cbCmpPara := OneCmpPara;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.cbPreStart := BallStart1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.cbFroStart := BallStart2;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.Draw_AllBall();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.Draw_Latency();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.Free();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//问题条件设置处理算法(小于的初始状态演示算法)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Process_Initial_Ball(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
StartPoint:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
AllBall:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ACanvas:TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bTrace:Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
const
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//strHint = '初始状态:';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strHint = '';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Loop:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall: TC_Ball_Class;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := Low(AllBall) to High(AllBall) - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall := TC_Ball_Class.Create(bTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall.bAbstractBall := AllBall[Loop + 1];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall.bSize := 10;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall.bStartPoint := Point(2 + StartPoint.X + Loop * 25,StartPoint.Y);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall.bCanvas := ACanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall.bCanvas.Font.Size := 11;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall.bCanvas.Font.Style := [fsBold];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall.bCanvas.Font.Color := clBlack;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall.bCanvas.Brush.Color := clWhite;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall.bCanvas.TextOut(StartPoint.X,StartPoint.Y,strHint);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall.DrawSelf();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall.Free();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end.
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
6、 界面源码
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
作品名称: 小球问题通用解决方案
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
开发作者: 成晓旭
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
开发时间: 2003年01月21日
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
完成时间: 2003年01月22日
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
修改时间1: 2003年02月10日 新增Delphi绘图功能
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
修改时间2: 2003年11月14日 新增对问题模拟条件的用户设置功能
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
修改时间2: 2003年11月20日 新增ClearCanvas()方法,解决不能清除画面问题
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
unit BMain;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
interface
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
uses
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Dialogs, StdCtrls,BallType,Common, Buttons, ExtCtrls;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
type
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
TExceptStyle = (esLight,esHeavy); //偏轻 偏重
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
const
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strHint = '中国';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BallNumber = 12; //小球数量
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BallValue = 10; //正常小球的质量
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
HeavyValue = 15; //偏重小球的质量
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LightValue = 5; //偏轻小球的质量
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
type
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
TfrmMain = class(TForm)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
btnDemo: TButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
imgMain: TImage;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
gbConfig: TGroupBox;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton1: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton2: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton3: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton4: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton5: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton6: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton7: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton8: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton9: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton10: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton11: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton12: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ImgConfig: TImage;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cbEStyle: TCheckBox;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Label1: TLabel;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Memo0: TMemo;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Label2: TLabel;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Label3: TLabel;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Memo1: TMemo;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Label4: TLabel;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Memo2: TMemo;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Label5: TLabel;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Memo3: TMemo;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
btnSetNumber: TButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
btnAuto: TButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
btnAbout: TButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Label6: TLabel;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cbTrance: TCheckBox;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure FormShow(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure RadioButton1Click(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure btnDemoClick(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure FormCreate(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure btnSetNumberClick(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure btnAutoClick(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure btnAboutClick(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
private
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
...{ Private declarations }
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
isTrance: Boolean; //是否跟踪(cbTrance的状态记录)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SmallBall:array[0..BallNumber] of TC_Ball; //小球的抽象数据
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptBall: TC_Ball; //异常小球
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptStyle:TExceptStyle; //异常小球的特性
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptBallValue:Integer; //异常小球的质量
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptColor:TColor; //异常小球的表示颜色
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//处理小球问题条件设置RadioGroup
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
function ProcessRadioButton(isSort:Boolean):Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//选择异常小球方法
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure ChooseExceptBall();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//绘制所有小球方法
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
// withExceptBall = true<有异常小球的绘制>
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
// withExceptBall = false<无异常小球的绘制>
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure DrawSmallBall(withExceptBall: Boolean; isTrance: Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure ClearCanvas
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
(aCanvas: TCanvas);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
public
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
...{ Public declarations }
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
frmMain: TfrmMain;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
implementation
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
...{$R *.dfm}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//单元内部常量定义
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
const
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Soft_Name = '小球问题解答过程演示程序0.2版';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strWaitHint = '本功能正在加紧完善中......' + CHR(13) + CHR(10) +
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
'请拭目以待!';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strSetNumber = '设置[3-12]的小球数目,程序将自动演示问题的解答过程!'
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ CHR(13) + CHR(10) + strWaitHint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strAutoAnswer = '设置任意数目的小球,程序将根据本题的问题模式,'
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+'推算最少的比较次数,并自动演示推算过程!'
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ CHR(13) + CHR(10) + strWaitHint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
About_Soft_Info = Soft_Name + CHR(13) + CHR(10) +
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
'开发作者:成晓旭'+ CHR(13) + CHR(10) +
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
'完成时间:2003年01月23日' + CHR(13) + CHR(10) +
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
'最后修改:2003年11月20日' + CHR(13) + CHR(10) +
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
'联系方式:CXXSoft@163.com' + CHR(13) + CHR(10) +
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
'设计说明:本程序采用纯面向对象的分析、设计、实现。' +
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
'也是本人的第一个运用' +
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
' 设计模式的作品。' + CHR(13) + CHR(10) +
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
'发布说明:程序完成时,我将公布其源码<欢迎来信索取>。';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
function TfrmMain.ProcessRadioButton(isSort:Boolean):Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
const
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
space = 25;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aCtrl:TControl;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aChoose:TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//点击的小球索引号,循环计数器,第一个RadioButton的Top属性,GroupBox中RadioCount的计数器(关键)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
indexBall,I,aTop,RadioCount:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
indexBall := -1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aTop := 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioCount := 0; //注意:此处初值 = -1 是错误的
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for I := 0 to gbConfig.ControlCount - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aCtrl := gbConfig.Controls[I];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if aCtrl.ClassType = TRadioButton then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
try
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Inc(RadioCount);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aChoose := TRadioButton(aCtrl);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if isSort then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if indexBall = -1 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aTop := aChoose.Top
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aChoose.Top := aTop;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aChoose.Left := (RadioCount - 1) * space + 8;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if aChoose.Checked then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
indexBall := RadioCount;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//ShowMessage('Index Ball = ' + IntToStr(indexBall));
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
break; //算法效率之关键
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
except
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Result := indexBall;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TfrmMain.FormShow(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ProcessRadioButton(true);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
DrawSmallBall(false,cbTrance.Checked);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TfrmMain.ChooseExceptBall();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
index:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
index := ProcessRadioButton(false);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if (index >= 0) and (index <= BallNumber) then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptBall := SmallBall[index];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if cbEStyle.Checked then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptStyle := esHeavy;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptBallValue := HeavyValue;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptColor := clRed;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptStyle := esLight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptBallValue := LightValue;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptColor := clFuchsia;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptBall.Weight := ExceptBallValue;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptBall.BgColor := ExceptColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptBall.TextColor := clBlack;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SmallBall[index] := ExceptBall;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TfrmMain.DrawSmallBall(withExceptBall: Boolean; isTrance: Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Loop:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 1 to BallNumber do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SmallBall[Loop].Order := Loop;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SmallBall[Loop].Weight := BallValue;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SmallBall[Loop].BgColor := clBlue;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SmallBall[Loop].TextColor := clRed;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if withExceptBall then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ChooseExceptBall();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Draw_Ball_Config(SmallBall,ImgConfig.Canvas,ClientRect,isTrance);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TfrmMain.RadioButton1Click(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
try
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
isTrance := cbTrance.Checked;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
except
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
isTrance := NOT isTrance;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
DrawSmallBall(true,isTrance);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
btnDemo.SetFocus();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TfrmMain.btnDemoClick(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Serach_Error_Ball(SmallBall,imgMain.Canvas,ClientRect,isTrance);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Memo1.Lines.Text := strLog1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Memo2.Lines.Text := strLog2;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Memo3.Lines.Text := strLog3;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TfrmMain.FormCreate(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
// Width := Screen.Width;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
// Height := Screen.Height;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Width := 800;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Height := 600;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Caption := Soft_Name;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TfrmMain.ClearCanvas(aCanvas: TCanvas);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aCanvas.Brush.Style := bsSolid;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aCanvas.Brush.Color := clWhite;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aCanvas.FillRect(ClientRect);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TfrmMain.btnSetNumberClick(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Application.MessageBox(strSetNumber,Soft_Name,MB_ICONINFORMATION);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TfrmMain.btnAutoClick(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Application.MessageBox(strAutoAnswer,Soft_Name,MB_ICONINFORMATION);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TfrmMain.btnAboutClick(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Application.MessageBox(About_Soft_Info,Soft_Name,MB_ICONINFORMATION);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end.
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1299788
![](http://p.blog.csdn.net/images/p_blog_csdn_net/CXXSoft/exe0.jpg)
4、 算法源码
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
作品名称: 小球问题通用解决方案
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
开发作者: 成晓旭
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
开发时间: 2003年01月22日
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
完成时间: 2003年01月23日
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
修改时间1: 2003年11月14日
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
增加用户问题条件设置绘制方法
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
修改时间2: 2003年11月18日
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
增加比较过程的记录功能
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
unit Common;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
interface
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
uses
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Windows,SysUtils,Classes,Graphics,BallType;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//清除画面方法
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure ClearCanvas(aCanvas: TCanvas; aRect: TRect);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//小球问题条件设置方法
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Draw_Ball_Config(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
AllBall:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ACanvas:TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aClearRect: TRect;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bShowTrace:Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//小球问题解决方法
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Serach_Error_Ball(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
AllBall:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ACanvas:TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aClearRect: TRect;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bShowTrace:Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog1:AnsiString;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2:AnsiString;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog3:AnsiString;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
implementation
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//单元内部常量定义
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
const
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Fir_Pivot_X = 200;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Fir_Pivot_Y = 80;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Hint_X = 10;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
One_DrawDelta = 140;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
One_PreDelta = 70;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
One_FroDelta = 30;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strADyB = '比较:A端(重) > B端(轻)' + CHR(13) + CHR(10);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strAXDB = '比较:A端 = B端' + CHR(13) + CHR(10);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strAXyB = '比较:A端(轻) < B端(重)' + CHR(13) + CHR(10);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A_Team = 'A 组:';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
B_Team = 'B 组:';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
preTail0 = '号球' + CHR(13) + CHR(10);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
preTail1 = '号球';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
proHead = '结论:异常球在 [';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
lastResult = '结论:异常球是';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
nextHint = CHR(13) + CHR(10) + '启示:';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ErrorHint = '命题不严密,请检查设置条件!';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
function SearchBall_At4(AllBall:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A,G:array of Byte;var vErr_Ball_Order:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var vIsHeavy:Boolean;ACanvas:TCanvas;bShowTrace:Boolean):Boolean;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A2,B2:Word;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A3,B3:Word;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Loop:Word;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA,bPartB:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCmpPara:TC_CmpPara;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str:AnsiString;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := False;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A2 := AllBall[A[1]].Weight + AllBall[A[2]].Weight + AllBall[G[1]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
B2 := AllBall[A[3]].Weight + AllBall[G[2]].Weight + AllBall[G[3]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := A_Team + IntToStr(AllBall[A[1]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[A[2]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[G[1]].Order);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + preTail0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := B_Team + IntToStr(AllBall[A[3]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[G[2]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[G[3]].Order);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + preTail0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber := 3;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartA,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartB,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[0] := AllBall[A[1]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[1] := AllBall[A[2]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[2] := AllBall[G[1]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[0] := AllBall[A[3]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[1] := AllBall[G[2]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[2] := AllBall[G[3]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Balance_One_Compare(Point(Fir_Pivot_X,Fir_Pivot_Y + One_DrawDelta),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber,bPartA,bPartB,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A2 = B2 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A3 := AllBall[A[4]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
B3 := AllBall[G[1]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + strAXDB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := proHead;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + IntToStr(AllBall[A[4]].Order);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + ']' + preTail1 + ' 【排3余1】';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := '用任一正常球与之比较,即可知异常球是偏轻偏重!';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + nextHint + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
with bCmpPara do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Pre_LNumber := 4;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Fro_LNumber := 1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(Pre_Latency,Pre_LNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(Fro_Latency,Fro_LNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to Pre_LNumber - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Pre_Latency[Loop] := AllBall[Loop + 9];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Fro_Latency[0] := AllBall[A[4]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Balance_One_Latency(Point(Hint_X,Fir_Pivot_Y + One_DrawDelta - One_PreDelta),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Point(Hint_X,Fir_Pivot_Y + One_DrawDelta + One_FroDelta),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCmpPara,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber := 1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartA,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartB,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[0] := AllBall[A[4]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[0] := AllBall[G[1]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Balance_One_Compare(Point(Fir_Pivot_X,Fir_Pivot_Y + One_DrawDelta * 2),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber,bPartA,bPartB,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A3 = B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog3 := '异常球与正常球一样重!' + ErrorHint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[4];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := A3 > B3;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A3 := AllBall[A[1]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
B3 := AllBall[A[2]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A2 > B2 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + strADYB
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + strAXYB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := proHead;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + IntToStr(AllBall[A[1]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[A[2]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[A[3]].Order);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + ']' + preTail1 + ' 【排1余3】';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := '下一轮必须在本轮比较的同一端的两球中进行.即取:'
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+IntToStr(AllBall[A[1]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[A[2]].Order)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+'号球,在推算结果时,还必须用到此轮A、B端谁轻谁重!';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + nextHint + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber := 1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartA,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartB,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[0] := AllBall[A[1]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[0] := AllBall[A[2]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Balance_One_Compare(Point(Fir_Pivot_X,Fir_Pivot_Y + One_DrawDelta * 2),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber,bPartA,bPartB,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A3 = B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[3];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := A2 < B2;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A2 > B2 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A3 > B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[1]
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[2];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//IsHeavy := True;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A3 > B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[2]
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[1];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//IsHeavy := NOT True;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := A2 > B2;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Result := vErr_Ball_Order <> 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
function SearchBall_At8(AllBall:array of TC_Ball;IsAdyB:Boolean;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A,B,G:array of Byte;var vErr_Ball_Order:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var vIsHeavy:Boolean;ACanvas:TCanvas;bShowTrace:Boolean):Boolean;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A2,B2:Word;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A3,B3:Word;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA,bPartB:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
senPivot,thrPivot:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str:AnsiString;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := False;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A2 := AllBall[A[1]].Weight + AllBall[A[2]].Weight + AllBall[B[1]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
B2 := AllBall[A[3]].Weight + AllBall[B[2]].Weight + AllBall[G[1]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := A_Team + IntToStr(AllBall[A[1]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[A[2]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[B[1]].Order);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + preTail0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := B_Team + IntToStr(AllBall[A[3]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[B[2]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[G[1]].Order);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + preTail0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber := 3;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartA,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartB,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[0] := AllBall[A[1]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[1] := AllBall[A[2]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[2] := AllBall[B[1]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[0] := AllBall[A[3]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[1] := AllBall[B[2]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[2] := AllBall[G[1]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Balance_One_Compare(Point(Fir_Pivot_X,Fir_Pivot_Y + One_DrawDelta),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber,bPartA,bPartB,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A2 = B2 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A3 := AllBall[B[3]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
B3 := AllBall[B[4]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + strAXDB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := proHead;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + IntToStr(AllBall[A[4]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[B[3]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[B[4]].Order);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + ']' + preTail1 + ' 【排5余3】';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := '下一轮必须在本轮比较的同一端的两球中进行.即取:'
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+IntToStr(AllBall[B[3]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[B[4]].Order)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+'号球,在推算结果时,还必须用到此轮A、B端谁轻谁重!';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + nextHint + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber := 1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartA,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartB,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[0] := AllBall[B[3]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[0] := AllBall[B[4]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Balance_One_Compare(Point(Fir_Pivot_X,Fir_Pivot_Y + One_DrawDelta * 2),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber,bPartA,bPartB,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A3 = B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[4];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := IsAdyB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if IsAdyB then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A3 > B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := B[4]
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := B[3];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//IsHeavy := NOT IsAdyB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A3 > B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := B[3]
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := B[4];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//IsHeavy := NOT IsAdyB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := NOT IsAdyB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A2 > B2 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + strADYB
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + strAXYB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := proHead;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + IntToStr(AllBall[A[1]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[A[2]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[A[3]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[B[1]].Order) + ','
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[B[2]].Order);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + ']' + preTail1 + ' 【排3余5】';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := '此时,必须综合分析近两次的比较结果.当近两次比较的天平倾向相同时,'
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ '必须比较共同产生倾向因素的两个球;倾向相反时,'
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ '任取一个正常球与A组第3个球('
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[A[2]].Order)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ ')或B组第1个球('
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(AllBall[B[1]].Order)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ ')比较.';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := strLog2 + nextHint + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if ((IsAdyB = True) and (A2 > B2)) or ((IsAdyB = False) and (A2 < B2)) then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A3 := AllBall[A[1]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
B3 := AllBall[A[2]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber := 1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartA,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartB,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[0] := AllBall[A[1]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[0] := AllBall[A[2]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Balance_One_Compare(Point(Fir_Pivot_X,Fir_Pivot_Y + One_DrawDelta * 2),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber,bPartA,bPartB,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A3 = B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := B[2];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := NOT IsAdyB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else if A2 > B2 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A3 > B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[1]
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[2];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := IsAdyB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else if A2 < B2 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A3 > B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[2]
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[1];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := IsAdyB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else if ((IsAdyB = True) and (A2 < B2)) or ((IsAdyB = False) and (A2 > B2)) then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A3 := AllBall[A[3]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
B3 := AllBall[G[1]].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber := 1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartA,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartB,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[0] := AllBall[A[1]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[0] := AllBall[G[1]];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Balance_One_Compare(Point(Fir_Pivot_X,Fir_Pivot_Y + One_DrawDelta * 2),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber,bPartA,bPartB,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A3 = B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := B[1];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := NOT IsAdyB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else if A3 > B3 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if IsAdyB then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[3];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := IsAdyB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog3 := '"偏轻"的异常球 > 正常球!' + ErrorHint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if IsAdyB then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog3 := '"偏重"的异常球 < 正常球!' + ErrorHint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vErr_Ball_Order := A[3];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
vIsHeavy := IsAdyB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Result := vErr_Ball_Order <> 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Serach_Error_Ball(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
AllBall:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ACanvas:TCanvas;aClearRect: TRect;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bShowTrace:Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A,B:Word;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Loop:Word;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BufC:array[0..4] of Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BufT:array[0..8] of Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BufA,BufB:array[0..4] of Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BufG:array[0..4] of Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bOrder:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bHeavy:Boolean;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
FoundBall :TC_SearchBall;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str:AnsiString;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA,bPartB:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCmpPara:TC_CmpPara;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A := 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog1 := '';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog2 := '';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog3 := '';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ClearCanvas(aCanvas,aClearRect);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := A_Team;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 1 to 4 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
A := A + AllBall[Loop].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + IntToStr(AllBall[Loop].Order) + ',';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//bPartA[Loop] := AllBall[Loop];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + preTail0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog1 := strLog1 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
B := 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := B_Team;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 5 to 8 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
B := B + AllBall[Loop].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + IntToStr(AllBall[Loop].Order) + ',';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//bPartB[Loop] := AllBall[Loop];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + preTail0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog1 := strLog1 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber := 4;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartA,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(bPartB,bNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to bNumber - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartA[Loop] := AllBall[Loop+1];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartB[Loop] := AllBall[Loop+bNumber + 1];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Balance_One_Compare(Point(Fir_Pivot_X,Fir_Pivot_Y),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bNumber,bPartA,bPartB,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A = B then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog1 := strLog1 + strAXDB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := proHead;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 1 to 4 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BufC[Loop] := AllBall[8 + Loop].Order;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + IntToStr(AllBall[8 + Loop].Order) + ',';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + '] ' + preTail1 + ' 【排8余4】';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog1 := strLog1 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 1 to 8 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BufT[Loop] := AllBall[Loop].Order;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
with bCmpPara do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Pre_LNumber := 12;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Fro_LNumber := 4;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(Pre_Latency,Pre_LNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(Fro_Latency,Fro_LNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to Pre_LNumber - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Pre_Latency[Loop] := AllBall[Loop + 1];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to Fro_LNumber - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Fro_Latency[Loop] := AllBall[Loop + 9];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Balance_One_Latency(Point(10,Fir_Pivot_Y - One_PreDelta),Point(10,Fir_Pivot_Y + One_FroDelta),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCmpPara,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if SearchBall_At4(AllBall,BufC,BufT,bOrder,bHeavy,ACanvas,bShowTrace) then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
FoundBall.Ball := AllBall[bOrder];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
FoundBall.IsHeavy := bHeavy;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if FoundBall.IsHeavy then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
FoundBall.ErrorMsg := '【偏重】'
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
FoundBall.ErrorMsg := '【偏轻】';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := '【'+ IntToStr(FoundBall.Ball.Order) + '】 = '
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(FoundBall.Ball.Weight) + ' ' + FoundBall.ErrorMsg;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog3 := lastResult + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if A > B then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog1 := strLog1 + strADYB
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog1 := strLog1 + strAXYB;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := proHead;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 1 to 8 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + IntToStr(AllBall[Loop].Order) + ',';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := str + '] ' + preTail1 + '【排4余8】';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog1 := strLog1 + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 1 to 4 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BufA[Loop] := AllBall[Loop].Order;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BufB[Loop] := AllBall[4 + Loop].Order;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BufG[Loop] := AllBall[8 + Loop].Order;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
with bCmpPara do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Pre_LNumber := 12;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Fro_LNumber := 4;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(Pre_Latency,Pre_LNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(Fro_Latency,Fro_LNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to Pre_LNumber - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Pre_Latency[Loop] := AllBall[Loop + 1];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to Fro_LNumber - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Fro_Latency[Loop] := AllBall[Loop + 9];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Balance_One_Latency(Point(Hint_X,Fir_Pivot_Y - One_PreDelta),Point(10,Fir_Pivot_Y + One_FroDelta),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCmpPara,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if SearchBall_At8(AllBall,A > B,BufA,BufB,BufG,bOrder,bHeavy,ACanvas,bShowTrace) then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
FoundBall.Ball := AllBall[bOrder];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
FoundBall.IsHeavy := bHeavy;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if FoundBall.IsHeavy then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
FoundBall.ErrorMsg := '【偏重】'
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
FoundBall.ErrorMsg := '【偏轻】';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
str := '【'+ IntToStr(FoundBall.Ball.Order) + '】 = '
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ IntToStr(FoundBall.Ball.Weight) + ' ' + FoundBall.ErrorMsg;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strLog3 := lastResult + str;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//MessageBox(0,PChar(Str),'小球问题',MB_OK or MB_IConInformation);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Draw_Ball_Config(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
AllBall:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ACanvas:TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aClearRect: TRect;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bShowTrace:Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ClearCanvas(aCanvas,aClearRect);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Process_Initial_Ball(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Point(0,Fir_Pivot_Y - One_PreDelta-10),
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
AllBall,ACanvas,bShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure ClearCanvas(aCanvas: TCanvas; aRect: TRect);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
with aCanvas do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Brush.Style := bsSolid;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Brush.Color := clWhite;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
FillRect(aRect);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end. 5、 显示绘制源码
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
作品名称: 小球问题通用解决方案
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
开发作者: 成晓旭
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
开发时间: 2003年01月22日
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
完成时间: 2003年01月22日
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
修改时间1: 2003年11月15日
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
增加小于问题初始状态绘制方法
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
unit BallType;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
interface
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
uses
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Dialogs,Windows,Classes,SysUtils,Graphics;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
type
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//小球问题:小球抽象数据类型
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
TC_Ball = Packed Record
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Order:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Weight:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BgColor:TColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
TextColor:TColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//小球问题:被寻找的目标小球抽象数据类型
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
TC_SearchBall = Packed Record
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Ball:TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
IsHeavy:Boolean;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ErrorMsg:AnsiString;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//小球问题:一次比较的参数的抽象数据类型
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
TC_CmpPara = Packed Record
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Pre_LNumber:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Pre_Latency:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Fro_LNumber:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Fro_Latency:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//小球问题:小球抽象类
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
TC_Ball_Class = class
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
private
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bDrawOrder: Boolean;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bAbstractBall:TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bStartPoint:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bSize:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bTextColor:TColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bBgColor:TColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bColorChanged: Boolean;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas: TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
public
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure SetBgAndTextColor(bgColor: TColor; ttColor: TColor);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure DrawSelf();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
constructor Create(bTrance: Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//小球问题:天平抽象类
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
TC_Balance = class
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
// published
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bMainPivot:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartAPivot:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartBPivot:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bColor:TColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPivotColor:TColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas: TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bWeightA:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bWeightB:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
private
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bWidth:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bHeight:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bDelta:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
public
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure DrawSelf();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//小球问题:天平比较一次抽象类[行为抽象]
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
TC_Compare = class
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cbPivot:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cbPreStart,cbFroStart:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cbCmpPara:TC_CmpPara;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cbCount:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cbPre_Latency:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBallPartA:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBallPartB:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cbFro_Latency:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance:TC_Balance;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cCanvas: TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
private
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cbPPartA,cbPPartB:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency:array of TC_Ball_Class;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA:array of TC_Ball_Class;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB:array of TC_Ball_Class;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency:array of TC_Ball_Class;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
isShowTrace:Boolean;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Draw_Balance();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Draw_Part_A();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Draw_Part_B();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Draw_Latency();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
public
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Draw_AllBall();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Weigh_Out();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
constructor Create(bTrace: Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//小球问题抽象类<2003-11-14至今未被使用,是为方法的通用性而设计>
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
TC_Ball_Problem = class
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bpBall:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bpCompareCount:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bpBallCount:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bpCanvas: TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bpCompare:array of TC_Compare;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pBalace:TC_Balance;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
public
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//procedure Weigh_Out(bCenterX,bCenterY:Integer);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//天平的一次比较结果处理算法
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Balance_One_Latency(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BallStart1,BallStart2:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmpPara:TC_CmpPara;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ACanvas:TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bTrace:Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//天平的一次比较执行算法
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Balance_One_Compare(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BalancePivot:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BallNum:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
PartA,PartB:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ACanvas:TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bTrace:Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//问题条件设置处理算法(小于的初始状态演示算法)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Process_Initial_Ball(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
StartPoint:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
AllBall:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ACanvas:TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bTrace:Boolean
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
implementation
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
...{ TC_Ball_Class }
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
constructor TC_Ball_Class.Create(bTrance: Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bDrawOrder := NOT bTrance;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TC_Ball_Class.DrawSelf();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strDrawText:String;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
w,h,r:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//暂时增加
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if bDrawOrder then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strDrawText := IntToStr(bAbstractBall.Order)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strDrawText := IntToStr(bAbstractBall.Weight);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if bColorChanged then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Brush.Color := bBgColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Pen.Color := bBgColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Font.Color := bTextColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Brush.Color := bAbstractBall.BgColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Pen.Color := bAbstractBall.BgColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Font.Color := bAbstractBall.TextColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Font.Size := bSize;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Font.Style := [fsBold];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
w := bCanvas.TextWidth(strDrawText);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
h := bCanvas.TextHeight(strDrawText);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if w > h then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
r := w
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
r := h;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//注意:此处的计算比例,是根据矩形的内接圆、外切圆推算出来的,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//再加以实现绘制时的位置系数调试、调整而来
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Ellipse(bStartPoint.X,bStartPoint.Y,bStartPoint.X + r * 1414 div 1000,bStartPoint.Y + r * 1414 div 1000);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if (Length(strDrawText) = 1) then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.TextOut(bStartPoint.X + r * 414 div 1000,bStartPoint.Y + r * 207 div 1000,strDrawText)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else if (Length(strDrawText) = 2) then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.TextOut(bStartPoint.X + r * 214 div 1000,bStartPoint.Y + r * 228 div 1000,strDrawText);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TC_Ball_Class.SetBgAndTextColor(bgColor: TColor; ttColor: TColor);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Self.bBgColor := bgColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Self.bTextColor := ttColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bColorChanged := true;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
...{ TC_Balance }
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TC_Balance.DrawSelf;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure DrawTray(ACanvas:TCanvas;aX,aY,Awidth,AHeight:Integer;aDeltaY:Integer);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
with ACanvas do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
MoveTo(aX,aY);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LineTo(aX - AWidth,aY + aDeltaY);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LineTo(aX - AWidth - AHeight,aY - AHeight + aDeltaY);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
MoveTo(aX,aY);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LineTo(aX + AWidth,aY - aDeltaY);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LineTo(aX + AWidth + AHeight,aY - aHeight - aDeltaY);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
X0,Y0,X1,Y1,X2,Y2,D,H:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bDelta := 6;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if bWeightA > bWeightB then//[A > B]
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bDelta := bDelta
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else if bWeightA = bWeightB then//[A = B]
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bDelta := 0
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else//[A < B]
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bDelta := - bDelta;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
X0 := bMainPivot.X;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Y0 := bMainPivot.Y;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
D := bWidth;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
H := bHeight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Pen.Color := bPivotColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Brush.Color := bPivotColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Polygon([Point(X0,Y0),Point(X0 - H,Y0 + H),Point(X0 + H,Y0 + H),Point(X0,Y0)]);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bCanvas.Pen.Color := bColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
DrawTray(bCanvas,X0,Y0,D,H,bDelta);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
X1 := X0 - D - H;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Y1 := Y0 - H + bDelta;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
DrawTray(bCanvas,X1,Y1,D div 2,H,0);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
X2 := X0 + D + H;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Y2 := Y0 - H - bDelta;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
DrawTray(bCanvas,X2,Y2,D div 2,H,0);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartAPivot.X := X1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartAPivot.Y := Y1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartBPivot.X := X2;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bPartBPivot.Y := Y2;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
...{ TC_Compare }
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
constructor TC_Compare.Create(bTrace: Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
isShowTrace := bTrace;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TC_Compare.Draw_AllBall;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
const
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strHint = '比较前:';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Loop:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(pPre_Latency,cbCmpPara.Pre_LNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(cbCmpPara.Pre_Latency,cbCmpPara.Pre_LNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to cbCmpPara.Pre_LNumber - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop] := TC_Ball_Class.Create(isShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].bAbstractBall := cbCmpPara.Pre_Latency[Loop];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].bSize := 10;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].bStartPoint := Point(80+cbPreStart.X + Loop * 25,cbPreStart.Y);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].SetBgAndTextColor(clBlue,clYellow);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].bCanvas := cCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].bCanvas.Font.Size := 11;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].bCanvas.Font.Style := [fsBold];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].bCanvas.Font.Color := clBlack;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].bCanvas.Brush.Color := clWhite;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].bCanvas.TextOut(cbPreStart.X,cbPreStart.Y,strHint);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].DrawSelf();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPre_Latency[Loop].Free();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TC_Compare.Draw_Balance;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Loop:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance := TC_Balance.Create();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.bWeightA := 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.bWeightB := 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to cbCount - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.bWeightA := cBalance.bWeightA + cBallPartA[Loop].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.bWeightB := cBalance.bWeightB + cBallPartB[Loop].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.bMainPivot := cbPivot;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.bPivotColor := clFuchsia;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.bColor := clBlue;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.bWidth := 100;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.bHeight := 18;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.bCanvas := cCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.DrawSelf();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cbPPartA := cBalance.bPartAPivot;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cbPPartB := cBalance.bPartBPivot;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cBalance.Free();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TC_Compare.Draw_Latency;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
const
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strHint = '比较后:';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Loop:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(pFro_Latency,cbCmpPara.Fro_LNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//SetLength(cbCmpPara.Fro_Latency,cbCmpPara.Fro_LNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//注意:下面Pre_Latency不能用Fro_Latency来代替,不知道为什么2003-11-20
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(cbCmpPara.Pre_Latency,cbCmpPara.Fro_LNumber);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to cbCmpPara.Fro_LNumber - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop] := TC_Ball_Class.Create(isShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].bAbstractBall := cbCmpPara.Fro_Latency[Loop];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].bSize := 10;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].bStartPoint := Point(80+cbFroStart.X + Loop * 25,cbFroStart.Y);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].SetBgAndTextColor(clGreen,clYellow);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].bCanvas := cCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].bCanvas.Font.Size := 11;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].bCanvas.Font.Style := [fsBold];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].bCanvas.Font.Color := clBlack;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].bCanvas.Brush.Color := clWhite;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].bCanvas.TextOut(cbFroStart.X,cbFroStart.Y,strHint);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].DrawSelf();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pFro_Latency[Loop].Free();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TC_Compare.Draw_Part_A;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Loop,r:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(pPartA,cbCount);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to cbCount - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop] := TC_Ball_Class.Create(isShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop].bAbstractBall.Order := cBallPartA[Loop].Order;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop].bAbstractBall.Weight := cBallPartA[Loop].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop].bSize := 10;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop].SetBgAndTextColor(clYellow,clRed);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop].bCanvas := cCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//注意:此句一定要有,设置字体的大小属性
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop].bCanvas.Font.Size := pPartA[Loop].bSize;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if pPartA[Loop].bCanvas.TextWidth(IntToStr(pPartA[Loop].bAbstractBall.Order)) >
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop].bCanvas.TextHeight(IntToStr(pPartA[Loop].bAbstractBall.Order)) then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
r := pPartA[Loop].bCanvas.TextWidth(IntToStr(pPartA[Loop].bAbstractBall.Order))
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
r := pPartA[Loop].bCanvas.TextHeight(IntToStr(pPartA[Loop].bAbstractBall.Order));
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
r := r * 1414 div 1000;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//下面的计算公式有点难
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop].bStartPoint.X := cbPPartA.X - (cbCount div 2) * r - r * 5 * (cbCount mod 2) div 10 + Loop * r;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop].bStartPoint.Y := cbPPartA.Y - r;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop].DrawSelf();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartA[Loop].Free();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TC_Compare.Draw_Part_B;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Loop,r:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(pPartb,cbCount);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to cbCount - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop] := TC_Ball_Class.Create(isShowTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop].bAbstractBall.Order := cBallPartB[Loop].Order;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop].bAbstractBall.Weight := cBallPartB[Loop].Weight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop].bSize := 10;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop].SetBgAndTextColor(clYellow,clRed);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop].bCanvas := cCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop].bCanvas.Font.Size := pPartB[Loop].bSize;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if pPartB[Loop].bCanvas.TextWidth(IntToStr(pPartB[Loop].bAbstractBall.Order)) >
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop].bCanvas.TextHeight(IntToStr(pPartB[Loop].bAbstractBall.Order)) then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
r := pPartB[Loop].bCanvas.TextWidth(IntToStr(pPartB[Loop].bAbstractBall.Order))
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
r := pPartB[Loop].bCanvas.TextHeight(IntToStr(pPartB[Loop].bAbstractBall.Order));
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
r := r * 1414 div 1000;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop].bStartPoint.X := cbPPartB.X - (cbCount div 2) * r - r * 5 * (cbCount mod 2) div 10 + Loop * r;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop].bStartPoint.Y := cbPPartB.Y - r;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop].DrawSelf();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
pPartB[Loop].Free();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TC_Compare.Weigh_Out();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Draw_Balance();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Draw_Part_A();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Draw_Part_B();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Balance_One_Compare(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BalancePivot:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BallNum:Byte;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
PartA,PartB:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ACanvas:TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bTrace:Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp:TC_Compare;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Loop:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp := TC_Compare.Create(bTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.cbPivot := BalancePivot;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.cbCount := BallNum;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.cCanvas := ACanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(OneCmp.cBallPartA,OneCmp.cbCount);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SetLength(OneCmp.cBallPartB,OneCmp.cbCount);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 0 to OneCmp.cbCount - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.cBallPartA[Loop] := PartA[Loop];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.cBallPartB[Loop] := PartB[Loop];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.Weigh_Out();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.Free();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Balance_One_Latency(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BallStart1,BallStart2:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmpPara:TC_CmpPara;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ACanvas:TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bTrace:Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp:TC_Compare;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp := TC_Compare.Create(bTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.cCanvas := ACanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.cbCmpPara := OneCmpPara;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.cbPreStart := BallStart1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.cbFroStart := BallStart2;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.Draw_AllBall();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.Draw_Latency();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
OneCmp.Free();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//问题条件设置处理算法(小于的初始状态演示算法)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure Process_Initial_Ball(
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
StartPoint:TPoint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
AllBall:array of TC_Ball;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ACanvas:TCanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
bTrace:Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
const
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//strHint = '初始状态:';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strHint = '';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Loop:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall: TC_Ball_Class;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := Low(AllBall) to High(AllBall) - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall := TC_Ball_Class.Create(bTrace);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall.bAbstractBall := AllBall[Loop + 1];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall.bSize := 10;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall.bStartPoint := Point(2 + StartPoint.X + Loop * 25,StartPoint.Y);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall.bCanvas := ACanvas;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall.bCanvas.Font.Size := 11;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall.bCanvas.Font.Style := [fsBold];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall.bCanvas.Font.Color := clBlack;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall.bCanvas.Brush.Color := clWhite;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall.bCanvas.TextOut(StartPoint.X,StartPoint.Y,strHint);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall.DrawSelf();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aBall.Free();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end.
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
6、 界面源码
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
作品名称: 小球问题通用解决方案
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
开发作者: 成晓旭
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
开发时间: 2003年01月21日
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
完成时间: 2003年01月22日
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
修改时间1: 2003年02月10日 新增Delphi绘图功能
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
修改时间2: 2003年11月14日 新增对问题模拟条件的用户设置功能
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
修改时间2: 2003年11月20日 新增ClearCanvas()方法,解决不能清除画面问题
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
unit BMain;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
interface
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
uses
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Dialogs, StdCtrls,BallType,Common, Buttons, ExtCtrls;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
type
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
TExceptStyle = (esLight,esHeavy); //偏轻 偏重
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
const
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strHint = '中国';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BallNumber = 12; //小球数量
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
BallValue = 10; //正常小球的质量
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
HeavyValue = 15; //偏重小球的质量
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
LightValue = 5; //偏轻小球的质量
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
type
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
TfrmMain = class(TForm)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
btnDemo: TButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
imgMain: TImage;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
gbConfig: TGroupBox;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton1: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton2: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton3: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton4: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton5: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton6: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton7: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton8: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton9: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton10: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton11: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioButton12: TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ImgConfig: TImage;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cbEStyle: TCheckBox;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Label1: TLabel;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Memo0: TMemo;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Label2: TLabel;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Label3: TLabel;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Memo1: TMemo;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Label4: TLabel;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Memo2: TMemo;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Label5: TLabel;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Memo3: TMemo;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
btnSetNumber: TButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
btnAuto: TButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
btnAbout: TButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Label6: TLabel;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
cbTrance: TCheckBox;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure FormShow(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure RadioButton1Click(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure btnDemoClick(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure FormCreate(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure btnSetNumberClick(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure btnAutoClick(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure btnAboutClick(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
private
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
...{ Private declarations }
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
isTrance: Boolean; //是否跟踪(cbTrance的状态记录)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SmallBall:array[0..BallNumber] of TC_Ball; //小球的抽象数据
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptBall: TC_Ball; //异常小球
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptStyle:TExceptStyle; //异常小球的特性
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptBallValue:Integer; //异常小球的质量
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptColor:TColor; //异常小球的表示颜色
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//处理小球问题条件设置RadioGroup
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
function ProcessRadioButton(isSort:Boolean):Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//选择异常小球方法
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure ChooseExceptBall();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//绘制所有小球方法
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
// withExceptBall = true<有异常小球的绘制>
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
// withExceptBall = false<无异常小球的绘制>
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure DrawSmallBall(withExceptBall: Boolean; isTrance: Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure ClearCanvas
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
(aCanvas: TCanvas);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
public
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
...{ Public declarations }
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
frmMain: TfrmMain;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
implementation
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
...{$R *.dfm}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//单元内部常量定义
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
const
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Soft_Name = '小球问题解答过程演示程序0.2版';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strWaitHint = '本功能正在加紧完善中......' + CHR(13) + CHR(10) +
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
'请拭目以待!';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strSetNumber = '设置[3-12]的小球数目,程序将自动演示问题的解答过程!'
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ CHR(13) + CHR(10) + strWaitHint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
strAutoAnswer = '设置任意数目的小球,程序将根据本题的问题模式,'
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+'推算最少的比较次数,并自动演示推算过程!'
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
+ CHR(13) + CHR(10) + strWaitHint;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
About_Soft_Info = Soft_Name + CHR(13) + CHR(10) +
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
'开发作者:成晓旭'+ CHR(13) + CHR(10) +
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
'完成时间:2003年01月23日' + CHR(13) + CHR(10) +
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
'最后修改:2003年11月20日' + CHR(13) + CHR(10) +
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
'联系方式:CXXSoft@163.com' + CHR(13) + CHR(10) +
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
'设计说明:本程序采用纯面向对象的分析、设计、实现。' +
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
'也是本人的第一个运用' +
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
' 设计模式的作品。' + CHR(13) + CHR(10) +
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
'发布说明:程序完成时,我将公布其源码<欢迎来信索取>。';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
function TfrmMain.ProcessRadioButton(isSort:Boolean):Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
const
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
space = 25;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aCtrl:TControl;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aChoose:TRadioButton;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//点击的小球索引号,循环计数器,第一个RadioButton的Top属性,GroupBox中RadioCount的计数器(关键)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
indexBall,I,aTop,RadioCount:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
indexBall := -1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aTop := 0;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
RadioCount := 0; //注意:此处初值 = -1 是错误的
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for I := 0 to gbConfig.ControlCount - 1 do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aCtrl := gbConfig.Controls[I];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if aCtrl.ClassType = TRadioButton then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
try
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Inc(RadioCount);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aChoose := TRadioButton(aCtrl);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if isSort then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if indexBall = -1 then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aTop := aChoose.Top
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aChoose.Top := aTop;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aChoose.Left := (RadioCount - 1) * space + 8;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if aChoose.Checked then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
indexBall := RadioCount;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
//ShowMessage('Index Ball = ' + IntToStr(indexBall));
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
break; //算法效率之关键
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
except
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Result := indexBall;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TfrmMain.FormShow(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ProcessRadioButton(true);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
DrawSmallBall(false,cbTrance.Checked);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TfrmMain.ChooseExceptBall();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
index:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
index := ProcessRadioButton(false);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if (index >= 0) and (index <= BallNumber) then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptBall := SmallBall[index];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if cbEStyle.Checked then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptStyle := esHeavy;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptBallValue := HeavyValue;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptColor := clRed;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
else
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptStyle := esLight;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptBallValue := LightValue;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptColor := clFuchsia;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptBall.Weight := ExceptBallValue;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptBall.BgColor := ExceptColor;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ExceptBall.TextColor := clBlack;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SmallBall[index] := ExceptBall;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TfrmMain.DrawSmallBall(withExceptBall: Boolean; isTrance: Boolean);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
var
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Loop:Integer;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
for Loop := 1 to BallNumber do
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SmallBall[Loop].Order := Loop;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SmallBall[Loop].Weight := BallValue;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SmallBall[Loop].BgColor := clBlue;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
SmallBall[Loop].TextColor := clRed;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
if withExceptBall then
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
ChooseExceptBall();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Draw_Ball_Config(SmallBall,ImgConfig.Canvas,ClientRect,isTrance);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TfrmMain.RadioButton1Click(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
try
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
isTrance := cbTrance.Checked;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
except
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
isTrance := NOT isTrance;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
DrawSmallBall(true,isTrance);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
btnDemo.SetFocus();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TfrmMain.btnDemoClick(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Serach_Error_Ball(SmallBall,imgMain.Canvas,ClientRect,isTrance);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Memo1.Lines.Text := strLog1;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Memo2.Lines.Text := strLog2;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Memo3.Lines.Text := strLog3;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TfrmMain.FormCreate(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
// Width := Screen.Width;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
// Height := Screen.Height;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Width := 800;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Height := 600;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Caption := Soft_Name;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TfrmMain.ClearCanvas(aCanvas: TCanvas);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aCanvas.Brush.Style := bsSolid;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aCanvas.Brush.Color := clWhite;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
aCanvas.FillRect(ClientRect);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TfrmMain.btnSetNumberClick(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Application.MessageBox(strSetNumber,Soft_Name,MB_ICONINFORMATION);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TfrmMain.btnAutoClick(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Application.MessageBox(strAutoAnswer,Soft_Name,MB_ICONINFORMATION);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
procedure TfrmMain.btnAboutClick(Sender: TObject);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
begin
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Application.MessageBox(About_Soft_Info,Soft_Name,MB_ICONINFORMATION);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
end.
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1299788
相关文章推荐
- 经典面试问题:12小球问题算法(源码)
- 经典面试问题:12小球问题算法(源码)
- 经典面试问题:12小球问题算法(源码)
- 经典面试问题:12小球问题算法(源码)
- 经典面试问题:12小球问题算法(源码)
- 经典面试问题:12小球问题算法(源码)
- 经典面试问题:12小球问题算法(源码)
- 经典面试问题:12小球问题算法(源码)
- 经典面试问题:12小球问题算法(源码)
- 经典面试问题:12小球问题算法(源码)
- 经典面试问题:12小球问题算法(源码)
- 经典面试问题:12小球问题算法(源码)
- 经典面试问题:12小球问题算法(源码)
- 经典面试问题:12小球问题算法(源码)
- 经典面试问题:12小球问题算法(源码)
- 经典面试问题:12小球问题算法(源码)
- 经典面试问题:12小球问题算法(源码)
- 经典面试问题:12小球问题算法(源码)
- 经典面试问题:12小球问题算法(文档)
- 经典面试问题:12小球问题算法(抄的)