Adds basic animations support to tappytux

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1961 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
sekelsenmat
2011-09-15 14:34:06 +00:00
parent e8a94cd00b
commit 5379901827
7 changed files with 226 additions and 88 deletions

View File

@ -77,6 +77,7 @@ end;
procedure TformConfig.btnLoadClick(Sender: TObject); procedure TformConfig.btnLoadClick(Sender: TObject);
begin begin
SetCurrentModule(comboGameType.ItemIndex); SetCurrentModule(comboGameType.ItemIndex);
GetCurrentModule().StartNewGame();
formTappyTuxGame.Show; formTappyTuxGame.Show;
Hide; Hide;

View File

@ -8,7 +8,7 @@ uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
ExtCtrls, ExtCtrls,
// TappyTux // TappyTux
tappydrawer; tappydrawer, tappymodules;
type type
@ -49,6 +49,8 @@ procedure TformTappyTuxGame.btnExitClick(Sender: TObject);
begin begin
Close; Close;
formConfig.Show; formConfig.Show;
GetCurrentModule().EndGame();
end; end;
procedure TformTappyTuxGame.Edit1KeyPress(Sender: TObject; var Key: char); procedure TformTappyTuxGame.Edit1KeyPress(Sender: TObject; var Key: char);

View File

@ -17,6 +17,8 @@ type
constructor Create; override; constructor Create; override;
procedure TranslateTextsToEnglish; override; procedure TranslateTextsToEnglish; override;
procedure TranslateTextsToPortuguese; override; procedure TranslateTextsToPortuguese; override;
procedure StartNewGame(); override;
procedure EndGame(); override;
end; end;
implementation implementation
@ -38,6 +40,16 @@ begin
ShortDescription := 'TappyMath - Um jogo para aprender aritmética'; ShortDescription := 'TappyMath - Um jogo para aprender aritmética';
end; end;
procedure TTappyMath.StartNewGame;
begin
end;
procedure TTappyMath.EndGame;
begin
end;
initialization initialization
AddModule(TTappyMath.Create); AddModule(TTappyMath.Create);
end. end.

View File

@ -6,26 +6,55 @@ interface
uses uses
Classes, SysUtils, Classes, SysUtils,
tappymodules; // LCL
ExtCtrls,
// TappyTux
tappymodules, tappydrawer;
type type
{ TTappyWords } { TTappyWords }
TTappyWords = class(TTappyModule) TTappyWords = class(TTappyModule)
private
timerWords: TTimer;
procedure HandleOnTimer(Sender: TObject);
public public
constructor Create; override; constructor Create; override;
destructor Destroy; override;
procedure TranslateTextsToEnglish; override; procedure TranslateTextsToEnglish; override;
procedure TranslateTextsToPortuguese; override; procedure TranslateTextsToPortuguese; override;
procedure StartNewGame(); override;
procedure EndGame(); override;
end; end;
implementation implementation
{ TTappyWords } { TTappyWords }
procedure TTappyWords.HandleOnTimer(Sender: TObject);
begin
vTappyTuxDrawer.HandleAnimationOnTimer();
// Create falling ballons here
vTappyTuxDrawer.AddAnimation(TBallonAnimation.Create);
end;
constructor TTappyWords.Create; constructor TTappyWords.Create;
begin begin
inherited Create; inherited Create;
timerWords := TTimer.Create(nil);
timerWords.Enabled := False;
timerWords.Interval := 1000;
timerWords.OnTimer := @HandleOnTimer;
end;
destructor TTappyWords.Destroy;
begin
timerWords.Free;
inherited Destroy;
end; end;
procedure TTappyWords.TranslateTextsToEnglish; procedure TTappyWords.TranslateTextsToEnglish;
@ -38,6 +67,16 @@ begin
ShortDescription := 'TappyWords - Um jogo para aprender a digitar e ortografia'; ShortDescription := 'TappyWords - Um jogo para aprender a digitar e ortografia';
end; end;
procedure TTappyWords.StartNewGame;
begin
timerWords.Enabled := True;
end;
procedure TTappyWords.EndGame;
begin
timerWords.Enabled := False;
end;
initialization initialization
AddModule(TTappyWords.Create); AddModule(TTappyWords.Create);
end. end.

View File

@ -14,7 +14,7 @@ type
TTappyTuxAnimation = class TTappyTuxAnimation = class
CurrentStep: Integer; CurrentStep: Integer;
FinalStep: Integer; FinalStep: Integer;
constructor Create; constructor Create; virtual;
procedure DrawToIntfImg(AIntfImg: TLazIntfImage); virtual; abstract; procedure DrawToIntfImg(AIntfImg: TLazIntfImage); virtual; abstract;
procedure ExecuteFinal; virtual; abstract; procedure ExecuteFinal; virtual; abstract;
end; end;
@ -27,6 +27,15 @@ type
procedure ExecuteFinal; override; procedure ExecuteFinal; override;
end; end;
{ TBallonAnimation }
TBallonAnimation = class(TTappyTuxAnimation)
public
constructor Create; override;
procedure DrawToIntfImg(AIntfImg: TLazIntfImage); override;
procedure ExecuteFinal; override;
end;
{ TTappyTuxDrawer } { TTappyTuxDrawer }
TTappyTuxDrawer = class(TCustomControl) TTappyTuxDrawer = class(TCustomControl)
@ -35,6 +44,7 @@ type
FAnimationList: TFPList; FAnimationList: TFPList;
public public
constructor Create(AOwner: TComponent); override; constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure EraseBackground(DC: HDC); override; procedure EraseBackground(DC: HDC); override;
procedure Paint; override; procedure Paint; override;
procedure DrawToCanvas(ACanvas: TCanvas); procedure DrawToCanvas(ACanvas: TCanvas);
@ -49,6 +59,7 @@ type
Shift: TShiftState; X, Y: Integer); Shift: TShiftState; X, Y: Integer);
procedure HandleOnTimer(Sender: TObject); procedure HandleOnTimer(Sender: TObject);
procedure AddAnimation(AAnimation: TTappyTuxAnimation); procedure AddAnimation(AAnimation: TTappyTuxAnimation);
procedure HandleAnimationOnTimer();
end; end;
var var
@ -56,6 +67,26 @@ var
implementation implementation
{ TBallonAnimation }
constructor TBallonAnimation.Create;
begin
inherited Create;
CurrentStep := 0;
FinalStep := 200;
end;
procedure TBallonAnimation.DrawToIntfImg(AIntfImg: TLazIntfImage);
begin
AIntfImg.Colors[CurrentStep, CurrentStep] := colRed;
end;
procedure TBallonAnimation.ExecuteFinal;
begin
// Lost the game if the ballon reached its end
end;
{ TFireAnimation } { TFireAnimation }
procedure TFireAnimation.DrawToIntfImg(AIntfImg: TLazIntfImage); procedure TFireAnimation.DrawToIntfImg(AIntfImg: TLazIntfImage);
@ -102,6 +133,8 @@ constructor TTappyTuxDrawer.Create(AOwner: TComponent);
begin begin
inherited Create(AOwner); inherited Create(AOwner);
FAnimationList := TFPList.Create;
{ imgBoard := TPortableNetworkGraphic.Create; { imgBoard := TPortableNetworkGraphic.Create;
imgWPawn := TPortableNetworkGraphic.Create; imgWPawn := TPortableNetworkGraphic.Create;
imgWKnight := TPortableNetworkGraphic.Create; imgWKnight := TPortableNetworkGraphic.Create;
@ -122,6 +155,13 @@ begin
OnMouseDown := @HandleMouseDown; OnMouseDown := @HandleMouseDown;
end; end;
destructor TTappyTuxDrawer.Destroy;
begin
FAnimationList.Free;
inherited Destroy;
end;
procedure TTappyTuxDrawer.EraseBackground(DC: HDC); procedure TTappyTuxDrawer.EraseBackground(DC: HDC);
begin begin
// Uncomment this to enable default background erasing // Uncomment this to enable default background erasing
@ -155,6 +195,8 @@ var
lIntfImage: TLazIntfImage; lIntfImage: TLazIntfImage;
lTmpBmp: TBitmap; lTmpBmp: TBitmap;
X, Y: integer; X, Y: integer;
i: Integer;
lAnimation: TTappyTuxAnimation;
begin begin
lIntfImage := TLazIntfImage.Create(0, 0); lIntfImage := TLazIntfImage.Create(0, 0);
lTmpBmp := TBitmap.Create; lTmpBmp := TBitmap.Create;
@ -180,10 +222,14 @@ begin
Y := (8 - row) * INT_CHESSTILE_SIZE; Y := (8 - row) * INT_CHESSTILE_SIZE;
DrawImageWithTransparentColor(lIntfImage, X, Y, FPCOLOR_TRANSPARENT_TILE, lTileBmp); DrawImageWithTransparentColor(lIntfImage, X, Y, FPCOLOR_TRANSPARENT_TILE, lTileBmp);
end; end;}
// Now animations // Now animations
if Assigned(FAnimation) then FAnimation.DrawToIntfImg(lIntfImage);} for i := 0 to FAnimationList.Count - 1 do
begin
lAnimation := TTappyTuxAnimation(FAnimationList.Items[i]);
lAnimation.DrawToIntfImg(lIntfImage);
end;
lTmpBmp.LoadFromIntfImage(lIntfImage); lTmpBmp.LoadFromIntfImage(lIntfImage);
ACanvas.Draw(0, 0, lTmpBmp); ACanvas.Draw(0, 0, lTmpBmp);
@ -290,8 +336,22 @@ end;
procedure TTappyTuxDrawer.AddAnimation(AAnimation: TTappyTuxAnimation); procedure TTappyTuxDrawer.AddAnimation(AAnimation: TTappyTuxAnimation);
begin begin
{ FDrawerState := dsRunningAnimation; FAnimationList.Add(AAnimation);
FAnimation := AAnimation;} end;
procedure TTappyTuxDrawer.HandleAnimationOnTimer;
var
i: Integer;
lAnimation: TTappyTuxAnimation;
begin
for i := 0 to FAnimationList.Count - 1 do
begin
lAnimation := TTappyTuxAnimation(FAnimationList.Items[i]);
Inc(lAnimation.CurrentStep);
end;
Self.Invalidate;
end; end;
end. end.

View File

@ -23,6 +23,8 @@ type
procedure TranslateTexts(ALanguage: Integer); procedure TranslateTexts(ALanguage: Integer);
procedure TranslateTextsToEnglish; virtual; procedure TranslateTextsToEnglish; virtual;
procedure TranslateTextsToPortuguese; virtual; procedure TranslateTextsToPortuguese; virtual;
procedure StartNewGame(); virtual; abstract;
procedure EndGame(); virtual; abstract;
end; end;
procedure AddModule(AModule: TTappyModule); procedure AddModule(AModule: TTappyModule);

View File

@ -35,12 +35,12 @@
<PackageName Value="LCL"/> <PackageName Value="LCL"/>
</Item1> </Item1>
</RequiredPackages> </RequiredPackages>
<Units Count="10"> <Units Count="12">
<Unit0> <Unit0>
<Filename Value="tappytux.lpr"/> <Filename Value="tappytux.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="tappytux"/> <UnitName Value="tappytux"/>
<UsageCount Value="36"/> <UsageCount Value="37"/>
</Unit0> </Unit0>
<Unit1> <Unit1>
<Filename Value="gameconfigform.pas"/> <Filename Value="gameconfigform.pas"/>
@ -50,9 +50,9 @@
<UnitName Value="gameconfigform"/> <UnitName Value="gameconfigform"/>
<EditorIndex Value="0"/> <EditorIndex Value="0"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="27"/> <TopLine Value="56"/>
<CursorPos X="10" Y="55"/> <CursorPos X="35" Y="80"/>
<UsageCount Value="36"/> <UsageCount Value="37"/>
<Loaded Value="True"/> <Loaded Value="True"/>
<LoadedDesigner Value="True"/> <LoadedDesigner Value="True"/>
</Unit1> </Unit1>
@ -62,13 +62,13 @@
<ComponentName Value="formTappyTuxGame"/> <ComponentName Value="formTappyTuxGame"/>
<ResourceBaseClass Value="Form"/> <ResourceBaseClass Value="Form"/>
<UnitName Value="gameplayform"/> <UnitName Value="gameplayform"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="1"/> <EditorIndex Value="1"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="28"/> <TopLine Value="1"/>
<CursorPos X="28" Y="69"/> <CursorPos X="28" Y="11"/>
<UsageCount Value="36"/> <UsageCount Value="37"/>
<Loaded Value="True"/> <Loaded Value="True"/>
<LoadedDesigner Value="True"/>
</Unit2> </Unit2>
<Unit3> <Unit3>
<Filename Value="tappyconfig.pas"/> <Filename Value="tappyconfig.pas"/>
@ -78,7 +78,7 @@
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="16"/> <TopLine Value="16"/>
<CursorPos X="19" Y="50"/> <CursorPos X="19" Y="50"/>
<UsageCount Value="30"/> <UsageCount Value="31"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit3> </Unit3>
<Unit4> <Unit4>
@ -87,9 +87,9 @@
<UnitName Value="tappydrawer"/> <UnitName Value="tappydrawer"/>
<EditorIndex Value="4"/> <EditorIndex Value="4"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="183"/> <TopLine Value="205"/>
<CursorPos X="31" Y="189"/> <CursorPos X="11" Y="230"/>
<UsageCount Value="30"/> <UsageCount Value="31"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit4> </Unit4>
<Unit5> <Unit5>
@ -99,28 +99,29 @@
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="229"/> <TopLine Value="229"/>
<CursorPos X="19" Y="3"/> <CursorPos X="19" Y="3"/>
<UsageCount Value="30"/> <UsageCount Value="31"/>
</Unit5> </Unit5>
<Unit6> <Unit6>
<Filename Value="mod_tappywords.pas"/> <Filename Value="mod_tappywords.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="mod_tappywords"/> <UnitName Value="mod_tappywords"/>
<EditorIndex Value="5"/> <IsVisibleTab Value="True"/>
<EditorIndex Value="7"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="1"/> <TopLine Value="26"/>
<CursorPos X="1" Y="15"/> <CursorPos X="26" Y="50"/>
<UsageCount Value="30"/> <UsageCount Value="31"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit6> </Unit6>
<Unit7> <Unit7>
<Filename Value="tappymodules.pas"/> <Filename Value="tappymodules.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="tappymodules"/> <UnitName Value="tappymodules"/>
<EditorIndex Value="6"/> <EditorIndex Value="8"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="56"/> <TopLine Value="1"/>
<CursorPos X="4" Y="101"/> <CursorPos X="26" Y="31"/>
<UsageCount Value="30"/> <UsageCount Value="31"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit7> </Unit7>
<Unit8> <Unit8>
@ -129,9 +130,9 @@
<UnitName Value="mod_tappymath"/> <UnitName Value="mod_tappymath"/>
<EditorIndex Value="2"/> <EditorIndex Value="2"/>
<WindowIndex Value="0"/> <WindowIndex Value="0"/>
<TopLine Value="1"/> <TopLine Value="9"/>
<CursorPos X="6" Y="39"/> <CursorPos X="3" Y="50"/>
<UsageCount Value="29"/> <UsageCount Value="30"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit8> </Unit8>
<Unit9> <Unit9>
@ -141,127 +142,148 @@
<CursorPos X="1" Y="146"/> <CursorPos X="1" Y="146"/>
<UsageCount Value="10"/> <UsageCount Value="10"/>
</Unit9> </Unit9>
<Unit10>
<Filename Value="..\..\..\..\..\..\usr\share\fpcsrc\packages\fcl-image\src\fpimage.pp"/>
<UnitName Value="FPimage"/>
<EditorIndex Value="6"/>
<WindowIndex Value="0"/>
<TopLine Value="121"/>
<CursorPos X="23" Y="140"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
<DefaultSyntaxHighlighter Value="Delphi"/>
</Unit10>
<Unit11>
<Filename Value="..\..\..\lazarus\lcl\intfgraphics.pas"/>
<UnitName Value="IntfGraphics"/>
<EditorIndex Value="5"/>
<WindowIndex Value="0"/>
<TopLine Value="102"/>
<CursorPos X="29" Y="113"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit11>
</Units> </Units>
<JumpHistory Count="30" HistoryIndex="29"> <JumpHistory Count="30" HistoryIndex="29">
<Position1> <Position1>
<Filename Value="gameplayform.pas"/> <Filename Value="tappymodules.pas"/>
<Caret Line="11" Column="30" TopLine="1"/> <Caret Line="22" Column="74" TopLine="1"/>
</Position1> </Position1>
<Position2> <Position2>
<Filename Value="gameconfigform.pas"/> <Filename Value="tappymodules.pas"/>
<Caret Line="85" Column="16" TopLine="68"/> <Caret Line="96" Column="29" TopLine="77"/>
</Position2> </Position2>
<Position3> <Position3>
<Filename Value="gameconfigform.pas"/> <Filename Value="tappymodules.pas"/>
<Caret Line="80" Column="45" TopLine="55"/> <Caret Line="22" Column="74" TopLine="1"/>
</Position3> </Position3>
<Position4> <Position4>
<Filename Value="gameplayform.pas"/> <Filename Value="mod_tappywords.pas"/>
<Caret Line="42" Column="21" TopLine="1"/> <Caret Line="20" Column="37" TopLine="1"/>
</Position4> </Position4>
<Position5> <Position5>
<Filename Value="gameplayform.pas"/> <Filename Value="mod_tappymath.pas"/>
<Caret Line="51" Column="8" TopLine="27"/> <Caret Line="20" Column="40" TopLine="1"/>
</Position5> </Position5>
<Position6> <Position6>
<Filename Value="tappydrawer.pas"/> <Filename Value="mod_tappywords.pas"/>
<Caret Line="163" Column="41" TopLine="152"/> <Caret Line="18" Column="5" TopLine="8"/>
</Position6> </Position6>
<Position7> <Position7>
<Filename Value="tappymodules.pas"/> <Filename Value="mod_tappywords.pas"/>
<Caret Line="22" Column="25" TopLine="1"/> <Caret Line="24" Column="18" TopLine="15"/>
</Position7> </Position7>
<Position8> <Position8>
<Filename Value="tappymodules.pas"/> <Filename Value="mod_tappymath.pas"/>
<Caret Line="79" Column="17" TopLine="58"/> <Caret Line="21" Column="5" TopLine="3"/>
</Position8> </Position8>
<Position9> <Position9>
<Filename Value="tappymodules.pas"/> <Filename Value="tappydrawer.pas"/>
<Caret Line="89" Column="23" TopLine="65"/> <Caret Line="34" Column="22" TopLine="1"/>
</Position9> </Position9>
<Position10> <Position10>
<Filename Value="tappydrawer.pas"/> <Filename Value="tappydrawer.pas"/>
<Caret Line="163" Column="41" TopLine="152"/> <Caret Line="46" Column="34" TopLine="21"/>
</Position10> </Position10>
<Position11> <Position11>
<Filename Value="tappymodules.pas"/> <Filename Value="mod_tappywords.pas"/>
<Caret Line="89" Column="26" TopLine="65"/> <Caret Line="21" Column="34" TopLine="1"/>
</Position11> </Position11>
<Position12> <Position12>
<Filename Value="tappydrawer.pas"/> <Filename Value="tappydrawer.pas"/>
<Caret Line="163" Column="50" TopLine="100"/> <Caret Line="34" Column="33" TopLine="9"/>
</Position12> </Position12>
<Position13> <Position13>
<Filename Value="tappydrawer.pas"/> <Filename Value="tappydrawer.pas"/>
<Caret Line="149" Column="120" TopLine="139"/> <Caret Line="228" Column="17" TopLine="196"/>
</Position13> </Position13>
<Position14> <Position14>
<Filename Value="tappydrawer.pas"/> <Filename Value="tappydrawer.pas"/>
<Caret Line="163" Column="1" TopLine="139"/> <Caret Line="81" Column="15" TopLine="57"/>
</Position14> </Position14>
<Position15> <Position15>
<Filename Value="tappymodules.pas"/> <Filename Value="tappydrawer.pas"/>
<Caret Line="47" Column="1" TopLine="23"/> <Caret Line="79" Column="62" TopLine="57"/>
</Position15> </Position15>
<Position16> <Position16>
<Filename Value="tappymodules.pas"/> <Filename Value="..\..\..\lazarus\lcl\intfgraphics.pas"/>
<Caret Line="42" Column="15" TopLine="24"/> <Caret Line="113" Column="29" TopLine="102"/>
</Position16> </Position16>
<Position17> <Position17>
<Filename Value="tappymodules.pas"/> <Filename Value="tappydrawer.pas"/>
<Caret Line="52" Column="1" TopLine="24"/> <Caret Line="79" Column="62" TopLine="57"/>
</Position17> </Position17>
<Position18> <Position18>
<Filename Value="tappymodules.pas"/> <Filename Value="tappydrawer.pas"/>
<Caret Line="42" Column="1" TopLine="24"/> <Caret Line="81" Column="43" TopLine="57"/>
</Position18> </Position18>
<Position19> <Position19>
<Filename Value="tappymodules.pas"/> <Filename Value="gameplayform.pas"/>
<Caret Line="52" Column="1" TopLine="24"/> <Caret Line="53" Column="32" TopLine="28"/>
</Position19> </Position19>
<Position20> <Position20>
<Filename Value="tappymodules.pas"/> <Filename Value="gameplayform.pas"/>
<Caret Line="53" Column="1" TopLine="24"/> <Caret Line="54" Column="32" TopLine="29"/>
</Position20> </Position20>
<Position21> <Position21>
<Filename Value="gameconfigform.pas"/> <Filename Value="gameplayform.pas"/>
<Caret Line="121" Column="1" TopLine="80"/> <Caret Line="53" Column="32" TopLine="28"/>
</Position21> </Position21>
<Position22> <Position22>
<Filename Value="gameconfigform.pas"/> <Filename Value="tappydrawer.pas"/>
<Caret Line="120" Column="1" TopLine="80"/> <Caret Line="62" Column="5" TopLine="29"/>
</Position22> </Position22>
<Position23> <Position23>
<Filename Value="gameconfigform.pas"/> <Filename Value="tappydrawer.pas"/>
<Caret Line="79" Column="49" TopLine="77"/> <Caret Line="349" Column="15" TopLine="305"/>
</Position23> </Position23>
<Position24> <Position24>
<Filename Value="gameconfigform.pas"/> <Filename Value="tappydrawer.pas"/>
<Caret Line="80" Column="23" TopLine="55"/> <Caret Line="32" Column="19" TopLine="7"/>
</Position24> </Position24>
<Position25> <Position25>
<Filename Value="gameconfigform.pas"/> <Filename Value="gameplayform.pas"/>
<Caret Line="79" Column="12" TopLine="55"/> <Caret Line="55" Column="32" TopLine="28"/>
</Position25> </Position25>
<Position26> <Position26>
<Filename Value="tappymodules.pas"/> <Filename Value="gameplayform.pas"/>
<Caret Line="22" Column="75" TopLine="14"/> <Caret Line="53" Column="19" TopLine="29"/>
</Position26> </Position26>
<Position27> <Position27>
<Filename Value="tappymodules.pas"/> <Filename Value="mod_tappywords.pas"/>
<Caret Line="98" Column="22" TopLine="77"/> <Caret Line="37" Column="55" TopLine="2"/>
</Position27> </Position27>
<Position28> <Position28>
<Filename Value="tappymodules.pas"/> <Filename Value="mod_tappywords.pas"/>
<Caret Line="22" Column="74" TopLine="1"/> <Caret Line="10" Column="12" TopLine="1"/>
</Position28> </Position28>
<Position29> <Position29>
<Filename Value="tappymodules.pas"/> <Filename Value="mod_tappywords.pas"/>
<Caret Line="96" Column="29" TopLine="77"/> <Caret Line="37" Column="19" TopLine="13"/>
</Position29> </Position29>
<Position30> <Position30>
<Filename Value="tappymodules.pas"/> <Filename Value="mod_tappywords.pas"/>
<Caret Line="22" Column="74" TopLine="1"/> <Caret Line="12" Column="28" TopLine="1"/>
</Position30> </Position30>
</JumpHistory> </JumpHistory>
</ProjectOptions> </ProjectOptions>