السلام عليكم
لدي البرنامج التالي وهو عباره عن واجهة لنظام تصويت مكون من اربع اجهزة تستخدم للتصويت
هذه الاجهزة الاربعة متصلة الى الحاسب عن طريق بورت
COM1
يقوم الكائن TCAN_Bridge بمراقبة المنفذ التسلسلي بشكل دائم وهو عبارة عن خيط تنفيذ مستقل يعمل
بشكل منفصل عن البرنامج وعند وصول رسالة على الشكل
(N:xx,rr)
حيث xx هو رقم العقده او جهاز التصويت و rr هو النتيجة يقوم باستدعاء الاجراء ADD Result مع البارمترات
rr,xx
والذي يقوم باضافة النتيجة الى متحولات النتائج الموجودة في البرنامج الرئيسي ويظهر النتائج الجديدة على الشاشة
مطلوب مساعده في كتابة هذا الكائن الخاص بمراقبة البورت
COM1
كود
GroupBox1:TGroupBox;
GroupBox2:TGroupBox;
BitBtn1:TBitBtn;
BitBtn2:TBitBtn;
BitBtn3:TBitBtn;
Label1:TLabel;
edTime:TEdit;
UpDown:TUpDown;
Label2:TLabel;
Label3:TLabel;
edNum:TEdit;
UpDown2:TUpDown;
prgD:TProgressBar;
prgC:TProgressBar;
prgB:TProgressBar;
prgA:TProgressBar;
Label4:TLabel;
Label5:TLabel;
Label6:TLabel;
Label7:TLabel;
edA_Rate:TEdit;
edD_Rate:TEdit;
edC_Rate:TEdit;
edB_Rate:TEdit;
Bevel1:TBevel;
Label9:TLabel;
edNonVoteNr:TEdit;
Label10:TLabel;
edVoteRate:TEdit;
Timer1:TEdit;
lbTime:TLabel;
procedure BitBtn3Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure edTimeChange(Sender: TObject);
procedure edNumChange(Sender: TObject);
private
{ Private declarations }
m_TimeOut : integer;
m_A_Num, m_B_Num, m_C_Num, m_D_Num : integer;
m_A_Rate, m_B_Rate, m_C_Rate, m_D_Rate : Real;
m_VoteNum, m_Non_Vote_Num : integer;
m_Vote_Rate : Real;
m_Node_Num : integer;
public
{ Public declarations }
procedure ClrResult;
procedure ShowResult;
procedure AddResult(N,R:Integer);
end;
var
Form1:TForm1;
implementation
uses Bridge;
{R *.dfm$}
var m_Bridge : TCAN_Bridge;
procedure TForm1.ClrResult;
Begin
m_A_Num := 0
m_B_Num := 0
m_C_Num := 0
m_D_Num := 0
m_VoteNum := 0
m_Non_Vote_Num := m_Node_num;
ShowResult;
edTime.Enabled := True;
edNum.Enabled := True;
end;
procedure TForm1.AddResult(N,R:Integer);
Begin
inc (m_VoteNum);
m_Non_Vote_Num := m_Node_Num - m_VoteNum;
case R of
inc (m_A_Num :0);
inc (m_B_Num :1);
inc (m_C_Num :2);
inc (m_D_Num :3);
end;
ShowResult;
end;
procedure TForm1.ShowResult;
Begin
if m_A_Num = 0 Then m_A_Rate := 0
else m_A_Rate := m_A_Num * 100 / m_VoteNum;
if m_B_Num = 0 Then m_B_Rate := 0
else m_B_Rate := m_B_Num * 100 / m_VoteNum;
if m_C_Num = 0 Then m_C_Rate := 0
else m_C_Rate := m_C_Num * 100 / m_VoteNum;
if m_D_Num = 0 Then m_D_Rate := 0
else m_D_Rate := m_D_Num * 100 / m_VoteNum;
if m_VoteNum = 0 Then m_vote_Rate := 0
else m_Vote_Rate := m_VoteNum * 100 /
StrToInt(edNum.Text);
prgA.Position := Round(m_A_Rate);
prgB.Position := Round(m_B_Rate);
prgC.Position := Round(m_C_Rate);
prgD.Position := Round(m_D_Rate);
edA_Rate.Text := FloatToStr(m_A_Rate);
edB_Rate.Text := FloatToStr(m_B_Rate);
edC_Rate.Text := FloatToStr(m_C_Rate);
edD_Rate.Text := FloatToStr(m_D_Rate);
edVoteNr.Text := IntToStr(m_VoteNum);
edNonVoteNr.Text := IntToStr(m_Non_Vote_Num);
edVoteRate.Text := FloatToStr(m_Vote_Rate);
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
Clear REsult//
ClrResult;
Timer1.Enabled := True;
Send Start Message //
m_Bridge.SendMessage('S');
edTime.Enabled := False;
edNum.Enabled :=False;
lbTime.Visible := true
lbTime.Caption := edTime.Text+'HassaN';
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Dec(m_timeOut);
lbTime.Caption := Format('HassaN',[m_TimeOut]);
if m_TimeOut = 0 then Begin
//
Timer1.Enabled := False;
m_Bridge.SendMessage('R');
ShowResult;
end;
procedure TForm1.BitBtn2Click(Sender: TObjet);
begin
Timer1.Enabled := false;
lbTime.Visible := False;
ClrResult;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
m_Bridge.SendMessage('R');
Close;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
m_Bridge := TCAN_Bridge.Creat(true,'COM1');
m_Node_Num := 4;
m_TimeOut := 60;
ClrResult;
end;
procedure TForm1.edTimeChange(Sender: TObject);
begin
m_TimeOut := StrToInt(edTime.Text);
end;
procedure TForm1.edNumChange(Sender: TObject);
begin
m_Node_Num := StrToInt(edNum.Text);
end
GroupBox2:TGroupBox;
BitBtn1:TBitBtn;
BitBtn2:TBitBtn;
BitBtn3:TBitBtn;
Label1:TLabel;
edTime:TEdit;
UpDown:TUpDown;
Label2:TLabel;
Label3:TLabel;
edNum:TEdit;
UpDown2:TUpDown;
prgD:TProgressBar;
prgC:TProgressBar;
prgB:TProgressBar;
prgA:TProgressBar;
Label4:TLabel;
Label5:TLabel;
Label6:TLabel;
Label7:TLabel;
edA_Rate:TEdit;
edD_Rate:TEdit;
edC_Rate:TEdit;
edB_Rate:TEdit;
Bevel1:TBevel;
Label9:TLabel;
edNonVoteNr:TEdit;
Label10:TLabel;
edVoteRate:TEdit;
Timer1:TEdit;
lbTime:TLabel;
procedure BitBtn3Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure edTimeChange(Sender: TObject);
procedure edNumChange(Sender: TObject);
private
{ Private declarations }
m_TimeOut : integer;
m_A_Num, m_B_Num, m_C_Num, m_D_Num : integer;
m_A_Rate, m_B_Rate, m_C_Rate, m_D_Rate : Real;
m_VoteNum, m_Non_Vote_Num : integer;
m_Vote_Rate : Real;
m_Node_Num : integer;
public
{ Public declarations }
procedure ClrResult;
procedure ShowResult;
procedure AddResult(N,R:Integer);
end;
var
Form1:TForm1;
implementation
uses Bridge;
{R *.dfm$}
var m_Bridge : TCAN_Bridge;
procedure TForm1.ClrResult;
Begin
m_A_Num := 0
m_B_Num := 0
m_C_Num := 0
m_D_Num := 0
m_VoteNum := 0
m_Non_Vote_Num := m_Node_num;
ShowResult;
edTime.Enabled := True;
edNum.Enabled := True;
end;
procedure TForm1.AddResult(N,R:Integer);
Begin
inc (m_VoteNum);
m_Non_Vote_Num := m_Node_Num - m_VoteNum;
case R of
inc (m_A_Num :0);
inc (m_B_Num :1);
inc (m_C_Num :2);
inc (m_D_Num :3);
end;
ShowResult;
end;
procedure TForm1.ShowResult;
Begin
if m_A_Num = 0 Then m_A_Rate := 0
else m_A_Rate := m_A_Num * 100 / m_VoteNum;
if m_B_Num = 0 Then m_B_Rate := 0
else m_B_Rate := m_B_Num * 100 / m_VoteNum;
if m_C_Num = 0 Then m_C_Rate := 0
else m_C_Rate := m_C_Num * 100 / m_VoteNum;
if m_D_Num = 0 Then m_D_Rate := 0
else m_D_Rate := m_D_Num * 100 / m_VoteNum;
if m_VoteNum = 0 Then m_vote_Rate := 0
else m_Vote_Rate := m_VoteNum * 100 /
StrToInt(edNum.Text);
prgA.Position := Round(m_A_Rate);
prgB.Position := Round(m_B_Rate);
prgC.Position := Round(m_C_Rate);
prgD.Position := Round(m_D_Rate);
edA_Rate.Text := FloatToStr(m_A_Rate);
edB_Rate.Text := FloatToStr(m_B_Rate);
edC_Rate.Text := FloatToStr(m_C_Rate);
edD_Rate.Text := FloatToStr(m_D_Rate);
edVoteNr.Text := IntToStr(m_VoteNum);
edNonVoteNr.Text := IntToStr(m_Non_Vote_Num);
edVoteRate.Text := FloatToStr(m_Vote_Rate);
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
Clear REsult//
ClrResult;
Timer1.Enabled := True;
Send Start Message //
m_Bridge.SendMessage('S');
edTime.Enabled := False;
edNum.Enabled :=False;
lbTime.Visible := true
lbTime.Caption := edTime.Text+'HassaN';
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Dec(m_timeOut);
lbTime.Caption := Format('HassaN',[m_TimeOut]);
if m_TimeOut = 0 then Begin
//
Timer1.Enabled := False;
m_Bridge.SendMessage('R');
ShowResult;
end;
procedure TForm1.BitBtn2Click(Sender: TObjet);
begin
Timer1.Enabled := false;
lbTime.Visible := False;
ClrResult;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
m_Bridge.SendMessage('R');
Close;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
m_Bridge := TCAN_Bridge.Creat(true,'COM1');
m_Node_Num := 4;
m_TimeOut := 60;
ClrResult;
end;
procedure TForm1.edTimeChange(Sender: TObject);
begin
m_TimeOut := StrToInt(edTime.Text);
end;
procedure TForm1.edNumChange(Sender: TObject);
begin
m_Node_Num := StrToInt(edNum.Text);
end