viewgit/viewgit/inc/functions.php:49 Function create_function() is deprecated [8192]
Index
» Empathy Jukebox : Commitdiff 85335f
Added On screen keyboard to tree
diff --git a/On Screen Keyboard/alpha.csv b/On Screen Keyboard/alpha.csv new file mode 100644 index 0000000..cd8fb3d --- /dev/null +++ b/On Screen Keyboard/alpha.csv @@ -0,0 +1,31 @@ +NULL,0,0.75,1 +Q,Q,1,1 +W,W,1,1 +E,E,1,1 +R,R,1,1 +T,T,1,1 +Y,Y,1,1 +U,U,1,1 +I,I,1,1 +O,O,1,1 +P,P,1,1 +ROW,0,0,0 +NULL,0,1,1 +A,A,1,1 +S,S,1,1 +D,D,1,1 +F,F,1,1 +G,G,1,1 +H,H,1,1 +J,J,1,1 +K,K,1,1 +L,L,1,1 +ROW,0,0,0 +NULL,0,1.5,1 +Z,Z,1,1 +X,X,1,1 +C,C,1,1 +V,V,1,1 +B,B,1,1 +N,N,1,1 +M,M,1,1 diff --git a/On Screen Keyboard/alphaoutline.csv b/On Screen Keyboard/alphaoutline.csv new file mode 100644 index 0000000..485c108 --- /dev/null +++ b/On Screen Keyboard/alphaoutline.csv @@ -0,0 +1,12 @@ +TR11 +BR11 +TR21 +BR21 +TR29 +BR29 +BL23 +TL23 +BL13 +TL13 +BL2 +TL2 diff --git a/On Screen Keyboard/emposk.bdsproj b/On Screen Keyboard/emposk.bdsproj new file mode 100644 index 0000000..a83eb69 --- /dev/null +++ b/On Screen Keyboard/emposk.bdsproj @@ -0,0 +1,175 @@ +<?xml version="1.0" encoding="utf-8"?> +<BorlandProject> + <PersonalityInfo> + <Option> + <Option Name="Personality">Delphi.Personality</Option> + <Option Name="ProjectType">VCLApplication</Option> + <Option Name="Version">1.0</Option> + <Option Name="GUID">{9EAEDD7F-059A-4E46-99F2-2C5BB60BA080}</Option> + </Option> + </PersonalityInfo> + <Delphi.Personality> + <Source> + <Source Name="MainSource">emposk.dpr</Source> + </Source> + <FileVersion> + <FileVersion Name="Version">7.0</FileVersion> + </FileVersion> + <Compiler> + <Compiler Name="A">1</Compiler> + <Compiler Name="B">0</Compiler> + <Compiler Name="C">1</Compiler> + <Compiler Name="D">1</Compiler> + <Compiler Name="E">0</Compiler> + <Compiler Name="F">0</Compiler> + <Compiler Name="G">1</Compiler> + <Compiler Name="H">1</Compiler> + <Compiler Name="I">1</Compiler> + <Compiler Name="J">1</Compiler> + <Compiler Name="K">0</Compiler> + <Compiler Name="L">1</Compiler> + <Compiler Name="M">0</Compiler> + <Compiler Name="N">1</Compiler> + <Compiler Name="O">1</Compiler> + <Compiler Name="P">1</Compiler> + <Compiler Name="Q">1</Compiler> + <Compiler Name="R">0</Compiler> + <Compiler Name="S">0</Compiler> + <Compiler Name="T">0</Compiler> + <Compiler Name="U">0</Compiler> + <Compiler Name="V">1</Compiler> + <Compiler Name="W">0</Compiler> + <Compiler Name="X">1</Compiler> + <Compiler Name="Y">2</Compiler> + <Compiler Name="Z">1</Compiler> + <Compiler Name="ShowHints">True</Compiler> + <Compiler Name="ShowWarnings">True</Compiler> + <Compiler Name="UnitAliases">WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;</Compiler> + <Compiler Name="NamespacePrefix"></Compiler> + <Compiler Name="GenerateDocumentation">False</Compiler> + <Compiler Name="DefaultNamespace"></Compiler> + <Compiler Name="SymbolDeprecated">True</Compiler> + <Compiler Name="SymbolLibrary">True</Compiler> + <Compiler Name="SymbolPlatform">True</Compiler> + <Compiler Name="SymbolExperimental">True</Compiler> + <Compiler Name="UnitLibrary">True</Compiler> + <Compiler Name="UnitPlatform">True</Compiler> + <Compiler Name="UnitDeprecated">True</Compiler> + <Compiler Name="UnitExperimental">True</Compiler> + <Compiler Name="HResultCompat">True</Compiler> + <Compiler Name="HidingMember">True</Compiler> + <Compiler Name="HiddenVirtual">True</Compiler> + <Compiler Name="Garbage">True</Compiler> + <Compiler Name="BoundsError">True</Compiler> + <Compiler Name="ZeroNilCompat">True</Compiler> + <Compiler Name="StringConstTruncated">True</Compiler> + <Compiler Name="ForLoopVarVarPar">True</Compiler> + <Compiler Name="TypedConstVarPar">True</Compiler> + <Compiler Name="AsgToTypedConst">True</Compiler> + <Compiler Name="CaseLabelRange">True</Compiler> + <Compiler Name="ForVariable">True</Compiler> + <Compiler Name="ConstructingAbstract">True</Compiler> + <Compiler Name="ComparisonFalse">True</Compiler> + <Compiler Name="ComparisonTrue">True</Compiler> + <Compiler Name="ComparingSignedUnsigned">True</Compiler> + <Compiler Name="CombiningSignedUnsigned">True</Compiler> + <Compiler Name="UnsupportedConstruct">True</Compiler> + <Compiler Name="FileOpen">True</Compiler> + <Compiler Name="FileOpenUnitSrc">True</Compiler> + <Compiler Name="BadGlobalSymbol">True</Compiler> + <Compiler Name="DuplicateConstructorDestructor">True</Compiler> + <Compiler Name="InvalidDirective">True</Compiler> + <Compiler Name="PackageNoLink">True</Compiler> + <Compiler Name="PackageThreadVar">True</Compiler> + <Compiler Name="ImplicitImport">True</Compiler> + <Compiler Name="HPPEMITIgnored">True</Compiler> + <Compiler Name="NoRetVal">True</Compiler> + <Compiler Name="UseBeforeDef">True</Compiler> + <Compiler Name="ForLoopVarUndef">True</Compiler> + <Compiler Name="UnitNameMismatch">True</Compiler> + <Compiler Name="NoCFGFileFound">True</Compiler> + <Compiler Name="ImplicitVariants">True</Compiler> + <Compiler Name="UnicodeToLocale">True</Compiler> + <Compiler Name="LocaleToUnicode">True</Compiler> + <Compiler Name="ImagebaseMultiple">True</Compiler> + <Compiler Name="SuspiciousTypecast">True</Compiler> + <Compiler Name="PrivatePropAccessor">True</Compiler> + <Compiler Name="UnsafeType">False</Compiler> + <Compiler Name="UnsafeCode">False</Compiler> + <Compiler Name="UnsafeCast">False</Compiler> + <Compiler Name="OptionTruncated">True</Compiler> + <Compiler Name="WideCharReduced">True</Compiler> + <Compiler Name="DuplicatesIgnored">True</Compiler> + <Compiler Name="UnitInitSeq">True</Compiler> + <Compiler Name="LocalPInvoke">True</Compiler> + <Compiler Name="MessageDirective">True</Compiler> + <Compiler Name="CodePage"></Compiler> + </Compiler> + <Linker> + <Linker Name="MapFile">0</Linker> + <Linker Name="OutputObjs">0</Linker> + <Linker Name="GenerateHpps">False</Linker> + <Linker Name="ConsoleApp">1</Linker> + <Linker Name="DebugInfo">False</Linker> + <Linker Name="RemoteSymbols">False</Linker> + <Linker Name="GenerateDRC">False</Linker> + <Linker Name="MinStackSize">16384</Linker> + <Linker Name="MaxStackSize">1048576</Linker> + <Linker Name="ImageBase">4194304</Linker> + <Linker Name="ExeDescription"></Linker> + </Linker> + <Directories> + <Directories Name="OutputDir"></Directories> + <Directories Name="UnitOutputDir"></Directories> + <Directories Name="PackageDLLOutputDir"></Directories> + <Directories Name="PackageDCPOutputDir"></Directories> + <Directories Name="SearchPath"></Directories> + <Directories Name="Packages">Vcl40;Vclx40;VclSmp40;Qrpt40;Vcldb40;TeeUI40;teedb40;tee40;vcldbx40;ibevnt40;nmfast40</Directories> + <Directories Name="Conditionals"></Directories> + <Directories Name="DebugSourceDirs"></Directories> + <Directories Name="UsePackages">False</Directories> + </Directories> + <Parameters> + <Parameters Name="RunParams">300 50 1 </Parameters> + <Parameters Name="HostApplication"></Parameters> + <Parameters Name="Launcher"></Parameters> + <Parameters Name="UseLauncher">False</Parameters> + <Parameters Name="DebugCWD"></Parameters> + <Parameters Name="Debug Symbols Search Path"></Parameters> + <Parameters Name="LoadAllSymbols">True</Parameters> + <Parameters Name="LoadUnspecifiedSymbols">False</Parameters> + </Parameters> + <Language> + <Language Name="ActiveLang"></Language> + <Language Name="ProjectLang">{viewgit}{/viewgit}000000</Language> + <Language Name="RootDir"></Language> + </Language> + <VersionInfo> + <VersionInfo Name="IncludeVerInfo">True</VersionInfo> + <VersionInfo Name="AutoIncBuild">False</VersionInfo> + <VersionInfo Name="MajorVer">1</VersionInfo> + <VersionInfo Name="MinorVer">1</VersionInfo> + <VersionInfo Name="Release">0</VersionInfo> + <VersionInfo Name="Build">0</VersionInfo> + <VersionInfo Name="Debug">False</VersionInfo> + <VersionInfo Name="PreRelease">False</VersionInfo> + <VersionInfo Name="Special">False</VersionInfo> + <VersionInfo Name="Private">False</VersionInfo> + <VersionInfo Name="DLL">False</VersionInfo> + <VersionInfo Name="Locale">2057</VersionInfo> + <VersionInfo Name="CodePage">1252</VersionInfo> + </VersionInfo> + <VersionInfoKeys> + <VersionInfoKeys Name="CompanyName">LibrarySmith Software</VersionInfoKeys> + <VersionInfoKeys Name="FileDescription">On Screen Keyboard</VersionInfoKeys> + <VersionInfoKeys Name="FileVersion">1.1.0.0</VersionInfoKeys> + <VersionInfoKeys Name="InternalName">emposk.exe</VersionInfoKeys> + <VersionInfoKeys Name="LegalCopyright">(C) 2004 Libarysmith Software</VersionInfoKeys> + <VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys> + <VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys> + <VersionInfoKeys Name="ProductName"></VersionInfoKeys> + <VersionInfoKeys Name="ProductVersion">1.1</VersionInfoKeys> + <VersionInfoKeys Name="Comments"></VersionInfoKeys> + </VersionInfoKeys> + </Delphi.Personality> +</BorlandProject> diff --git a/On Screen Keyboard/emposk.bdsproj.local b/On Screen Keyboard/emposk.bdsproj.local new file mode 100644 index 0000000..b3811b7 --- /dev/null +++ b/On Screen Keyboard/emposk.bdsproj.local @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8"?> +<BorlandProject/> diff --git a/On Screen Keyboard/emposk.cfg b/On Screen Keyboard/emposk.cfg new file mode 100644 index 0000000..7a8dc7c --- /dev/null +++ b/On Screen Keyboard/emposk.cfg @@ -0,0 +1,36 @@ +-$A1 +-$B- +-$C+ +-$D+ +-$E- +-$F- +-$G+ +-$H+ +-$I+ +-$J+ +-$K- +-$L+ +-$M- +-$N+ +-$O+ +-$P+ +-$Q+ +-$R- +-$S- +-$T- +-$U- +-$V+ +-$W- +-$X+ +-$Y+ +-$Z1 +-cg +-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +-H+ +-W+ +-M +-$M16384,1048576 +-K{viewgit}{/viewgit}400000 +-w-UNSAFE_TYPE +-w-UNSAFE_CODE +-w-UNSAFE_CAST diff --git a/On Screen Keyboard/emposk.dof b/On Screen Keyboard/emposk.dof new file mode 100644 index 0000000..7906759 --- /dev/null +++ b/On Screen Keyboard/emposk.dof @@ -0,0 +1,84 @@ +[Compiler] +A=1 +B=0 +C=1 +D=1 +E=0 +F=0 +G=1 +H=1 +I=1 +J=1 +K=0 +L=1 +M=0 +N=1 +O=1 +P=1 +Q=1 +R=0 +S=0 +T=0 +U=0 +V=1 +W=0 +X=1 +Y=2 +Z=1 +ShowHints=1 +ShowWarnings=1 +UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +[Linker] +MapFile=0 +OutputObjs=0 +ConsoleApp=1 +DebugInfo=0 +RemoteSymbols=0 +MinStackSize=16384 +MaxStackSize=1048576 +ImageBase=4194304 +ExeDescription= +[Directories] +OutputDir= +UnitOutputDir= +PackageDLLOutputDir= +PackageDCPOutputDir= +SearchPath= +Packages=Vcl40;Vclx40;VclSmp40;Qrpt40;Vcldb40;TeeUI40;teedb40;tee40;vcldbx40;ibevnt40;nmfast40 +Conditionals= +DebugSourceDirs= +UsePackages=0 +[Parameters] +RunParams=300 50 1 +HostApplication= +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=1 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=2057 +CodePage=1252 +[Version Info Keys] +CompanyName=LibrarySmith Software +FileDescription=On Screen Keyboard +FileVersion=1.1.0.0 +InternalName=emposk.exe +LegalCopyright=(C) 2004 Libarysmith Software +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.1 +Comments= +[HistoryLists\hlUnitAliases] +Count=1 +Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +[HistoryLists\hlRunParameters] +Count=1 +Item0=300 50 1 diff --git a/On Screen Keyboard/emposk.dpr b/On Screen Keyboard/emposk.dpr new file mode 100644 index 0000000..54df333 --- /dev/null +++ b/On Screen Keyboard/emposk.dpr @@ -0,0 +1,25 @@ +program emposk; + +{%File 'emposk.bdsproj'} + +uses + Forms, + mainform in 'mainform.pas' {main}, + windows; + +{$R *.RES} + +var + Mutex : THandle; +begin + Mutex:=CreateMutex(nil,True,'EmpOskOnScreenKeyboard'); + if (Mutex=0) or (GetLastError = Error_Already_Exists) then begin + end else + begin + Application.Initialize; + Application.CreateForm(Tmain, main); + Application.Run; + if Mutex<>0 then + CloseHandle(Mutex); +end; +end. diff --git a/On Screen Keyboard/emposk.identcache b/On Screen Keyboard/emposk.identcache new file mode 100644 index 0000000..38a0c55 Binary files /dev/null and b/On Screen Keyboard/emposk.identcache differ diff --git a/On Screen Keyboard/emposk.res b/On Screen Keyboard/emposk.res new file mode 100644 index 0000000..217d636 Binary files /dev/null and b/On Screen Keyboard/emposk.res differ diff --git a/On Screen Keyboard/emposkgraphics.RES b/On Screen Keyboard/emposkgraphics.RES new file mode 100644 index 0000000..3c13d2b Binary files /dev/null and b/On Screen Keyboard/emposkgraphics.RES differ diff --git a/On Screen Keyboard/emposkgraphics.rc b/On Screen Keyboard/emposkgraphics.rc new file mode 100644 index 0000000..7047c90 --- /dev/null +++ b/On Screen Keyboard/emposkgraphics.rc @@ -0,0 +1,11 @@ +KU BITMAP graphics\jukeboxbuttonup.bmp +KD BITMAP graphics\jukeboxbuttondown.bmp +E2U BITMAP graphics\enterlargeup.bmp +E2D BITMAP graphics\enterlargedown.bmp +SPACEUP BITMAP graphics\spaceup.bmp +SPACEDOWN BITMAP graphics\spacedown.bmp +BLANK BITMAP graphics\blank.bmp +LAYOUT RCDATA layout.csv +ALPHA RCDATA alpha.csv +OUTLINE RCDATA outline.csv +ALPHAOUTLINE RCDATA alphaoutline.csv diff --git a/On Screen Keyboard/graphics/STAINLESS%20STEEL.jpg b/On Screen Keyboard/graphics/STAINLESS%20STEEL.jpg new file mode 100644 index 0000000..4357afc Binary files /dev/null and b/On Screen Keyboard/graphics/STAINLESS%20STEEL.jpg differ diff --git a/On Screen Keyboard/graphics/Thumbs.db b/On Screen Keyboard/graphics/Thumbs.db new file mode 100644 index 0000000..ebeb2ba Binary files /dev/null and b/On Screen Keyboard/graphics/Thumbs.db differ diff --git a/On Screen Keyboard/graphics/blank.bmp b/On Screen Keyboard/graphics/blank.bmp new file mode 100644 index 0000000..2b5d554 Binary files /dev/null and b/On Screen Keyboard/graphics/blank.bmp differ diff --git a/On Screen Keyboard/graphics/enterlargedown.bmp b/On Screen Keyboard/graphics/enterlargedown.bmp new file mode 100644 index 0000000..c3c8dcb Binary files /dev/null and b/On Screen Keyboard/graphics/enterlargedown.bmp differ diff --git a/On Screen Keyboard/graphics/enterlargeup.bmp b/On Screen Keyboard/graphics/enterlargeup.bmp new file mode 100644 index 0000000..3f61baf Binary files /dev/null and b/On Screen Keyboard/graphics/enterlargeup.bmp differ diff --git a/On Screen Keyboard/graphics/jukeboxbuttondown.bmp b/On Screen Keyboard/graphics/jukeboxbuttondown.bmp new file mode 100644 index 0000000..ee87bd3 Binary files /dev/null and b/On Screen Keyboard/graphics/jukeboxbuttondown.bmp differ diff --git a/On Screen Keyboard/graphics/jukeboxbuttonup.bmp b/On Screen Keyboard/graphics/jukeboxbuttonup.bmp new file mode 100644 index 0000000..e53d083 Binary files /dev/null and b/On Screen Keyboard/graphics/jukeboxbuttonup.bmp differ diff --git a/On Screen Keyboard/graphics/keys.cdr b/On Screen Keyboard/graphics/keys.cdr new file mode 100644 index 0000000..5302c0c Binary files /dev/null and b/On Screen Keyboard/graphics/keys.cdr differ diff --git a/On Screen Keyboard/graphics/spacedown.bmp b/On Screen Keyboard/graphics/spacedown.bmp new file mode 100644 index 0000000..81578bf Binary files /dev/null and b/On Screen Keyboard/graphics/spacedown.bmp differ diff --git a/On Screen Keyboard/graphics/spaceup.bmp b/On Screen Keyboard/graphics/spaceup.bmp new file mode 100644 index 0000000..584880e Binary files /dev/null and b/On Screen Keyboard/graphics/spaceup.bmp differ diff --git a/On Screen Keyboard/graphics/stainless.jpg b/On Screen Keyboard/graphics/stainless.jpg new file mode 100644 index 0000000..c4cffed Binary files /dev/null and b/On Screen Keyboard/graphics/stainless.jpg differ diff --git a/On Screen Keyboard/keyboard layout.xls b/On Screen Keyboard/keyboard layout.xls new file mode 100644 index 0000000..363507d Binary files /dev/null and b/On Screen Keyboard/keyboard layout.xls differ diff --git a/On Screen Keyboard/layout.csv b/On Screen Keyboard/layout.csv new file mode 100644 index 0000000..479bfc4 --- /dev/null +++ b/On Screen Keyboard/layout.csv @@ -0,0 +1,63 @@ +NULL,0,1,1, +1,!,1,1, +2,QUOTE,1,1, +3,,1,1, +4,$,1,1, +5,%,1,1, +6,^,1,1, +7,&,1,1, +8,*,1,1, +9,(,1,1, +0,),1,1, +-,_,1,1, +=,+,1,1, +Backspace,Backspace,2.5,1,backspace +NULL,0,0.5,1, +ROW,0,0,0, +Tab,Tab,1.75,1, +q,Q,1,1, +w,W,1,1, +e,E,1,1, +r,R,1,1, +t,T,1,1, +y,Y,1,1, +u,U,1,1, +i,I,1,1, +o,O,1,1, +p,P,1,1, +[,{,1,1, +],},1,1, +|1,|1,0.25,1,ent1 +|2,|2,2,2,ent2 +ROW,0,0,0, +Caps Lock,Caps Lock,2,1 +a,A,1,1 +s,S,1,1 +d,D,1,1 +f,F,1,1 +g,G,1,1 +h,H,1,1 +j,J,1,1 +k,K,1,1 +l,L,1,1 +;,:,1,1 +APOST,@,1,1 +#,~,1,1 +ROW,0,0,0 +SHIFTL,SHIFTL,1.5,1 +\,|,1,1 +z,Z,1,1 +x,X,1,1 +c,C,1,1 +v,V,1,1 +b,B,1,1 +n,N,1,1 +m,M,1,1 +COMMA,<,1,1 +.,>,1,1 +/,?,1,1 +SHIFTR,SHIFTR,3.5,1 +ROW,0,0,0 +NULL,0,4,1 +SPACE,SPACE,8,1 +NULL,0,4,1 diff --git a/On Screen Keyboard/main.ico b/On Screen Keyboard/main.ico new file mode 100644 index 0000000..a350a1d Binary files /dev/null and b/On Screen Keyboard/main.ico differ diff --git a/On Screen Keyboard/mainform.dfm b/On Screen Keyboard/mainform.dfm new file mode 100644 index 0000000..a51e1af Binary files /dev/null and b/On Screen Keyboard/mainform.dfm differ diff --git a/On Screen Keyboard/mainform.pas b/On Screen Keyboard/mainform.pas new file mode 100644 index 0000000..7e193dc --- /dev/null +++ b/On Screen Keyboard/mainform.pas @@ -0,0 +1,599 @@ +unit mainform; + + +{NOTE DEVELOP VARIABLE FOR WORKING OUT OUTLINES} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ExtCtrls, ImgList, StdCtrls; + +type + Tmain = class(TForm) + focustimer: TTimer; + procedure FormCreate(Sender: TObject); + procedure cvMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure cvMouseUp(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + procedure cvMouseMove(Sender: TObject; Shift: TShiftState; X, + Y: Integer); + procedure FormDestroy(Sender: TObject); + procedure focustimerTimer(Sender: TObject); + procedure FormActivate(Sender: TObject); + procedure FormPaint(Sender: TObject); + private + { Private declarations } + function AppHook(var message : Tmessage) : boolean; + procedure WMMouseActivate(var Message: TWMMouseActivate); message WM_MOUSEACTIVATE; + + + public + { Public declarations } + protected + + end; + +type tkey = record + lowercase : string; + uppercase : string; + height : integer; + width : single; + picture : string; + key : string; +end; + + +type trows = record + key : array of tkey; + count : integer; +end; + + +type tscangrid = record + tr : trect; + keyref : pointer; +end; + +var + main: Tmain; + rows : array [1..6] of trows; + scangrid : array of tscangrid; + scangridcount : integer =0; + keyheight : integer; + keywidth : integer; + bu,bd,e1,e2,s1,s2,blank : tbitmap; + engageuptracker : integer; + ent1,ent2 : tscangrid; + shift1,shift2 : tscangrid; + caps1 : tscangrid; + curcase : boolean; + shiftkey : boolean; + capskey : boolean; + window : hwnd; + mshand : thandle; + dosmode : boolean = false; + + function drawkey(x,y : integer;pos : byte) : tkey; + procedure sendkey(key : string); + + + const + WS_EX_NOACTIVATE = 00000; + DEVELOP = FALSE; +implementation + +{$R *.DFM} +{$R emposkgraphics.res} + + +procedure setoutline; +var +rs : tresourcestream; +sngs : tstringlist; +n : integer; +ori : string; +key : integer; +pt : array[0..50] of tagPoint; +rgn : hrgn; +begin + if paramstr(4)<>'d' then if paramstr(4)='' then rs:=tresourcestream.Create(HInstance,'OUTLINE',RT_RCDATA) + else rs:=tresourcestream.Create(HInstance,'ALPHAOUTLINE',RT_RCDATA) else + begin + rs:=tresourcestream.Create(HInstance,'OUTLINE',RT_RCDATA); + dosmode:=true; + end; + sngs:=tstringlist.create; + sngs.LoadFromStream(rs); + + n:=0; + while (n<sngs.Count) do begin + ori:=copy(sngs.Strings[n],1,2); + key:=strtoint(copy(sngs.Strings[n],3,2)); + + + if ori='TL' then begin + pt[n].x:=scangrid[key].tr.left; + pt[n].y:=scangrid[key].tr.top; + end; + + + if ori='TR' then begin + pt[n].x:=scangrid[key].tr.right; + pt[n].y:=scangrid[key].tr.top; + end; + + if ori='BR' then begin + pt[n].x:=scangrid[key].tr.right; + pt[n].y:=scangrid[key].tr.bottom; + end; + + if ori='BL' then begin + pt[n].x:=scangrid[key].tr.left; + pt[n].y:=scangrid[key].tr.bottom; + end; + + inc(n); + + end; + + + + rgn:=CreatePolygonRgn(pt,n,WINDING); + setwindowrgn(main.handle,rgn,true); + + rs.free; + sngs.free; + +end; + +procedure initmailslot; +begin +//MAILSLOT_WAIT_FOREVER +mshand:=createmailslot('\.\mailslot\LSOSK1',0, 200000,nil); +if mshand=INVALID_HANDLE_VALUE then halt; + +end; + +function readmailslot : string; +var +messz : cardinal; +mescnt,rd : dword; +res : array [0..255] of char; +readtimeout : dword; +begin +readtimeout:=2000; +messz:=0; +getmailslotinfo(mshand,nil,messz,@mescnt,nil); +sleep(10); +result:=''; +if (messz<>0) and (mescnt<>0) then begin +readfile(mshand,res,messz,rd,nil); +result:=res; +end; +end; + + +procedure Tmain.WMMouseActivate(var Message: TWMMouseActivate); +begin + + Message.result := MA_NOACTIVATE; + if window<>0 then setforegroundwindow(window); + + +end; + + + +function tmain.AppHook(var message : Tmessage) : boolean; +begin +if (message.Msg=WM_QUIT) or (message.Msg=WM_CLOSE) then begin +halt; +end; + + +result:=false; +end; + +procedure drawlabel(scan : tscangrid;size : integer); +var +x,y : integer; +s : string; +begin + with main do begin + canvas.Brush.Style:=bsClear; + canvas.font.color:=clwhite; + if size=1 then canvas.font.size:=12; + if size=2 then canvas.font.size:=10; + s:=tkey(scan.keyref^).lowercase; + if capskey=true then begin + if (ord(s[1])>96) and (ord(s[1])<123) then s:=tkey(scan.keyref^).uppercase; + end; + if (shiftkey=true) then s:=tkey(scan.keyref^).uppercase; + if tkey(scan.keyref^).lowercase[1]='|' then s:='Enter'; + x:=scan.tr.left+ ((scan.tr.right-scan.tr.left) div 2) - ((canvas.textwidth(s) div 2)); + y:=scan.tr.Top + ((scan.tr.bottom-scan.tr.top) div 2) - ((canvas.textheight(s) div 2)); + {relabel shift key} + if tkey(scan.keyref^).lowercase[2]='H' then s:='SHIFT'; + if tkey(scan.keyref^).lowercase[2]='P' then s:=' '; + if tkey(scan.keyref^).lowercase='NULL' then s:=''; + canvas.textout(x,y,s); + tkey(scan.keyref^).key:=s; + end; +end; + +procedure drawkeys; +var +x,lastx,xx,y,lasty : integer; +tr : trect; +begin + + +scangridcount:=0; +setlength(scangrid,0); + + + with main do begin + for y:=1 to 5 do begin + lastx:=0; + x:=0; + lasty:=(y*keyheight)-keyheight; + for xx:=1 to rows[y].count do begin + + x:=x+round(keywidth*rows[y].key[xx].width); + if rows[y].key[xx].lowercase<>'NUL' then begin + //canvas.rectangle(lastx,lasty,x,lasty+(keyheight*rows[y].key[xx].height)); + tr.left:=lastx; + tr.top:=lasty; + tr.right:=x; + tr.bottom:=lasty+(keyheight*rows[y].key[xx].height); + inc(scangridcount); + setlength(scangrid,scangridcount+1); + scangrid[scangridcount].tr:=tr; + scangrid[scangridcount].keyref:=@rows[y].key[xx]; + //canvas.stretchdraw(tr,bu); + if rows[y].key[xx].lowercase='|1' then ent1:=scangrid[scangridcount]; + if rows[y].key[xx].lowercase='|2' then ent2:=scangrid[scangridcount]; + + if rows[y].key[xx].lowercase='SHIFTL' then shift1:=scangrid[scangridcount]; + if rows[y].key[xx].lowercase='SHIFTR' then begin; + shift2:=scangrid[scangridcount]; + end; + if rows[y].key[xx].lowercase='Caps Lock' then caps1:=scangrid[scangridcount]; + + + //if (rows[y].key[xx].lowercase[1]<>'|') then drawlabel(scangrid[scangridcount],1); + + + end; + lastx:=x; + end; + end; + end; + +for x := 0 to scangridcount do begin +drawkey(scangrid[x].tr.Left+1,scangrid[x].tr.top+1,1); +end; + +end; + +procedure getkeyinfo; +var +k : tkey; +ln : string; +rowcount : integer; +n : integer; +sngs : tstringlist; +rs : tresourcestream; +x : integer; + + function getparam : string; + var + p : integer; + begin + p:=pos(',',ln); + if p<>0 then begin + result:=copy(ln,1,p-1); + ln:=copy(ln,p+1,length(ln)-p); + end else begin + result:=ln; + ln:=''; + end; + + end; + + function getline : tkey; + begin + result.lowercase:=getparam; + if result.lowercase='COMMA' then result.lowercase:=','; + if result.lowercase='APOST' then result.lowercase:=''''; + result.uppercase:=getparam; + if result.uppercase='QUOTE' then result.uppercase:='"'; + result.width:=strtofloat(getparam); + result.height:=strtoint(getparam); + result.picture:=getparam; + end; + +begin + window:=getforegroundwindow; + if paramstr(4)='' then rs:=tresourcestream.Create(HInstance,'LAYOUT',RT_RCDATA) else rs:=tresourcestream.Create(HInstance,'ALPHA',RT_RCDATA); + sngs:=tstringlist.create; + sngs.LoadFromStream(rs); + + rowcount:=1; + x:=0; + while (x<sngs.Count) do begin + ln:=sngs.Strings[x]; + inc(x); + k:=getline; + + inc(rows[rowcount].count); + setlength(rows[rowcount].key,rows[rowcount].count+1); + rows[rowcount].key[rows[rowcount].count]:=k; + + if k.lowercase='ROW' then begin + dec(rows[rowcount].count); + setlength(rows[rowcount].key,rows[rowcount].count+1); + inc(rowcount); + end; + + end; + + for n:=0 to (rows[1].count) do begin + keywidth:=round(keywidth+rows[1].key[n].width); + end; + keywidth:=round(main.width / keywidth); + keyheight:=main.height div 5; + +end; + +procedure Tmain.FormCreate(Sender: TObject); +var +a,scrap : integer; +begin +initmailslot; + + +application.HookMainWindow(AppHook); +bu := tbitmap.create; +bu.LoadFromResourceName(HInstance,'KU'); +bd := tbitmap.create; +bd.LoadFromResourceName(HInstance,'KD'); +e1 := tbitmap.create; +e1.LoadFromResourceName(HInstance,'E2U'); +e2 := tbitmap.create; +e2.LoadFromResourceName(HInstance,'E2D'); +s1 := tbitmap.create; +s1.LoadFromResourceName(HInstance,'SPACEUP'); +s2 := tbitmap.create; +s2.LoadFromResourceName(HInstance,'SPACEDOWN'); +blank := tbitmap.create; +blank.LoadFromResourceName(HInstance,'BLANK'); + +val(paramstr(1),a,scrap); +if a=0 then a:=screen.Height div 2; + +Main.height:=a; +top:=screen.height-main.height; +main.left:=0; +val(paramstr(2),a,scrap); +if a=0 then main.width:=screen.width else main.width:=screen.width-a; +main.left:=(screen.width div 2)-(main.width div 2); + +val(paramstr(3),a,scrap); +if a<>0 then main.top:=main.top-a; + + +getkeyinfo; +main.doublebuffered:=true; + + +end; + +function iskey (key : tscangrid;x,y : integer) : boolean; +begin +result:=false; +if (x>=key.tr.left) and + (x<=key.tr.right) and + (y>=key.tr.top) and + (y<=key.tr.bottom) then begin + result:=true; + end; +end; + +function drawkey(x,y : integer;pos : byte) : tkey; +var +n : integer; +keymap : tbitmap; +p:boolean; +begin +keymap:=tbitmap.create; + +for n:=1 to scangridcount do begin +if iskey(scangrid[n],x,y) then begin + if pos=0 then begin + keymap.assign(bd); + if (tkey(scangrid[n].keyref^).lowercase[1]='|') then begin + main.canvas.stretchdraw(ent1.tr,e2); + main.canvas.stretchdraw(ent2.tr,e2); + if (tkey(scangrid[n].keyref^).lowercase[2]='2') then drawlabel(ent2,1); + engageuptracker:=n; + break; + end; + if (tkey(scangrid[n].keyref^).lowercase='NULL') then keymap.assign(BLANK); + if (tkey(scangrid[n].keyref^).lowercase='SPACE') then begin + keymap.assign(s2); + end; + if (tkey(scangrid[n].keyref^).lowercase='SHIFTL') or (tkey(scangrid[n].keyref^).lowercase='SPACER') then begin + if shiftkey=true then keymap.assign(s1) else keymap.assign(s2); + end; + if (tkey(scangrid[n].keyref^).lowercase='Backspace') then keymap.assign(s2); + if (tkey(scangrid[n].keyref^).lowercase='Caps Lock') then begin + if capskey=true then keymap.assign(s1) else keymap.assign(s2); + end; + main.canvas.stretchdraw(scangrid[n].tr,keymap); + drawlabel(scangrid[n],2); + engageuptracker:=n; + end; + + if pos=1 then begin + keymap.assign(bu); + if (tkey(scangrid[n].keyref^).lowercase[1]='|') then begin + main.canvas.stretchdraw(ent1.tr,e1); + main.canvas.stretchdraw(ent2.tr,e1); + if (tkey(scangrid[n].keyref^).lowercase[2]='2') then drawlabel(ent2,1); + engageuptracker:=n; + break; + end; + if (tkey(scangrid[n].keyref^).lowercase='NULL') then keymap.assign(BLANK); + if (tkey(scangrid[n].keyref^).lowercase='SPACE') then keymap.assign(s1); + if (tkey(scangrid[n].keyref^).lowercase='SHIFTL') or (tkey(scangrid[n].keyref^).lowercase='SHIFTR')then begin + if shiftkey=true then keymap.assign(s2) else keymap.assign(s1); + end; + if (tkey(scangrid[n].keyref^).lowercase='Backspace') then keymap.assign(s1); + if (tkey(scangrid[n].keyref^).lowercase='Caps Lock') then begin + if capskey=true then keymap.assign(s2) else keymap.assign(s1); + end; + if (tkey(scangrid[n].keyref^).lowercase<>'NULL') then main.canvas.stretchdraw(scangrid[n].tr,keymap); + drawlabel(scangrid[n],1); + engageuptracker:=-1; + end; + + break; + end; +end; +keymap.free; +result:=tkey(scangrid[n].keyref^); +end; + +procedure Tmain.cvMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +Var +k : tkey; +n : integer; +begin + +if DEVELOP=true then begin + +for n:=0 to scangridcount do begin +if iskey(scangrid[n],x,y) then + begin + messagedlg('Key no: '+inttostr(n)+' - '+inttostr(scangrid[n].tr.Top)+':'+inttostr(scangrid[n].tr.Left)+':'+inttostr(scangrid[n].tr.Right)+':'+inttostr(scangrid[n].tr.Bottom)+':' ,mtconfirmation,[mbOk],0); + break; + end; +end; + +end; + +if iskey(shift1,x,y) or iskey(shift2,x,y) then begin + if shiftkey=true then shiftkey:=false else shiftkey:=true; + curcase:=shiftkey; + drawkeys; + exit; +end; +if iskey(caps1,x,y) then begin + if capskey=true then capskey:=false else capskey:=true; + keybd_event(VK_CAPITAL,0,0,0); + keybd_event(VK_CAPITAL,0,KEYEVENTF_KEYUP,0); + curcase:=capskey; + shiftkey:=false; + drawkeys; + exit; +end; +k:=drawkey(x,y,0); + + + +sendkey(k.key); +if shiftkey=true then begin;curcase:=false;shiftkey:=false;drawkeys;end; + +end; + +procedure Tmain.FormClose(Sender: TObject; var Action: TCloseAction); +begin +bu.free; +end; + +procedure Tmain.cvMouseUp(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +var +k : tkey; +begin + +drawkey(x,y,1); + +end; + +procedure Tmain.cvMouseMove(Sender: TObject; Shift: TShiftState; X, + Y: Integer); +begin +if engageuptracker<>-1 then begin + if (x<=scangrid[engageuptracker].tr.left) or + (x>=scangrid[engageuptracker].tr.right) or + (y<=scangrid[engageuptracker].tr.top) or + (y>=scangrid[engageuptracker].tr.bottom) then begin + drawkeys; + engageuptracker:=-1; + end; +end; +end; + +procedure Tmain.FormDestroy(Sender: TObject); +begin +Application.UnHookMainWindow(AppHook); +end; + + + +procedure sendkey(key : string); +var +c : shortint; +begin +if length(key)=1 then c:=vkkeyscan(key[1]) else begin +if uppercase(key)='SPACE' then c:=vkkeyscan(key[1]); +if uppercase(key)='ENTER' then c:=vk_Return; +if uppercase(key)='TAB' then c:=vk_Tab; +if uppercase(key)='BACKSPACE' then c:=vk_back; +end; + + +if shiftkey=true then keybd_event(VK_SHIFT,0,0,0); +keybd_event(c,0,0,0); +keybd_event(c,0,KEYEVENTF_KEYUP,0); +if shiftkey=true then keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0); + + + +end; + +procedure Tmain.focustimerTimer(Sender: TObject); +var +w : hwnd; +begin +w:=getforegroundwindow; +if (w<>application.Handle) and (w<>main.handle) then window:=w; + +end; + +procedure Tmain.FormActivate(Sender: TObject); +begin +setforegroundwindow(window); +drawkeys; +setoutline; +while(readmailslot='') do begin +application.ProcessMessages; +end; +application.terminate; + + + +end; + +procedure Tmain.FormPaint(Sender: TObject); +begin +drawkeys; +end; + +end. diff --git a/On Screen Keyboard/makeres.bat b/On Screen Keyboard/makeres.bat new file mode 100644 index 0000000..22e4fd2 --- /dev/null +++ b/On Screen Keyboard/makeres.bat @@ -0,0 +1,2 @@ +brcc32 emposkgraphics.rc +pause diff --git a/On Screen Keyboard/outline.csv b/On Screen Keyboard/outline.csv new file mode 100644 index 0000000..80369f0 --- /dev/null +++ b/On Screen Keyboard/outline.csv @@ -0,0 +1,12 @@ +TL16 +BL02 +TL02 +TR14 +BR14 +TR30 +BR56 +TR58 +BR58 +BL58 +TL58 +BL44