
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6147 8e941d3f-bd1b-0410-a28a-d453659cc2b4
305 lines
7.7 KiB
ObjectPascal
305 lines
7.7 KiB
ObjectPascal
(* ***** BEGIN LICENSE BLOCK *****
|
|
* Version: MPL 1.1
|
|
*
|
|
* The contents of this file are subject to the Mozilla Public License Version
|
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
* http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
* for the specific language governing rights and limitations under the
|
|
* License.
|
|
*
|
|
* The Original Code is TurboPower SysTools
|
|
*
|
|
* The Initial Developer of the Original Code is
|
|
* TurboPower Software
|
|
*
|
|
* Portions created by the Initial Developer are Copyright (C) 1996-2002
|
|
* the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*
|
|
* ***** END LICENSE BLOCK ***** *)
|
|
|
|
{$IFDEF FPC}
|
|
{$mode DELPHI}
|
|
{$ENDIF}
|
|
|
|
unit Chain;
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFNDEF FPC}
|
|
Windows, Messages,
|
|
{$ENDIF}
|
|
SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
StdCtrls, StPtrns, ExtCtrls;
|
|
|
|
type
|
|
TInputData = class
|
|
public
|
|
{ Public declarations }
|
|
InData : integer;
|
|
end;
|
|
|
|
type
|
|
TOutputData = class
|
|
public
|
|
{ Public declarations }
|
|
OutData : integer;
|
|
end;
|
|
|
|
type
|
|
TChainForm = class(TForm)
|
|
Panel2: TPanel;
|
|
Ch1Lbl: TLabel;
|
|
Ch2Lbl: TLabel;
|
|
Ch3Lbl: TLabel;
|
|
Ch4Lbl: TLabel;
|
|
Ch5Lbl: TLabel;
|
|
Ch1Value: TEdit;
|
|
Ch2Value: TEdit;
|
|
Ch3Value: TEdit;
|
|
Ch4Value: TEdit;
|
|
Ch5Value: TEdit;
|
|
Ch1Msg: TEdit;
|
|
Ch2Msg: TEdit;
|
|
Ch3Msg: TEdit;
|
|
Ch4Msg: TEdit;
|
|
Ch5Msg: TEdit;
|
|
Panel1: TPanel;
|
|
RadioButton1: TRadioButton;
|
|
RadioButton2: TRadioButton;
|
|
InputValue: TEdit;
|
|
Start: TButton;
|
|
procedure RadioButton1Click(Sender: TObject);
|
|
procedure RadioButton2Click(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure StartClick(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
private
|
|
{ Private declarations }
|
|
// Code for the chain
|
|
TheChain : TStChain;
|
|
procedure Chain1Proc(aInputData, aResultData : TObject; var aStopNow : boolean);
|
|
procedure Chain2Proc(aInputData, aResultData : TObject; var aStopNow : boolean);
|
|
procedure Chain3Proc(aInputData, aResultData : TObject; var aStopNow : boolean);
|
|
procedure Chain4Proc(aInputData, aResultData : TObject; var aStopNow : boolean);
|
|
procedure Chain5Proc(aInputData, aResultData : TObject; var aStopNow : boolean);
|
|
procedure ClearScreen;
|
|
|
|
public
|
|
{ Public declarations }
|
|
end;
|
|
|
|
var
|
|
ChainForm: TChainForm;
|
|
|
|
implementation
|
|
|
|
{$IFDEF FPC}
|
|
{$R *.lfm}
|
|
{$ELSE}
|
|
{$R *.dfm}
|
|
{$ENDIF}
|
|
|
|
var
|
|
ChainPotato : Boolean;
|
|
TheChain: TStChain;
|
|
|
|
procedure TChainForm.RadioButton1Click(Sender: TObject);
|
|
begin
|
|
if (RadioButton1.Checked) then begin
|
|
Ch1Lbl.Caption := 'Handle < 10';
|
|
Ch2Lbl.Caption := 'Handle 10';
|
|
Ch3Lbl.Caption := 'Handle Odd';
|
|
Ch4Lbl.Caption := 'Handle > 100';
|
|
Ch5Lbl.Caption := 'Default Handler';
|
|
ChainPotato := true;
|
|
ClearScreen;
|
|
end;
|
|
end;
|
|
|
|
procedure TChainForm.RadioButton2Click(Sender: TObject);
|
|
begin
|
|
if (RadioButton2.Checked) then begin
|
|
Ch1Lbl.Caption := 'Add 10';
|
|
Ch2Lbl.Caption := 'Multiply by 10';
|
|
Ch3Lbl.Caption := 'Add 3';
|
|
Ch4Lbl.Caption := 'Subtract 4';
|
|
Ch5Lbl.Caption := 'Zero out';
|
|
ChainPotato := false;
|
|
ClearScreen;
|
|
end;
|
|
|
|
|
|
end;
|
|
procedure TChainForm.Chain1Proc(aInputData, aResultData : TObject; var aStopNow : boolean);
|
|
var
|
|
myInputData : TInputData;
|
|
myOutputData : TOutputData;
|
|
begin
|
|
if (ChainPotato) then begin
|
|
myInputData := TInputData(aInputData);
|
|
if (myInputData.InData < 10) then begin
|
|
Ch1Value.text := Inttostr(myInputData.InData);
|
|
Ch1Msg.Text := 'I handled it';
|
|
aStopNow := true;
|
|
end else begin
|
|
Ch1Value.text := ' ';
|
|
Ch1Msg.Text := 'Not here';
|
|
aStopNow := false;
|
|
end
|
|
end else begin
|
|
myOutputData := TOutputData(aResultData);
|
|
myOutputData.OutData := myOutputData.OutData + 10;
|
|
Ch1Value.text := Inttostr(myOutputData.OutData);
|
|
Ch1Msg.Text := 'Added 10';
|
|
end
|
|
end;
|
|
|
|
procedure TChainForm.Chain2Proc(aInputData, aResultData : TObject; var aStopNow : boolean);
|
|
var
|
|
myInputData : TInputData;
|
|
myOutputData : TOutputData;
|
|
begin
|
|
if (ChainPotato) then begin
|
|
myInputData := TInputData(aInputData);
|
|
if (myInputData.InData = 10) then begin
|
|
Ch2Value.text := Inttostr(myInputData.InData);
|
|
Ch2Msg.Text := 'I handled it';
|
|
aStopNow := true;
|
|
end else begin
|
|
Ch2Value.text := ' ';
|
|
Ch2Msg.Text := 'Not here';
|
|
aStopNow := false;
|
|
end
|
|
end else begin
|
|
myOutputData := TOutputData(aResultData);
|
|
myOutputData.OutData := myOutputData.OutData * 10;
|
|
Ch2Value.text := Inttostr(myOutputData.OutData);
|
|
Ch2Msg.Text := 'Mulitplied by 10';
|
|
end
|
|
end;
|
|
|
|
procedure TChainForm.Chain3Proc(aInputData, aResultData : TObject; var aStopNow : boolean);
|
|
var
|
|
myInputData : TInputData;
|
|
myOutputData : TOutputData;
|
|
begin
|
|
if (ChainPotato) then begin
|
|
myInputData := TInputData(aInputData);
|
|
if odd(myInputData.InData) then begin
|
|
Ch3Value.text := Inttostr(myInputData.InData);
|
|
Ch3Msg.Text := 'I handled it';
|
|
aStopNow := true;
|
|
end else begin
|
|
Ch3Value.text := ' ';
|
|
Ch3Msg.Text := 'Not here';
|
|
aStopNow := false;
|
|
end
|
|
end else begin
|
|
myOutputData := TOutputData(aResultData);
|
|
myOutputData.OutData := myOutputData.OutData + 3;
|
|
Ch3Value.text := Inttostr(myOutputData.OutData);
|
|
Ch3Msg.Text := 'Added 3';
|
|
end
|
|
end;
|
|
|
|
procedure TChainForm.Chain4Proc(aInputData, aResultData : TObject; var aStopNow : boolean);
|
|
var
|
|
myInputData : TInputData;
|
|
myOutputData : TOutputData;
|
|
begin
|
|
if (ChainPotato) then begin
|
|
myInputData := TInputData(aInputData);
|
|
if (myInputData.InData > 100) then begin
|
|
Ch4Value.text := Inttostr(myInputData.InData);
|
|
Ch4Msg.Text := 'I handled it';
|
|
aStopNow := true;
|
|
end else begin
|
|
Ch4Value.text := ' ';
|
|
Ch4Msg.Text := 'Not here';
|
|
aStopNow := false;
|
|
end
|
|
end else begin
|
|
myOutputData := TOutputData(aResultData);
|
|
myOutputData.OutData := myOutputData.OutData -4;
|
|
Ch4Value.text := Inttostr(myOutputData.OutData);
|
|
Ch4Msg.Text := 'Subtracted 4';
|
|
end
|
|
end;
|
|
|
|
procedure TChainForm.Chain5Proc(aInputData, aResultData : TObject; var aStopNow : boolean);
|
|
var
|
|
myInputData : TInputData;
|
|
myOutputData : TOutputData;
|
|
begin
|
|
if (ChainPotato) then begin
|
|
myInputData := TInputData(aInputData);
|
|
Ch5Value.text := Inttostr(myInputData.InData);
|
|
Ch5Msg.Text := 'I handled it';
|
|
aStopNow := true;
|
|
end else begin
|
|
myOutputData := TOutputData(aResultData);
|
|
myOutputData.OutData := 0;
|
|
Ch5Value.text := Inttostr(myOutputData.OutData);
|
|
Ch5Msg.Text := 'Zeroed out';
|
|
end
|
|
end;
|
|
|
|
procedure TChainForm.FormCreate(Sender: TObject);
|
|
begin
|
|
ChainPotato := true;
|
|
TheChain:= TStChain.create;
|
|
TheChain.Add(Chain1Proc);
|
|
TheChain.Add(Chain2Proc);
|
|
TheChain.Add(Chain3Proc);
|
|
TheChain.Add(Chain4Proc);
|
|
TheChain.Add(Chain5Proc);
|
|
end;
|
|
|
|
procedure TChainForm.StartClick(Sender: TObject);
|
|
var
|
|
myInputData : TInputData;
|
|
myOutputData : TOutputData;
|
|
begin
|
|
myInputData := nil;
|
|
myOutputData := nil;
|
|
try
|
|
myInputData := TInputData.Create;
|
|
myOutputData := TOutputData.Create;
|
|
myInputData.InData := Strtoint(InputValue.Text);
|
|
myOutputData.OutData := Strtoint(InputValue.Text);
|
|
ClearScreen;
|
|
TheChain.Handle(myInputData, myOutputData);
|
|
finally;
|
|
myInputData.free;
|
|
myOutputData.free;
|
|
end;
|
|
end;
|
|
|
|
procedure TChainForm.ClearScreen;
|
|
begin
|
|
Ch1Value.text := ' ';
|
|
Ch1Msg.Text := ' ';
|
|
Ch2Value.text := ' ';
|
|
Ch2Msg.Text := ' ';
|
|
Ch3Value.text := ' ';
|
|
Ch3Msg.Text := ' ';
|
|
Ch4Value.text := ' ';
|
|
Ch4Msg.Text := ' ';
|
|
Ch5Value.text := ' ';
|
|
Ch5Msg.Text := ' ';
|
|
end;
|
|
|
|
procedure TChainForm.FormDestroy(Sender: TObject);
|
|
begin
|
|
TheChain.free;
|
|
end;
|
|
|
|
end.
|