From 37f146767708f5f416581df3e0b389710a82aded Mon Sep 17 00:00:00 2001 From: Juliette ELSASS Date: Tue, 28 May 2024 16:07:24 +0200 Subject: [PATCH 1/6] restoring version check, moving GetValue/SetValue to previous position --- bgraknob.pas | 128 +++++++++++++++++++++++++-------------------------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/bgraknob.pas b/bgraknob.pas index 5a32406..26c4b45 100644 --- a/bgraknob.pas +++ b/bgraknob.pas @@ -159,14 +159,14 @@ implementation uses Math; - {$IFDEF FPC} +{$IFDEF FPC} procedure Register; begin RegisterComponents('BGRA Controls', [TBGRAKnob]); end; - {$ENDIF} +{$ENDIF} - { TBGRAKnob } +{ TBGRAKnob } // Override the base class which has a rectangular dimension, odd for a knob class function TBGRAKnob.GetControlClassDefaultSize: TSize; @@ -219,7 +219,7 @@ procedure TBGRAKnob.CreateKnobBmp; v.y := v.y / (ty / 2 + 1); //compute squared distance with scalar product - d2 := v {$if FPC_FULLVERSION < 030301} * {$ELSE} ** {$ENDIF} v; + d2 := v {$if FPC_FULLVERSION < 30203}*{$ELSE}**{$ENDIF} v; //interpolate as quadratic curve and apply power function if d2 > 1 then @@ -253,6 +253,24 @@ function TBGRAKnob.GetLightIntensity: integer; Result := round(FPhong.LightSourceIntensity); end; +function TBGRAKnob.GetValue: single; +begin + // Maintains the correct value range based on knobtype, result in terms of + // FMinValue and FMaxValue + + Result := RemapRange(AngularPosToDeg(FAngularPos), FStartAngle, + FEndAngle, FMinValue, FMaxValue); + + // Check to Reverse the scale and fix value + + if FReverseScale then + Result := FMaxValue + FMinValue - Result; + + if FKnobType = ktSector then + Result := CalcSectorFromValue(Result); + +end; + function TBGRAKnob.AngularPosToDeg(RadPos: single): single; begin // helper to convert AnglePos in radians to degrees, wraps as needed @@ -336,65 +354,6 @@ function TBGRAKnob.ValueCorrection: boolean; FAngularPos := DegPosToAngular(LValue); // Back to Radians end; -function TBGRAKnob.GetValue: single; -begin - // Maintains the correct value range based on knobtype, result in terms of - // FMinValue and FMaxValue - - Result := RemapRange(AngularPosToDeg(FAngularPos), FStartAngle, - FEndAngle, FMinValue, FMaxValue); - - // Check to Reverse the scale and fix value - - if FReverseScale then - Result := FMaxValue + FMinValue - Result; - - if FKnobType = ktSector then - Result := CalcSectorFromValue(Result); - -end; - -procedure TBGRAKnob.SetValue(AValue: single); -var - NewAngularPos: single; -begin - // AValue in the range of FStartAngle and FEndAngles after the mapping - - if AValue > FMaxValue then - AValue := FMaxValue; - - if AValue < FMinValue then - AValue := FMinValue; - - // Get the value from given sector, - - if FKnobType = ktSector then - AValue := CalcValueFromSector(Round(AValue)); // Round to sector - - AValue := RemapRange(AValue, FMinValue, FMaxValue, FStartAngle, FEndAngle); - - // Reverse the scale if needed - - if FReverseScale then - AValue := FEndAngle + FStartAngle - AValue; - - ValueCorrection(AValue); - - NewAngularPos := 3 * Pi / 2 - AValue * Pi / 180; - - if NewAngularPos > Pi then - NewAngularPos := NewAngularPos - (2 * Pi); - - if NewAngularPos < -Pi then - NewAngularPos := NewAngularPos + (2 * Pi); - - if NewAngularPos <> FAngularPos then - begin - FAngularPos := NewAngularPos; - Invalidate; - end; -end; - function TBGRAKnob.RemapRange(OldValue: single; OldMin, OldMax, NewMin, NewMax: single): single; begin @@ -512,6 +471,47 @@ procedure TBGRAKnob.SetStartFromBottom(const AValue: boolean); Invalidate; end; +procedure TBGRAKnob.SetValue(AValue: single); +var + NewAngularPos: single; +begin + // AValue in the range of FStartAngle and FEndAngles after the mapping + + if AValue > FMaxValue then + AValue := FMaxValue; + + if AValue < FMinValue then + AValue := FMinValue; + + // Get the value from given sector, + + if FKnobType = ktSector then + AValue := CalcValueFromSector(Round(AValue)); // Round to sector + + AValue := RemapRange(AValue, FMinValue, FMaxValue, FStartAngle, FEndAngle); + + // Reverse the scale if needed + + if FReverseScale then + AValue := FEndAngle + FStartAngle - AValue; + + ValueCorrection(AValue); + + NewAngularPos := 3 * Pi / 2 - AValue * Pi / 180; + + if NewAngularPos > Pi then + NewAngularPos := NewAngularPos - (2 * Pi); + + if NewAngularPos < -Pi then + NewAngularPos := NewAngularPos + (2 * Pi); + + if NewAngularPos <> FAngularPos then + begin + FAngularPos := NewAngularPos; + Invalidate; + end; +end; + procedure TBGRAKnob.SetEndAngle(AValue: single); var oldValue: single; @@ -990,4 +990,4 @@ procedure TBGRAKnob.MouseWheelPos(Shift: TShiftState; WheelDelta: integer); FOnKnobValueChange(Self, Value); end; -end. \ No newline at end of file +end. From 46739e894d591e0236dd6ce3385812ae86381125 Mon Sep 17 00:00:00 2001 From: Juliette ELSASS Date: Tue, 28 May 2024 16:16:48 +0200 Subject: [PATCH 2/6] add test program provided by sganz --- test/test_bgraknob/project1.ico | Bin 0 -> 133345 bytes test/test_bgraknob/project1.lpi | 87 ++ test/test_bgraknob/project1.lpr | 24 + test/test_bgraknob/unit1.lfm | 1577 +++++++++++++++++++++++++++++++ test/test_bgraknob/unit1.pas | 502 ++++++++++ 5 files changed, 2190 insertions(+) create mode 100644 test/test_bgraknob/project1.ico create mode 100644 test/test_bgraknob/project1.lpi create mode 100644 test/test_bgraknob/project1.lpr create mode 100644 test/test_bgraknob/unit1.lfm create mode 100644 test/test_bgraknob/unit1.pas diff --git a/test/test_bgraknob/project1.ico b/test/test_bgraknob/project1.ico new file mode 100644 index 0000000000000000000000000000000000000000..10c5fc1a3d8d9ff264229f4ff1cf99ebc83f167f GIT binary patch literal 133345 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
  • )1WiH!>@E#{_pbvA-oJUwG(Lq`!9Ay4sORvCqoCu7-AnYJ#IfD(rgZD@`qt_$^&SPm?J=QLf=vg z67Q$oK0@gG*ACal{wuv$;RMV*Bp}{QcVW9{d9Xcmcx>++FYurmz=^#g;5Z`S$)349 zHrQUB)sd8_)$TaQD(}^okz!GObgTLm5uZ}suMBlmuk!D!f8Ou-d`%qYP6hc;MIKZ` z4kVfv9ZU6uwsvO+lO0iqwZi%UW7w%Do9L*<#eja=imwDQAQ;z7_YbN9-?CO*0=|Dc z`TkL+o#6X>;$B^>KZ&(q#fc8EzdI|N$zx@+yx5-EUhoBc>;V^Q1vpYX(}S65{CK`@ z(xVOA1>V)@Q$%9W^dW}-RrXhH*ZA|i`D=L)y${WMB*hao7-zO;hAn)vDOU?f!TRfg z82>bWu{JviHYW|xAJ755Iwz>EE+!4%|BQ5hBI*7xx@X;(6-`8(Npyn$_h6+nc&wB- zFw=_w|jb%6dliW7uuJT{HeLrm$-wnu?marUskD=V4m$x5bq zp#`WFU>8~r;KeQxc=Yb{OYKn)dLVa_Yen1<#vf`a{%o4)^h>`F{q@T~ud$pAr)~Em zf38W}epXMZmID!2gg7|ggYBCQzdXen`MC-5bOV;?s>aoVV9U3Hb;48!a03*9FKR%n zC)r7{Kg66L`|~5fsc1`9h<@EU$&D3H_GCLJ^H}i|#B@=B55>d@5zHQJ`mfB>hPY`} z#-3_1s9>`DFSpmP;DCHHS!S=N$R_yVp2*qIF}3B)wQ1XGIS_H=AZjoB=XpYhyC5&O zMIFEl_geR2O9yE1_ZWg7@6Oi$U#NqoN2I%r*fBrZFjDK({+M4Zv z{fiRZ+0H~BD*|>VdhszCZ4D^GYi*l1_*ZOU+znb#;A5)CAbMTq3wb3j{9iez>Ypo# zI)u4qTQ=TTmu;BnSgT$UYL{Adt%$a*skX8|ne6Y1n!E$*Gv=ID-z1^|3>2Gf#JQ0M zq;+B4fm+vxd#Sf=O0l2v{$$_oxTgd6qDGj){jXlCRB#1%2rd_^j zBlN>B{~H?fTx=5LLe=viQLQ4>D^)lm)@WdB_nL$V=Chh#iAUyQ(`Hygg;|}UD zGdxk3A^Y3G{)pFDqcz)`zb=e^%Lcz^6akylx?n4yRju~dRoqCN35NF13+;*Zg+?ql z+=}H!ID*{f4tdc$mKXCm^6?sR!%?@x7sm;{|A*d}mXc%%eR|g#e<&V_#-K4S zI{y(4v}q>CwoP>B$D|tapz66YX_ngZWl_FVaHD#iMT9F`TbEzcJtb5l$?3ygN9+W822_ zxR#DT19*`Ov}!E-L-zd=FXWrZvH3%+xY+Yq{GnJR5`Topq*bDLJsH&uzVz8Y^PXJY zI&A4ko6lm9FeX*Wk%c;iS^-b0=gdFEm1&;fo*Ua4@4$A%K(9p@vXw)%EB2YC->1Pf z(maqoKx=|)vA@yNE(9Lm>?Ib5`&;i zNTUdmJJEwJ2(o0cKD}6!S5G!Iz?iMZxDxV&+8^Qy@n{NaGKm8FM_VBN8?v<{baB5p ze?5rcw+G1n4qvptp3(!dKWT?tvVW*4+cwUIZ5ijnwuHL_o&c{B;KCLGI9}j*gpKwu z8*BBXrPv5NZMIF|SGc%Cu}6q6#Goo15$Kil(e}*ONR72`(eS6wQK@A^mO9Gzvm8h? z2Ia%%s+KuVmDY{f7*`#ZALm)Yl`m;qAz!L+g=%uJe_@;>SF0;P%`PWI z5Ay*0HGziw8h~&fxNYs@ANO{`{)w*YuzfGAD>TLUw`E(xTv*OH4}ix<7~1LpFLD6$ zZoek)(^P83mJfHR@GC<9!nHNU9(ql{6KX3sB0R3fm9&xe;FcEC?VA8!K!59R zuFkf`cvQ`Ss>PsicYW5n$+yQr;^h25)LBW_ifG#^K819yh)>}kQ!UOD|Hd6PS_gss zd&746++JLy=Z%z`Z-dRhKK^x;-jV*B?hgBpCHtGPEunTSC)AZ~hW$5_{X@Obehwiw z+BE&SnqPgHI&7q!4$GdHD}Em)@KsP zA1J49*{DA2-K7l+b#$hCg)eI6r2n+LkR3a;)lG1b(GT-1$lj`Zu}qCBL!_`H_aw z&+SD+{YSpzOZ64fx57HycG!LgV#oG4*gr;S|K6zG=;QaOXrBOOCfHN@8}z@@2de+f z@azWtN8{fd{@(%q-<@p^gPp^C!2@5|p5XHt;(0$-^Hplmm?ip{;qxlFBs>=S6|SY2 zLq4c_>=8cyALdG^^RKxliL}DZ05kS2+O}XKY|qu@+~E6#_D9`@vp+xn<9BhlV|)qo ze_9J(WBmuUf2{XbVpBZ?@qe5-+ZN`?*L@MNeRy9S_vPB0@IGh-2tx~uw5@vmRDY?1 zoSnvYO=u!pmjzkru#H?y5%no_{5coC_S$D$5%Qv@_Fv$Nv0A$tud}9W|JrM9n>Aot z#(PxMS-9GYpuQp+fB5w{)a0l>7v;#W*M%Yeqkczwankq~tOFT}?=%Byt^dLP*sq<| z`*%hBpnJq7ffaAjjyUzR%DooyV4*93f_HYY;pPlWB~euaEXj*utR z))IgCF-gdY+S-4QE2dq4O!w8siOvd5YtDZ}>Mi^loCj=#`fQ{FetXUWzP~qHkNkgt zVEpSVHeHSH2mthf#z2kpKd}FC%KxHlQUAf*57|F261}R+9$Ne`+#8oLb87t?jy;k zxj)qY$*<&3=!?4RKwt>VpEy(m^n3`*i{*oOG2P#hrH=3dR|ZvpTCA|{i3ERW|VfOI-74UT?>c3b6G#8&m`vG(T zYFz`4xuT_H|KUa*G5&kOmmrsncE#LYKej!75Zj&*#GxQz7%PYms)j&T5XVP8+Wa_C zp3resuH?lI25*1~gs*dD`3N2xYOT+Dt0}QA&<`rDnljZkEs!%RvOdNdY)U^HmP3Bz zU-T;#TICBdNV(;&-IpTL)sWM|RkW=j2ih#qwOhhGxEkHIFgvbhlZ*Sw=lAWwtpTL< z9L?%W$H49$fHF|)zF_`3ilL+z2led0a>n5ID>3(90Q>KV>xUZm5Vm8|aJD0HL{&_} zbG*J?hy)yiAENjfu4DxJFl)`usKb2yo{>h#C;FLau{EK6|Hu5wa2vf}>H{Wv8h&XG1&a8wLkogSb&bABiWzo#;XGLu=a=S?*jY# zq3#&Sil&SNMzg{y7=`D+WFbbf9g~4XAw>A{om`pX@5E$fzP&b!OW^vxv1~mS?`!jQ zzk=BFt7FjGF+PlHn8I`U*>*-hYuH~{YpJGb1-00mP*1K#yLGG$#=i+?|0rAB3kqLO zdj;bhh5)9(7w-Y|)9%ob^grpw6n`zuBb%}9F|_W_5A#$(Z0EGmta$nuwo`~{IGz^5 zp$Ki!R6=l7ROd+t$pL+VY^qf$l$52NzyP+h&cB6Y*;+ z!W@XpnXA;`P?tk(mgZ=;Vy-qf)EK`RfZSg&_h;Ur71jQ|fp5D14{Jcq1n8--7`v{B z|Hh~(I$+&*A67gq2>0KOVI{M}uzo$F0wuG<@tOd$(9R00Lf0aSihie`uLZd1bw#~}Ut8hp+Uhwo z)#LhMeFo|?;Vzh~w}$PL7uXv)Kp6HHin4|M zeX-se_MaWfb|po!(z)Y-C_a*KECPCe*Bl|hlR4kVmE;k=zs&ZyX4ary-3q_L*DZXV zvS7G3GwI%u(V8;)yXufez0$0ECpLE|=6SzI+X}cc3mmHcncw?-hQC9V`U+_kpM3!EPh1TJb=hbi)cDTA_f)D3}?+6e&6qciGFVDrj6L@s38J<`?3yD*yVOG#k+mrQ2+mP`?}bSywh zBHkBb65Gddgn06Gu1p`+=ezr=df$mYC*PeG4!MbxhpaPe zhoxwjf*(SB16Se)d3|?ZiQ2pRv4yreKmG_}&?t`|^ZnI7cZdV_K_gvTtF{%%fshXw zsD1n1bfi}@!v>(HLbVlsedRO1GL>p@;6-8(){6OK{CmJpTjRbzBiy%5za5L;h|*|# z6X)#;r~op+H$TkG#H0r3D%~d@O>n}VzvHpLP(1DXG8FcYWCxZevO{Sz*uk`!Rk0k; zm*aH-4lJJzeu$!yC&ZWPT!{(z{;`6Ks*y9KBeqNns}h6!ZH;UE+uA;(w%1!B4v!1<6zpXYFw%03Gs!vGIz|NUt%A!Ta>@MAPxy*&m`t)*7KKrer8nA7qqQt z4iwGtBy)Tq)9$SF)q4;YhxD)6uT<1l#&I>c;_1*BlLKLYUsiy1Kl!*%f2s%V|AsaH zI*K2gH>gW{z;^@WfN#=$_`8Zne|;5QVGLN%55M;igZ+P|^kIAEj>7nlgI#B`!z+^5 zkri{T6fFsqovTjQFFR_nKmkw+n7k8@0AiJJgzvT1LNo@8= zzbd|^Y91uae}pYR2ckSEXYyDU>+i<8)==Zp?5J4Pr;u(D^((@<3TkjAGlDVx2V>2* z7uNh@t^@b#4KpI&ufnkJ%SoK0HP8mA1N_h<0JT8k(>QB2E(R1&a>xCtfoy+D6g!+g zogG~@mmSSoAcFZg2383%56APs4IueWmA!}`b)|ob_~xs;Jss__y(?+{G^S%t&KkOE5aCL*yGpLmS&CeuU*?#uAVQ8)K}(DWM$B?R9h=eqVYc*`!V&!{0#2RhVLJ5hnf$@YJVNY zSM_BioncF=_trYsU)|OY!Gf;>pAn*X0P#OE`;Qjs%LZ3Xp|y{My5{jCgj*plf(p~<~4 zKVyxtiM9U7)o85Rs>;(^Ps;fk0X44k!|UJtKrLWq0PH`=pcBg;X^1^$oUnhvKz1Ny zJUhB#ChWb4omjsVNM$EBh=882UseUj*AYjA5akIS^SQEp(X_8>B%FMWe9%(uz>hyQ z#Gw7@Nw^RA=VFWSd)u{Y&S_cBuW-8dE84b74n+CTG^WtJNyRm&wpU<#i5E5G%v@b1 z1+^9U6fUML!1$kodiGR*t}eGd(u~D8;P)Re_WgC0-?o;kM{|Acfu9=t`1jnSPfz7m z;MHsL0TZ2jKnLP?C#Lwaee;9ak@Q4%e9e4za>Fuqa#K1xB?5YWa#I>Rxlt6$@f_H& z{EJ-a*zU*X|3>-XH?oAWN7xGD&ytwnivGrh{nYU=PyFspb!{uigDP^MYTC9sSGp?m z?-gi{`t%0)l8T(U2Cf|7ctIS1rkIbpwVA`Q7n=|Ku`OFO(twN4^jm-qY6^L{wx5ps ze9Kqya>crLsV;}GY>;XJ`Fgv(3iXF?E4SOzSr#Gjw(_1px>6{g40cvyT zIUlDsXR=e9Gel6ym+D;cbNaD5O-5owtue^a_}Aoq(o#|^f8Hcc*Vd?QSJbR+tMCO} zDPB04EeH={r5N|s^Pozu@aroFC_i2X|B!-tmt@SrPQyIJMC`|ex=gGSjeQl?Ur+g; z_D$>YU^Uv~@rN~krPV8s2I_Ta2Osc`)`dmG*X)=8A21d1YC$kNnlYK3Sht9s$;n`6 zwyk1kwq~Iff}V?FB|EcaCHO%Q@T3N=B#a#V-Q%-$^QP>0EitGpZ7%j2|21o}0zDm} zX`ydLbuArN*R~Zo5amLmd5~xh^kuG8_!6qKrDFUqrr19M8q5cN*p{ur{OsVKnCrpV zbXHfOd%S3kN3Hw2Ra*4>j}TktkPa9O9k6^TegiDtnbQG>-~*0lCt>_A=j?wjZ#6rc zw}zeLK*s{)qRq{&1UPcGf+xh6N}ep75c=KrpAh6P@GYPFm2m++-~D;$q0jz}l0s{C zXw^ba<-;iHp&e52aUHtJqY_x&L0IIFo~Vouo(7S z$2AM+ZE#$DBZac5q2JJHC20e0v%@ z51U@tv4LIOv5{RU6o8I7Y~bFb_b+S*KSUwIlO4|ecvyN@3iSmS4Y%j@;(%CMDFV=DA*b-luAT7jMEm>*l9=Hy=uji-pJ$%L&A6OewKx@l} z7^e;M z2UX@kHF4!Qa^~a6r#YXodOkaniF^_D*4=XgF$ar#{ZWIN=-iE4--)sK$xyjD)%pK5 zzh9jU{`xAN@x5%l-cl6;o)BNkw`PB4tF&noYvc;&OUR!HA?j1;7+mS|gZV`Lx^-E`)CqjeQq8Y? zrfav>pl!dGD;tqBbABY1tA`xRLhMgP-Dlot=+e><% za{YhJ?|;St9p%x&I1ulqi8%;+>_OR|9asm<`2#`c&)br=xgRxv{JU&b`+A`KsIPS3buYu}%D%KxdXR&;W738F64R z;=lxG!3FF>K^AP8!>;VkV^{YSuxop^bGVB3>TW_oCCYGIme1h|+W*(ycYsxOWo?^G zCS_7gqA^7y#g2+1RRKX%x(Fx;(m_$|Sg;E!hz+}-Sg{urL1{{pE`k*Wtk{jls7Yof znas@k-?h&@mwPE{%H;dL`E#FVamu}%v-aL=uf6uFOe>Zqb#YX>ojVFzk?5o$t-K0f zsZ2jelY_j8Wr)VcTlL=ikT3SHTBO2L4%V$bGJmPR1}WuQmT#MoZJVGK-Y-{TpDbu1 z2|VCH9BeDlDPnJRGG-+BKJq|>S%Kf8#v}MH?EC-d)AnQD>;Eomeq(gw-&6BL@PO;A zdk8k`L{a z%5e(u9`-_7X^gKlMJp94dui5~AX4Qos$<{${rBi_>~d<9uP9^{mRVHg73JC^mBS84ub_LayN4MebCzemtGowTLdIY^Ez&i5S;Zx>0nTZWd=zZE-e^3|Vzh zl!fn4)PaIdmd}|+p(Fh0e8%Ay(hBpISK=#*^`{&(z6nv)X0TDb-_$yZK5 zc6r$v^a`|c89b>r;KY{TFVcuuZ%@T}%X%5{g z&Bd`k)=!#epd&-h*rQ;ZZ^VK%2M{z+i$(4Ht$=t_?R+x zZEBQOBw3|#c}0>{Ag}yPT45Tw!uuca5MDbj9oq%Izkw=tEylc=ioWwhEeA*15)5B{ zQ;a?O*4seqv8i@T1B}J*D(k;&>=oa?23&nPNZ*-91|h;3I&q#rjk<#y?A@ff){{Au|iQfu+Og)P_lPcJE^Ffvuo{ zBai_=0~G~y4`Y7s{3*H*xOcux0XRRW3Z=Ma8j+z1TB!iN$TT7!RcPf>UIx93eLaw- zcA6SgoN}OXz5-fNU4Qtz!5Z|+w4#t}A=8Te4)(%Vb1?Rq82e=CdBF2adEPGv&&Rxv zAK6Fjrxg3VADz2?=?Q#U*85+x-m49Iy^Hbf+rI_D0 zRUO>~dEgLe-~{G+A>F@#@xO4I9$YM^`xh$!d{n>%9PynJ&f{E3CrmG@bi(JL6(yZC zwc}CuqIm6S zs@M?@zPBE0;C{MQl1X>L2bcyPRF>0&OK0dI;K8M{I7-0x9#pDA1!zTv--=cgJf*QU zr~zM5$Sy)wQOGOxX@zB4@DYh`fCjMtxt5EuPv1=!55r#|VLo(w<1sIIk7rLyJPjxa zHWiljU~7Nstkas~_Wnor_wsoD(j)dPGsM0CG%(7%3&jSSQFf#=YQ_gq*_Ih}A#o*L z$=pe`MaLiyKuJlbslg*apd#!_>SRR9jMR=)5|ZXm9m%el?Lli zQ?w$lIgoQ}OELCESod=dL;k@Y@4!kbhmN#x^=RlykXIG^RK&>~A}DYs2=u z|F|vhmyYYt`9Fnz0KP-*u$O_ob|~_jBTxCs<=#RjIKOuhbOiB`2@cWiQzz*DxgvT9 zKJWy8e2-Av!cK$=O!m^5>6P8aP zm$1yrdzahbWwphS_wr!#&VXI#&}ynkme5d!j}o^yb2c!$|wzUIuOB z^uPGxFaK?0FVl#Zar+OTBiJXe2P3f_EJh!s!>*Mtc)>(EyL%z#33PDTdm$I3(Y-S# z!3$1fo}Uvmz+?aQwQBnMdNn-}#~N|Y*Wy0kyH+LO@zpAII$@gm4QPeeAEryywdVds z9)HN1kY%Mge-wLr*npBZpiNO!7C!}b8Us+H*_HO9KK)ea$b?Rh*Lp*(=bn0+EaU%I z@Oyc@n>wP#-~_b!2i9u@_320x2kO$cG5uiQMjdO&1*bPpAzl-zj&8u3xes)Z4m!xk zx?V<)tIuOhD>1&8>B)^6z!iFOvxdIGk>SaWtI|Dj&e!U=JG``&v}f+_}5;eZ)&dtuF^L*aSnK@IDdk32|yn=nMPz_ z8o2`cV326!iOgHTM;zQMc$Yfz0OUp#<}%KMeOXQ6N6aW8;9APatvDH!+tOCjIQ zgg;COba}&(JIRq^gUo15KOM352^r5&>lxy-rdT4*Uhb3sACJ&!JHd8z%O5f80f;Ra z2|5Tz{hP#THjoY6AtR5VvQ5w*?^%fb;##_znLs!44?|AOr2FXmhm~awY2hY#0ml6) z=;7%t1x?(#j_Vt^&({(>!SM-x$Mhi4i$n{8rwCf$bwnC>p8H=_VPA^(-8&DRWd&># zCD7~T!M`mNKCegCLAF~2nni8|>~C4$bv(j}Hjd~^6RmZneI5I1g6E;ViLUw@T!ZnC z4|;(8iZLf*&@Vqq@}WcrbDa%n_oRW)8KA!PN`ESa?xY`Sn@3FcWGT|KdjZh{u> zl=Aw(@?tU8<#MbMEGsZ?xCGvR8N30q0`mx7CjdOY-!P4cHG!p2FEr{~gz{je`5ucexdEp#2S!p*`YF-CXGv%nutV(bdVdhxK5_Y$Wuhq153 zm_DkizKv$f3O99hZqy4hswh%sp=Sfk1$?WPwW&j zewp09X737XfNvptbmeSc>^WoPv z1Nw>ypudq~%ySl@7AoqZuMIS($+kUdBxp4dYnWm`$9(>*S1-+BXxsl+vYqN!{+e@+ zJ%_LHbm$E#g`9}>lX=1j*u_GiGnqBmkk$nDrTx=v;UhIf$XbP~5SP4eG{$K>=I2zb z7l=*T3BUB+h)>xU1=%c`E*@M0zP(hyMXV)EGyEO@=FF~e{Ld^wPp39cq>}X^kVS*2 z0CSvm73qk1+A)3rE%WM4)9myx=3T_v&N^r?prLVc*8|#Dm(rSNmTJB>CJyaj)rHyGG_8wuF*CGA7 zQ?R*?cn;H8AoLVG-mJ4=`onvlfxjoiMmve+mfy0Ce?05edw_G*1|TL4yaBdGtqT~J z9{_?E^H?!mh;ak2;4x&K8`Fq7bQJTM`AH!3@Z$IQKS5X0So2yAzN3}S>k({PhJVO% zuRcb<=P!j1lKz+Nd<``0KogUhF5ruhfw4OcdGe;8vGzA&?(#gA;77j4>k7v85`LS{ zK1|4?6bZi@U)W)dg7vjIkIEmPKYHMg9{8gN{^)@}df<;9_@f8@&-VaHpNMA76=&k` z4DAY6xxvkRtM2-rqS2&r5Ogz8_ul?HVdgJ$}pL<=8e%^Y?b@O`Pi{u0<}Wy8{cE)j2ZK}VF!1>L*J=%}&!3oosp4aS>j;$_;keGLcU`M;jjvT3AQ-v| z!h-**AS{+36$AzURzc8$pQnOAxVWxEKwQ?nP_cd}U#M8&lrNB$2U5PkLi&H@3lx`f z3zh4e;(^KqQ}I9z`S*%0Q(j6KDgRx;qw9VyHL33B;s>f1^5`idFt68M*beB|0_O>569nV0W1J))8o1-lN*7FxEBE6Tx{IE z9HYlt5vBaOd@S$CvWo?R(n zR8Q2y?S-7@$Uip62w*7Alcwm=_E9}(g=aUKHn0O?C^Y|S+xfF%Za1FAW5s!r^Z@@! zJ3RMMU%fUTZgKDV<=trmJEDG0cjRg`q{3)ps#w>DE^jxdYX=}sC0Ww#6u?nSx|M7} z*AJM}jvA8UQ|?zAC2 z+FT7o|Lq;8M<*kV>1?bS@a;$UGWye_oB{OYIz~ z@SQkH?fW`!0NqQqqKli&D1V_5#rbukKqIXmdbRmzC*H|pVGH;*K76me{dO~LT;M(hz_F#js12>(d8ds_x7HWuIdr0|xh7N* zXF=BvTGQ=RJGz$+$grdPnSkSV^nl@n9X-sFfZO#Ix2v(Xal7QU@tAS@@~!D^+5oED z(wDO58PjaM)3M9vFh=;x_ZEdYE$g#)=>#= zAG1eW>@gOAG<&*>Hr-CMrOfrF6gR6Ut(?-G5|wQbzx>5FgGdjKAj?QfvMCZ2xwhf{S+a95F62R>`$L#`S#tit?IY5DoXoq&|_o!;WJzYD5 zc?P(4z@E-*K;6|auEC)7_xIj>V>W)v@=}8jWP*fMp54K3EU9><1C_3GqEqXgsEi@j z3GI=fe1j8}bGziWpvVphnQ=Z6mzX|hdq_8>yP^9Ml@Vs^BL9zUe{RmR(`w zN6@b==%NpW*>obvy|F-?_YcaCr=G^aO##TMF&i~l5IdN?$OZYK7@U!B$(cf3deG~y zzt*6C?F`!@)^ad>oDg@raxnGR`(?EifQWc@^LO7wZYl>c*Ul*B+F8uCGx7G6zu1!2 z`|1+%5$ECeya!U!5c0-8JT%c5x#R5-6X62?ED265bfHCleO_4eW7-fs%3H!dpUyPI ztX+dP%DBDg$hAN_ec7BghMJ1Grkrm)*8r#E22oLrH65I2NbWtpyo+ZA$oTvAXw!OJ z-*%|4X^L8lgD7<_>Ma7&=egqCg+6}o?HA%?rt<}IWxI$m8*TUVYEZRl`7X`%>P4vw zZIyFPNs~O+6!VRFNzn>BN}tK~f3^Po)*G+${!Of9?2kCxt}`8-Vu@Pes1rT|{%tcQ zi1vDUO++X7SY^(4MICq-+C9aV{_@tV<`2O#q?m_r48aq zoG5LMV$3jZF##6z(Yxw7pzs>CG2}LGp4eYGZqi(H5p#{_8`GoUAu4UlTRI3iS}kb) zARW^Ey!j?P^JB)}S6_4Da<}f3GR20DOc{#(t2-T<>?Yvzj~cH>{FgWXOp_c8DLHHi z#tgt?rWm(lvxd-N)O(*j#Dx0lw4oO7tJ9y(mn|rM4A*T(o5P)Hv~724_gQl>$69{y z4tZI2LhabW4ceBo2y5jWOVknUMh4Ozhik?&{xep3^hAAmd*I=Pd>%e@WV$!)7&nwK z!PWW=KPLn2&na$%J=*CeAZhAQj2FWYI>LZ)<94aGZTCb+TIyp-TgKQTXAI^QYMQ2E z%zAffyk?WG<|m?Us(j?cLe#{VZAC2Kn6z!VAGkDU{87hj(u!d{kh30n^XCNsMu^(# zF#&@F?hg8$Nmt`@GVQEE3p@tWkuY!MG8|4x(-=H~w+GrWOgV0cF?I||XrEf!&@N@$ zFlGlP4{p#m+&?n-TXj|P5#}WssOgc0y!wk=x{-dHk9OgAoZGb-{Fwrm4n zIvRE8$594q0PhX+BOfd1KO#nQ=R|jmn>X6# zRoAwub!|JOpvn4e`{-SD+LCeSqxPpCD*4D!&}8bY!J-EBd?y|1(OT4=7X07WPgsm1Y0;df z47Px8uGF@aS$>o<)0dKGNc1S$rW`Z0ZHfok>vd4}w<_*@{$+~~B${M;1f)y@Z=7O5 zVFNo;hnDY8!*2xsT>oUERY&x{J!*5J2KwsRQXMu$ea0NrWz1eajj~beSJZAr%~rpG zy_8iQATpwyhuO)a2Tzul%XJG;S4`AtM?J!mYq(Y=>dT>R$D$|GTi`$3M~#7g z2MyFFo`~_9Kp_r&N$b-V^xivfQRgA0yjKgL{P-Jc9@sXj59O^KkNR22o5M9xHlr>MYH3OJrlX`9Mpf?8e*J|b$&hl4MM+0bk|9Wv2qF$>QSw2!0s zxOMIN-U!q7-)GKs6ty4Ea-Bca`;%&0Aa5nt+d>^2t_Qkl?!+eXniuFU)y+fwXDfs5 zP5#c$wy&VcJk(6(nupn_gBla!K_9;N7vdV9yJrTg@R3QBxd6OwQeTlP@11v=wUO~w zJ;HZ;Yg|BYDq4qpbX>Da&fU+o%D7J1LDVHf{{2&^@ADVbe8B&zLAy4etJS(S@7Y!D zd)41haC0E8^~ZJF3dMZGTtiLJ=D^?9xQBAC<*l3ro-zgTqQhu~haPHpeSQefQR{oT z4IDQ;*0R$-vrvQa?7mf^W(wC&sZ`{ZmTKroImLVTXo%Zb4`-?V9>$Jq*Ko}wRh;GX z*U`U;OJ*wSQYmWNiMh6zf(G@cW6NiuZCsCxYtn^N?(zws{ecAi>rYs>y36=Bc7&hp zwzYn}Q8Q#J@ZX`#vn=u{BNwKq34)xs&I2seaQm!f3p$ywPSj!GnhOV3EKvJi#+{EI zw*90!aB^KHG1pLo7WH(bI$TnnYUUwDap9B|m(jVDJ<7Im4V-yn8?SY3)=QTv zP+vx>ou{ai$2B3iZiuKkR5#a7ZI3~Y=t*>7k|pPncw*MJt=gVf#<~8{*RZYkG{}UU zXY|t1t;kE3DRME39L$P5brGRssWtK=Ds!7E+9vYbB5!Hg;T>ddsHZjtM!Gswfjsu2 zmJjmai#lM+yynP##P#14bL}j6M=5F>aQ)f|R-ON?$aPj9)h4f@i`X3PZiu-&4*7ME zFXU7%Vm3J*U&^~xeKLcx_ib0?5mw}v7HyOA0E_(dd8riO<}BLKQ>PQ1J-SciWEJ%U zGLf58QL{#(Nkv|F%(V;238;0k3^h21Q}|$A8m6bQrb$Gb_##+e|IhF}&s^o(hf3oo zqn{H+u1hKJp(1Y`=fC7UhMZ>%Z4-HNnlHS~Yl6Q?yTTa6N0r7+L_W6z z$bnNLa&U?KD4eqmIdbk_KrSWDk0WyRNp0i2p69YsX+U37x|p3R<^EM^o5&H)`FlAR zIOkqP%>b?^bMC+z)E)DqXg34$Las?Wk9wDcN z$Za6rMJ8dHTod_ z=0c>qF{MR%A}%vp#OpppZ1&fP>F3z}r?+lMz_~s|?glB(i)a_}Lve1N`^eF7yYx8X z^mkDCwpny!t}}%@_d-lh`%-TstwwdTFGcPZf52mk{s}?6QEjA~F&%)ur4;e%myfJL zo{%IFm;UgQ6pzla=p2{M?Yn=TbI6=P{PAwYq%J|6aR}lM?T`-xcpJB?@iS`2wu#@o z&zou%^C#pk80K%%A$7b}x1XXtd(+kl)|7-jdCu|xIu$z(xj90S&ny&qt;S&Q<41>P zLWer0KSiP4V=TKM7OUN1#L+lK{7l!d&O+Xp64@ z7;T~RBVtIOV!W!r2T~Bz7tQfQ%-eqH`~I8$4}My3P=Zhe2 zF%PZgBR4+0Su^20WuZ7~G;1b&p`eZVfxnlJ;M{nO$Z9Q)@XV;?YxxLj&*SU*N8A$k zaf|@)Cqn%FmB;$;k*{TZ<@eEc#C#4&!IC#57D6*_yIBS`CQ!N@Ax+N zlVKulCN>D%|K(#Zx*?9fi28{ikF&E<@SE?F|whDu;V|~XqkAOGh{#f8H;r|3}czkk@@O!D+*`IRe8^f-u!}))1U~TE}b9#~Y z`-n|_5a-*2@*>TJJ^n_LE7cwyLbr|qQis4F#TESsNOy&g0{}SRV>mA1F5~|&+nE@D zCGI&+qVKQ4hoE4w8GM^`xt`?xKtqv_?xkpoJS~Qr*Vp^#QhuZ*T}*JMD+h-|G{(vcJ`tr z<^o4QBaN#s8|w(j8_@ZuFByt4jpz#>2UohhcNkUe^MLK%gQ^bT!{|z)J5?QU zBOkl=&?_~xpT75(Ka**XRy55Q_NNtAbUnpY>UX*C(eJm@TF>Hcwsl)n`I74cqlW{bCg zvs=CC>^5&Yx7|y?`2;WISs4Z${j1pn@iHaOfBMsF#1W8;i*T@nTUc4Dp-WMtG8i1kIj7hfs^oZbkC_oec9A1dGELlv8SD0{X0 zuk!sE+OJ(5-RvKRF+#2x(0e5KBlB?84rG}T`3RmLngIQBH0QJQ2aW+$wALTFq5$js zkyC~NI^bA8Iu$2@kM*mMuWBFi`5S+F9eNZuiEegz0zVJM zEZBiFP_r|8i7(|X4?=x8z=|N`Bo3tfm4Q@%oJuE=Z>?}O@}e;A0LIZquNS3bzjk6#5M@Q9_TA!t$zC#oa+Z#uw_r1P5ia$=`!mLNyo+I@ zbW^y}osPht0)7?GST^%9XxDALMSDsM>qi+2f+<7R?ZZwOp!2byTR_685vB+ zqk^eTOO{0I=4eyr`W?QY*~2a9SQK*RsL)LT@-NABQ?SAtwoG#x-?u%n{OD((F=UQi z7w|lLVFNq?8<}MP3x!Wg=O*84)>Rwr34y&VMA$l;!b!gGXawG{NI^G(cBH<~T{ePp zmjwx$&jZcpE%QY!-Ttt5bS7_oO=n-!G>wAYH4}E&oEX&HguQ`nM8{#PWZRbfeAT0+ zZYMe%9s*ktY+QAK@Qn&^AulT<>fJ?~j5}%3cqiEHKr870PfJ7al|Lz;YtW%B9h?z> zaTr}k^9zEI)7F8O4DHUc%}mB`nOhIkCm#;mKsXg`jKpyv&GB=^`tT;T`lva*4V$8~ zxdH4~Qz##}tJ)md#*@2hCgrNwRC8iv+^12N!nV4=uW_5YsSbQpBF8J~J{@x)b><*i zGDLwN#&?k`eD9(>VKn&kH65X>sd)Xw+RXfa&F3?qKxcKX9cb{O{fli=S zMfr|ps8bjVd&GJ=vv(bANo!$mS%Vr@Yp8tJYQQS$-M!(Q=J8KjIz#mR@ipPJcIrq< zge|iK_T1ul2C47;?06@v&WHYt8oa&7qvB_kaK+# zYz+!XMDBgq`_3IeKJEi?l(>9ugXhcdTQxP97KZqsW_TU_oA=bAoVZBQ_e?h#Yvwhu z4_fwu%*FjK`hEe{&`?Sa?E|}v#Gmne_;F|*+Z<$snlDpCtw*kvUYU}BIzZcT&9DtN z$*r_v+L%W1Ytj4zD%r7$I%&3P@cjVep31&wx(OOQQ0+Hsrv(Fl(EL`^8QT;E-=!eh z=&#S~TQcLuAGT4?1`Xy$4@17)EuuaZ+Y72t&-*g!lwD2*9NSG>qh_f+8~-Y<7l#G| z|1GGk+R)eeO{{&V_pDRW&FNihC}OlXy$fE|S@TOZ+)KAaqTcaf$OoO-p3Ctr;={RO zv3LG989o|kb}xb52Q{X%lb~DYI`fABiLh}Tq>3XugpC;gq{LIZ%@X&a}jjIc%Rv`68^33#A_MoEsAkc{dgK{eHvh_^(-;e0``c-$bFfL zS_NE}^#tmaphhcdG;*y@8w*qV6V`yPz|+ps4E47U0QaLbe6U@EzH6`1hRP0Y7kyuy zc>pyJ_6s``)6V5I&<^OP3UpJMyahGx!cZ&NlzpYYVZDGVZt^*=#nY@iiCQt$Y1@(S zIR`ZZxvm@6jpVwJxfI~;N(0P#3)_mo9rYF%|M=(#_^!OE#Ib{x29+E}9#ECO=lWYR z-CPlLgPP&M_1xa&qBg_S0gy|fOOf%Ze~iHX67wc=nR`$8F9srS=waBsiWRk|N{}zO zn9_D_p+lS2!FI>FgX?g=4cw1xjTQKHZm&%hX^C}xFKQ%bz~04mN>MXg&<^M(_lT$y zcXF{OEp^xBIh)2f)W=Kpn)h+o&)+%ni2IFGedx8ecUt-w95y>_4L zX2EvHxQ`9+p&nhk(8b&|34iW;*sq7zzwI9X>07v9i<=o0#`{gm$>!{&;`-*xlsNEvfT##@-usN2ll;nx_a4j%V zJ5JR7l4}PRp@shfWFqJCA?(T(V{ z64W6&sQIiajCp{P3o+#iYhMKbQF8Nq$eb!E`cwZ)mpLArvn;s3nUy$9=F zZonqk@kO{a^&O8j_5sIv&K#O*h5hg(wB7d|Et`O;5mbN&AcZXzKq9a48%To z4C*|@A)k7-$hZCV)eDM#MU986sQUt(9wF~K=lth-AeBk0;g3I(Qc!1l(GXqMqdsNX zn4kSBIK0Ylm_ITP=XGYTV>j9wY>IleHi#4OBF+hWW@oslOTe`W`25s{i6ZxG`fO{| zYwbg`@jv{(SoatI+CF;`zPuLlex79tjFLFOA`i*T&ngC0{Z((O*8p9kI2D{7#e-o`!fxWdJ1)6C6h$F)z zzK8F?mbKh}OL~MZ|1-QdHo!#d`x&+!DK-H1nR$kEYIPqvA8$_QH$m^brZ@7*8&a&l zF3mu^O@N8!_uz3GUsd;wE^6@Mx|fg{=8wR8SHd<`7}E#wq*nA8ww0&F_J}jKqvxmW z=-V>DDO&*BU{-o&J(up05@UdfqjRMY>TSiV?}Wo z7p#Z3nP(_p)W`|r=x3~Xd&d}k#DgJbH`Q6#5F{IjGi)Hv!hR#!KnBC!0sDv_)4GvYHzSC+NbhX)SCrSl5di zqX%B2!UuIm+#C7~_KPctZqTCx*#07HFhhaUP;wifshs*~M}zY>poi~o^cii7=uNlM z>iX|a`d~Vb@tlWuU_M2w_5sUnK_=S&$e7m``erw}yvIXfUtt@|Fsg>0y!wDUm2GwY zS-N-q&Ml~Liyh*1*}mlpJDf9O-OMP6`G$&J3TxQrrS9Dk$Hlgj;dDM>I9=GmHWb!> z1E2@5-0eXX+uZ2m4;t6qHP#n=ua9mk(SO&I(0_o+9fN4O2li6>8u8o*LdS2U{e1@P z4`mxYsbZ5i>YC_3$1-9x7bTb^^9>_|rtxW~l$n06SfQ z-(2`O*8i@t>o%?4qZQ-&O8tkv_lG_=5c=Fe zN{#eZ)7Qw)?$WlUz;9!y!wcWvP3sfdJ_9kN8+~9y07|k4X1;Xd&7TB zs}!=`V&ut!;TuH)AnOVQeMvr_8yw;{9m<<5c)w7sk$2=ws*7nu$Kp!_GpS z0PByT^NyKDnTRcl4sxN$fWdSG@hB&v$3ss)4lyfZpd$`}9vixB(SO0@ZKbc)e@s8N z`W^8<()eaa2Vl=JkjMWKe8f&4oMMgmlW3(5xn%QVg$`5FU#7*(Ag#|^DWCZ+bW3X| z_yE5dO8jz`PnG&_$t2n}J)lACu5<71O8hbwV(iA63HtLj)Y!Dv*8uw9Wze~#61xHhT%3d2z<~_R5+t9}|e#^(g&b5y9@UzLSAN4*x zbQ-*W`J^CXkn!Q;pWk=`c^#%eA0JKoA`x@+XDQ~W%_kotRw5kZJCE{#TUJy6g@OOD zJjpc{0*%}MH9OjyE<$g5iS|0bIWqnYd(JvwTIx7Tn!yk zHFS4XnFrxBet^QqjZl04hKMlu!tbPDHz&3G+y{G>%vS5a;dcF~6!=s?SIRol(v5SW zAJF5rb4;l89%2xnquaZBv3Sq>@BT&j=vSsgCkOm= zpl`whlrYSGfU^HCLZ2x2--RUj=^x&TK3k8PCqp5Zw)?KWJP5gc`TW5>=p5?Z-GrWn zb#k@P3*AJ$^OEGf^ht}4C4ck++21~uhT08KzPqnsFRDbmhv>iK=)X+#AFiv?Q9m(l zAI5Yi>;W@qo)css$kmFbD-SGx`Ri+*TNhv|YOLNlQ$Tm2SGf!Q)gAaPr|sT~I;@i3 z?G|)~wF>+!Obp3bPnRxb9~E&A*9CrQbPc+;tBU@shCcZm>NKzOHDN!Aa`q8dzF6gi za;UJD<7YYTI#hTs033dAY^zgy60 z*5Q{8pZ*NGm=ufH+Wv(2fIId3UFG%S6mp;*^4vdK8(;?Ad>r0?Mygo|y$;vRRrm4c zddT(hHc$MEUpJZN*zT5<#=hLV${RlNK{=oph?nitNd#retCuP3&D$k`n$sL&8 zRiSIpfZm~bEmRSCP){&KKz+c_>}P)D|I1T6rxwrTXY)IhuCaJG>nV6++7s|g^%Urv zHj+(UGYx$Nzi*B21mGOJJr!&082$}j@v}a>4~GqHb#Nc8pCTMP(Y{c9)Q&Qvvzz+S zIY2>-skj%8?~tS6U!b)euS)0G^Ek0yk^K};$0FZUmMc9k8%EDhyVJLT@5Qv zIrquoX?^HQl0V%z7C<*s1E@9)knT@5ecCG58~mR*e;@fv?9JQK_Q-y8H`|LI=6OS3 zF&r`ECd~7mtB!}*XAbR(eWf2&Cyu0=LnG+QVL;LdIvzW;!L#Le$j9y-T2R>@H@bV= z7khCJS`42t-otPkIHr80iS|Epqa5hMuF-UH&uFULJBlvt1MD9~=l6^t-41m!r2NeK z#}TmeiFTvyoWEpbZ>^u0c3IEL`NdAfj=(;6ES=dtmbT1tpq^r&L%IBNY# zLt8LEpZCPJsEwJ8J*?dB%lk&sjxk2uN2!3CBZx=NUp1Ku)`XHlC-t$kHR_BQ(uw45 z)uX{Uv}@ghvQXbkZui-QF?4PRLkJz4-JhRd1-2qBv7d|HG(UX++V$PxCJ-~>v zVdDwwOrnKBj%01vncBB*NtSx;DScTmEeNtDldc-%Y5|{;)xn5`8BeD-jf4M- z1M6(y->vc8armSa!G9zHei^3SJJL`~BiaQY5V2QTiM_yzF!<-d*GTvqO+jq?6!;BH zrnKm>YI{X~chUMuh_ji9IN?EfzQ%W$S65T#4xuu{fR@28gkxFRpQQxx@Sz@#^jV7! zNw-~FiVqtp?URJR%51E$Gx44oXiFV!wQcpW^4&?(ths-xd3<+{Lk>s8p0aGua{ZaT z>*>(4Icl-+=6YQzYwdh;G&7*S@RNw0Hd6TgO!unu)3G(umHcGz-fggv@c1&%i5S!c zdx+RN88mqZt(`MTZ9Lb_98ZhJ*Tu@d4cl&3Y$O$LT}Hh+NjCJ&v&M*a7p$8}5ui`O z+fkPb@yP!ySUVnZiOI0{BK{GwdgivZ%I6z)?;_qkeT0|t9@FNDc*N^sPg92Y;ojIg zRB&uNWbrJl*_dDdl-CBdW9xF*W3OZ|d0j3D zd)U=4!`6H$74_kH@1oeZu-%@0sd#?}9K?s;13US5$?%7~Q;{!ZG?r~AjSPS-9I_+J zwUD_Z!zRKXaW3^S)TgR~`SBY3|^yT+*Oa* zyG&&Mox0FN)LCU2jO#87Sx_OT-a(A$SE%p)5Vl?+KSOT5S(HX8^IXLG!t|p0%=+it z4(_WM#L%DF6A8OvIeq)!EEMBJcMAN(F_!=B#8`>LLzPnyEJ{yTWR z;XN?ZRfJ;~+8;KE3J}MBc5f7XDWd3P>}1*(<|y(yj^zG8&I*4MP0jkxdD%7Bl;iaj z{gwe4tr~lf?-}@>9qX_ zN}XXd84UZ46YLfa@RjaEV-a@*dRW5$TmQMxlP;Ty_g3y4O!rQBLEafo4{|&qGkMTg zdBY%Mxzpo(H^jRPr6)zwd#)wg(oDOKyw_i>`aF)y8e`s`&TfGp|FJ--g^Y76&7W$H zcu|mZ7t-t8lAJ6wXl77PN?VV-o!NEosX5?CoV!eJJNGO1Mf!YO$TT64X+}e)8AVr< zf+=KZp-b$??Y<6u^qZhd_Zc>w=`7@n3%e&mj+ub|*Tey+!5T*8Tc^>Q$*$DjpaV_! z=|^XGgo5Wcp1+Rem|W<<<@W5GV$Nf}6VIzjU*L^(cn);&qlCY_j7P#8Kk^vRQ1@rw zr!ytYb3=P3&_%SRa^E=UAzio+1+C_-7%%jFfsS?Uv%wmdy?Q1cT@p&xMqS}I_BQgB zzCk0M%qV%uD2hNntc;Z*s4qK(&Lm8RUfP?V_nhgzXnmN__qY!iP z#$u7{hJ6YP;m4VSTquR>=TeL2QqHjE$OUtJ#U#Yw&VV0$0Jrx$*w(M)t$}|b>%xQ{ zXA5O-UQX@4{6gscCV9CCeIe@#*`JjC8F}57`((?EQB(jQ*NpiBziP-bd-u;mtPIwX zYUpXI;NLYp*jM>``@SZW5Y0ZN?~;zT2BpVF)8>d!@jdI(O14RUt2-y!vHf5dXnWXf zhpxgOi~Y4&-w{1sTJw3`%-tPNlLPD4C--j^>*ARdti8xH!uq(#*q^gpWRFsy4wTsuoGKycmh~9-?;KBH{3f&Fsy*S52 zCY?RF2J@}G@G0kK$sf#<pgLoe1LczlI*-d_fK+ZrcQ12=p_T;O`>d za|(Wbn`ov3`v+?-k)IM_nQt|eMSl_PE_m3XXw-4{p^ZR$O=G8*yf%nv2 z!(Sh zIrAm?|6X(yV}x97aw@-Vc9U?nU2Kc+!J>SM2kL z(qGTI(%;TvT`F;;!!r@@W2BL-`V7c5>kff$KQ10ePfEsO{~kiFiX5yhVUM;o|B_Z= z&;J$n_}`X!(&1Ug#CUK+*e55#sq4S)WKE|B1+(d4!A!cFJC%6zO`D~m( zTUs%YC#x^+kD}|xH&X8&l6|Oa`!#8va?YQ{GB%!ZPug9VNAa-bcHC(saUV@lsRoocgI(e?Cb znq=Aj`%sMUjoiajp1g}v;#Ug&`JNREY4>ux13t!A;Nw~Yzi3YfNvCbD-<__Z=6ubu z^~CRH{I6y0gCF8ax_dg8(spc6wmWCfW^%Pbp1-N%=uqr3ao^w75jx~Vs)S8}@#k?U zNmwZS-@byL^3c{e@jFxK&5tHX&w3O7^z0iO;xmlW6XH&+jWM_!ilT+~4}gxuP;E7JgYe_RIk z-`_vF5597TYR;a9JY7o z<7Uy{o<61@zI{r6fA)m__RV8@a{o4c|M&r(4Ssd+24$`er2u2i-1>ZgpMf& j(XL`TWm;GLEuTMwQ&=7xt|A~VGra60|BnBM|M&j^&~%xO literal 0 HcmV?d00001 diff --git a/test/test_bgraknob/project1.lpi b/test/test_bgraknob/project1.lpi new file mode 100644 index 0000000..f0104e4 --- /dev/null +++ b/test/test_bgraknob/project1.lpi @@ -0,0 +1,87 @@ + + + + + + + + + <Scaled Value="True"/> + <ResourceType Value="res"/> + <UseXPManifest Value="True"/> + <XPManifest> + <DpiAware Value="True"/> + </XPManifest> + <Icon Value="0"/> + </General> + <BuildModes> + <Item Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <UseFileFilters Value="True"/> + </PublishOptions> + <RunParams> + <FormatVersion Value="2"/> + </RunParams> + <RequiredPackages> + <Item> + <PackageName Value="bgracontrols"/> + </Item> + <Item> + <PackageName Value="LCL"/> + </Item> + </RequiredPackages> + <Units> + <Unit> + <Filename Value="project1.lpr"/> + <IsPartOfProject Value="True"/> + </Unit> + <Unit> + <Filename Value="unit1.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form1"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="Unit1"/> + </Unit> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="project1"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <CodeGeneration> + <SmallerCode Value="True"/> + </CodeGeneration> + <Linking> + <Debugging> + <DebugInfoType Value="dsDwarf3"/> + </Debugging> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + </CompilerOptions> + <Debugging> + <Exceptions> + <Item> + <Name Value="EAbort"/> + </Item> + <Item> + <Name Value="ECodetoolError"/> + </Item> + <Item> + <Name Value="EFOpenError"/> + </Item> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/test/test_bgraknob/project1.lpr b/test/test_bgraknob/project1.lpr new file mode 100644 index 0000000..7276786 --- /dev/null +++ b/test/test_bgraknob/project1.lpr @@ -0,0 +1,24 @@ +program project1; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX} + cthreads, + {$ENDIF} + {$IFDEF HASAMIGA} + athreads, + {$ENDIF} + Interfaces, // this includes the LCL widgetset + Forms, unit1; + +{$R *.res} + +begin + RequireDerivedFormResource:=True; + Application.Scaled:=True; + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. + diff --git a/test/test_bgraknob/unit1.lfm b/test/test_bgraknob/unit1.lfm new file mode 100644 index 0000000..50b1f0a --- /dev/null +++ b/test/test_bgraknob/unit1.lfm @@ -0,0 +1,1577 @@ +object Form1: TForm1 + Left = 720 + Height = 483 + Top = 177 + Width = 1269 + Caption = 'Form1' + ClientHeight = 483 + ClientWidth = 1269 + DesignTimePPI = 144 + OnCreate = FormCreate + LCLVersion = '3.0.0.3' + object BGRAKnob1: TBGRAKnob + Left = 32 + Height = 100 + Top = 48 + Width = 100 + CurveExponent = 0.200000002980232 + KnobColor = clMedGray + LightIntensity = 300 + PositionColor = clBtnText + PositionWidth = 4 + PositionOpacity = 192 + PositionMargin = 4 + PositionType = kptLineSquareCap + UsePhongLighting = True + MinValue = 30 + MaxValue = 360 + StartFromBottom = True + StartAngle = 30 + EndAngle = 330 + KnobType = ktRange + Value = 30 + OnValueChanged = BGRAKnob1ValueChanged + WheelSpeed = 100 + WheelWrap = False + SlowSnap = True + ReverseScale = False + OnMouseWheel = BGRAKnob1MouseWheel + OnClick = BGRAKnob1Click + OnDblClick = BGRAKnob1DblClick + OnMouseDown = BGRAKnob1MouseDown + OnMouseUp = BGRAKnob1MouseUp + OnMouseMove = BGRAKnob1MouseMove + OnMouseEnter = BGRAKnob1MouseEnter + OnMouseLeave = BGRAKnob1MouseLeave + end + object GroupBox1: TGroupBox + Left = 464 + Height = 456 + Top = 16 + Width = 168 + Caption = 'Set/Get Value' + ClientHeight = 426 + ClientWidth = 164 + TabOrder = 0 + object Set50Btn: TButton + Left = 24 + Height = 30 + Top = 133 + Width = 113 + Caption = 'Set 50' + TabOrder = 0 + OnClick = Set50BtnClick + end + object Set180Btn: TButton + Left = 24 + Height = 30 + Top = 187 + Width = 113 + Caption = 'Set 180' + TabOrder = 1 + OnClick = Set180BtnClick + end + object Set100Btn: TButton + Left = 24 + Height = 30 + Top = 160 + Width = 113 + Caption = 'Set 100' + TabOrder = 2 + OnClick = Set100BtnClick + end + object Set360Btn: TButton + Left = 24 + Height = 30 + Top = 214 + Width = 113 + Caption = 'Set 360' + TabOrder = 3 + OnClick = Set360BtnClick + end + object Set25Btn: TButton + Left = 24 + Height = 30 + Top = 106 + Width = 113 + Caption = 'Set 25' + TabOrder = 4 + OnClick = Set25BtnClick + end + object Set0Btn: TButton + Left = 24 + Height = 30 + Top = 79 + Width = 113 + Caption = 'Set 0' + TabOrder = 5 + OnClick = Set0BtnClick + end + object SetValueBtn: TSpeedButton + Left = 120 + Height = 33 + Hint = 'Set Value' + Top = 336 + Width = 35 + Glyph.Data = { + 36090000424D3609000000000000360000002800000018000000180000000100 + 2000000000000009000064000000640000000000000000000000FFFFFF003535 + 352B55555503FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003434342C3333 + 33FF343539EA42516ABC4762822FFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00555555033435 + 39EA333333FF333434FF4C668FFC5F8DD4AA618BD54200FFFF01FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004151 + 6ABC333434FF4C668EFF5F8DD3FF5F8DD3FF5F8DD3FF5E8CD3D84E7DC55CFFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00475C + 7D2F4C668FFC5F8DD3FF5F8DD3FF5F8DD3FF5F8DD3FF598DD0CC2674AEF72D5B + A089FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005F8ED2AB5F8DD3FF5F8DD3FF5F8DD3FF5891D2CC16A2C4F71C8BB7FF2473 + ACFF2B5BA089FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00618BD5425F8DD3FF5F8DD3FF5696D5CC07D3DBF70DBCCFFF14A3C3FF1C8B + B8FF2473ACFF2D5BA089FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF005F8DD3D55894D5CC03FAFDF700EAEAFF04D4DBFF0CBCCFFF14A3 + C3FF1C8BB8FF2473ACFF2B59A089FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004E80C25C2092C1F80EC9E0FF00FFFFFF00EAEAFF04D4DAFF0DBC + CFFF14A3C3FF1C8BB8FF2372ACFF2D5BA283FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF002B5A9F821D92C0FF0ECAE0FF00FEFEFF00EAEAFF05D4 + DBFF0CBCCFFF14A3C3FF1C8BB8FF2473ACFF2D5BA289FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF002D5AA1821D92C0FF0FCAE1FF00FEFEFF00EA + EAFF05D4DBFF0CBBCFFF14A4C4FF1C8BB8FF2472ACFF2D5BA089FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002D5AA1821D92C0FF0ECAE0FF00FE + FEFF00EAEAFF04D4DBFF0CBBCFFF14A4C4FF1C8BB7FF2473ACFF2B59A089FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002B5AA0831D92C1FF0ECA + E0FF00FFFFFF00EAEAFF04D4DBFF0CBBCFFF14A4C4FF1C8BB8FF2473ACFF2D5B + A083FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002B5AA1821D92 + C0FF0EC9E0FF00FFFFFF00EAEAFF05D4DBFF0CBCCFFF14A3C3FF1B8BB7FC6C92 + ADC499999989FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002B5A + A1821D91C0FF0ECAE0FF00FEFEFF00EAEAFF04D3DAFF0CBCCFFC7ABECEC4C2C2 + C2FFAEAEAEFF99999989FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002B5A9F821D92C0FF0FCAE1FF00FEFEFF00EAEAFC88EAEEC5EBEBEBFFD6D6 + D6FFC2C2C2FFAEAEAEFF5D5DA073FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF002B5AA1821D92C0FF0EC9E0FC70EAEAC4EAEAEAFFFFFFFFFFEBEB + EBFFD7D7D7FF6F6FC7C70000BBFB0000AB89FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF002D5BA0836BA1B6C4C1C1C1FFD6D6D6FFEBEBEBFFFFFF + FFFF8585EBC40000DEFB0000CDFF0000BCFF0000AB89FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0099999982AEAEAEFFC2C2C2FFD6D6D6FF8383 + ECC70000FEFC0000F0FF0000DEFF0000CDFF0000BBDD0000AF10FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0098989881AEAEAEFF6F6FC5C60000 + DCFB0000ECFF0000FDFF0000F0FF0000DFE00000C921FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005D5DA0730000BAFC0000 + CBFF0000DCFF0000ECFF0000FDDD0000EE1EFFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000AB820000 + BBFF0000CBFF0000DCE00000F021FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + AB820000BBE00000D121FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000AF10FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + OnClick = SetValueBtnClick + ShowHint = True + ParentShowHint = False + end + object ValueEdt: TEdit + Left = 8 + Height = 33 + Top = 336 + Width = 113 + TabOrder = 6 + Text = '150.0' + OnKeyDown = ValueEdtKeyDown + end + object Label11: TLabel + Left = 16 + Height = 25 + Top = 312 + Width = 72 + Caption = 'Set Value' + end + object Label12: TLabel + Left = 8 + Height = 25 + Top = 0 + Width = 83 + Caption = 'Quick Sets' + end + object SetNeg10Btn: TButton + Left = 24 + Height = 30 + Top = 52 + Width = 113 + Caption = 'Set -10' + TabOrder = 7 + OnClick = SetNeg10BtnClick + end + object SetNeg5Btn: TButton + Left = 24 + Height = 30 + Top = 25 + Width = 113 + Caption = 'Set -5' + TabOrder = 8 + OnClick = SetNeg5BtnClick + end + object Set1000Btn: TButton + Left = 24 + Height = 30 + Top = 241 + Width = 113 + Caption = 'Set 1000' + TabOrder = 9 + OnClick = Set1000BtnClick + end + object BitBtn1: TBitBtn + Left = 8 + Height = 40 + Top = 376 + Width = 144 + Caption = 'Get Value' + Glyph.Data = { + 36090000424D3609000000000000360000002800000018000000180000000100 + 2000000000000009000064000000640000000000000000000000FFFFFF000000 + 000000000001000000070000000E00000014000000190000001A0000001A0000 + 001A0000001A0000001A0000001A0000001A0000001A0000001A0000001A0000 + 001A0000001A0000001A0000001A000000180000000D00000002FFFFFF000000 + 0000000000020000000A000000150000001F00000026180C012D371C013C4F28 + 0148582C014D46230144713902A6974C02CC974C02CC974C02CC974C02CC974C + 02CC974C02CC974C02CC974C02CC974C02CC2613014200000003FFFFFF000000 + 00000000000100000002000000032714010A733B03299650053EB5700C45D691 + 0E4AE5A00D4CEBA70C3E994E04CCFDB717FFFCB30DFFFCB30DFFFCB30DFFFCB3 + 0DFFFCB30DFFFCB30DFFFDB717FF994E04CC4D28024900000001FFFFFF000000 + 000000000000502A04009D52060E9C510641BF781151EDA7165AF7AF0E5DF7AD + 0A5DF7AD0A58F7AD0A3A9C5106CCF8B622FFF7AD0AFFF7AD0AFFF7AD0AFFF7AD + 0AFFF7AD0AFFF8B622FF9C5106CC9C51065C4D28020000000000FFFFFF00A358 + 0A00A2570A00A0550912A3590A54D28E1D68F2AC1A72F1A81172F1A81172F1A8 + 1172F1A8115DF1A8113AA05508CCF4B52EFFF1A811FFF1A811FFF1A811FFF1A8 + 11FFF4B52EFFA3590ACEA05508709C5106004D28020000000000FFFFFF00A65B + 0D00A55A0C0AA3580B5FD08F267DEBA72088E9A31988E9A31988EAA61F88EFB4 + 3884F2BE4D5DF4C3573AA3580BCCEFB53CFFE9A319FFE9A319FFE9A319FFE9A3 + 19FFEBA720FFD08F26EAA3580BB0A55A0C12A65B0D00A65B0D00FFFFFF00A85D + 0F00A75C0E4BC27E258BE5A52E9FE29E229FE29E229FE6A7319FECB9539DD399 + 3E81B975214FAC62132FA75C0ECCECB549FFE29E22FFE29E22FFE6A731FFE29E + 22FFE29E22FFE5A52EFFC27E25DFA75C0E77A85D0F00A85D0F00FFFFFF00AC61 + 1115B067168EDDA33FB1DB992BB6DB992BB6DEA034B6E5B254B1BA762396AC61 + 1155AA5F1017AA5F1004AC6111CCE9B857FFDB992BFFE9B857FFE5B254F9DEA0 + 34FFDB992BFFDB992BFFDDA33FF9B06716C7AC61111CAC611100FFFFFF00B166 + 154EC58532B1D89C3ECCD49534CCD49534CCDEA74DCABC7724ABB0651553AD62 + 1200AA5F1000AF641400B06515CCE8BA63FFE8BA63FFB06515CCBC7724D6DEA7 + 4DFCD49534FFD49534FFD89C3EFFC58532DEB1661560B1661500FFFFFF00B56A + 1891D69F4DD2CF923CDFCF923CDFD19540DFCB8C39CCB56A1885B3681700B065 + 1400B3681700B56A1800B56A18CCE9BE6EFFB56A18CCB56A185CB56A1898CB8C + 39E9D19540FFCF923CFFCF923CFFD69F4DF0B56A189EB56A1800FFFFFF00BA6F + 1CB7DBA85AEACD9043F0CD9043F0CE9345F0C07927CBB96E1B3BB96E1B00BA6F + 1C00BC711E00BA6F1C00BA6F1CCCBA6F1CCCB96E1C5CB76C1A00B96E1B3FC079 + 27D7CE9345FFCD9043FFCD9043FFDBA85AF8BA6F1CBCBA6F1C00FFFFFF00BE74 + 1FC8DEAD65FBCD924BFDCD924BFDCD924CFDC07622CDBE741F10BE741F00C57A + 2400C4792400BE731E00BC711D33BD721E48BA6F1C00BD721E00BE741F11C076 + 22CFCD924CFFCD924BFFCD924BFFDEAD65FEBE741FC9BE741F00FFFFFF00C378 + 23C9E4B76FFED29753FFD29753FFD49A56FFC57B26CFC3782311C57A2500C87D + 2600C4792448C67B2533BF742000BD721E00BD721E00C3782300C3782310C57B + 26C8D49A56F7D29753F7D29753F7E4B76FF5C37823C3C3782300FFFFFF00C87D + 26BCEBBE73F8DC9F59FFDC9F59FFDFA55EFFCF8A37D7C97E273FCB802900C97E + 275CC87D26CCC87D26CCC87D2600C67B2500C97E2700C97E2700C97E2739CF8A + 37C4DFA55EE8DC9F59E8DC9F59E8EBBE73E2C87D26ABC87D2600FFFFFF00CD82 + 2A9EEDC071F0E6AC62FFE5A85FFFE6AA61FFE1A758E9CD822A98CE832B5CCD82 + 2ACCF1C47AFFCD822ACCCD822A00CF842C00D3882F00CE832B00CD822A7FE1A7 + 58C4E6AA61D6E5A85FD6E6AC62D6EDC071C9CD822A85CD822A00FFFFFF00D186 + 2D60E2A854DEF3C377FFEDB065FFEDB065FFF0BB6FFCDA9640D6D1862DCCF4C5 + 7AFFF2BE73FFD1862DCCD3882E00D78C3100D58A3000D2872E51DA9640A2F0BB + 6FBFEDB065C1EDB065C1F3C377C1E2A854A8D1862D49D0852C00FFFFFF00D68B + 311CD99138C7F9D385F9F2BA6EFFF1B76BFFF2B86CFFF3C174F9F8CD81FFF1B7 + 6BFFF6C67AFFD68B31CCD78C3104D78C3117D68B3155DE9B448FF3C174A7F2B8 + 6CABF1B76BABF2BA6EABF9D385A6D9913885D68B3113D68B3100FFFFFF00D98E + 3300DA8F3477E9B15CDFFBD68AFFF6BE72FFF5BD71FFF5BD71FFF5BD71FFF5BD + 71FFF9CC80FFDA8F34CCDC933930E2A0494FEDB7657EF7C57992F6BE7293F5BD + 7194F6BE7294FBD68A94E9B15C81DA8F3446D98E3300D98E3300FFFFFF00DB90 + 3500DC913612DE9337B0F3C573EAFCD78BFFF8C478FFF8C478FFF8C478FFF8C4 + 78FFFBD185FFDE9337CCFBCD813AFACA7E5DF9C5797CF8C4787DF8C4787DF9C5 + 797DFCD78B7DF3C57372DE933757DC91360ADB903500DB903500FFFFFF00E196 + 3900E1963900E1963970E39A3ECEFEDF93FFFBCA7EFFFBCA7EFFFBCA7EFFFBCA + 7EFFFDD68AFFE1963ACCFBCA7E3AFBCA7E5CFBCA7E67FBCA7E67FCCF8367FEDE + 9267F4C6745EE39A3E4DE1963910DF943800DF943800DF943800FFFFFF00E79C + 3D00E59A3C5CE59A3CCCFFE094FFFDCF83FFFDCF83FFFDCF83FFFDCF83FFFDCF + 83FFFEDA8EFFE59A3CCCFDD0843AFDD28652FDD68A54FFDE9253FCDC8E51EFB7 + 6049E59A3C3AE4993B0DE2973A00E2973A00E2973A00E2973A00FFFFFF00E89D + 3E48E89D3ECCFFE599FFFFE599FFFFE599FFFFE599FFFFE599FFFFE599FFFFE5 + 99FFFFE599FFE89D3ECCFFE4973AFDDD8F41F9D18040F1B8603AE9A24434E89D + 3E20E69B3D05E4993B00E2973A00E2973A00E2973A00E2973A00FFFFFF00E99E + 3F33EA9F40CCEA9F40CCEA9F40CCEA9F40CCEA9F40CCEA9F40CCEA9F40CCEA9F + 40CCEA9F40CCEA9F4099EA9F402AEA9F4028EA9F4022EA9F4015E99E3F07E89D + 3E00E69B3D00E4993B00E2973A00E2973A00E2973A00E2973A00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + OnClick = BitBtn1Click + TabOrder = 10 + end + object SpeedButton1: TSpeedButton + Left = 56 + Height = 33 + Top = 272 + Width = 35 + Glyph.Data = { + 36090000424D3609000000000000360000002800000018000000180000000100 + 2000000000000009000064000000640000000000000000000000FFFFFF000000 + 0000000000000000000000000001000000060000000C00000012000000180000 + 001A0000001A0000001A0000001A0000001A0000001A00000018000000130000 + 000C0000000600000001000000000000000000000000FFFFFF00FFFFFF000000 + 00000000000000000000000000020000000B00000018000000240000002F0244 + 00A6025A00CC025A00CC025A00CC025A00CC024400A60000002F000000250000 + 00180000000B00000002000000000000000000000000FFFFFF00FFFFFF000000 + 0000000000000000000000000000000000000000000000000000011900000462 + 00CC22DA11FF22DA11FF22DA11FF22DA11FF046200CC01190000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF000000 + 00000000000000000000000000000000000000000000021C0000066C0000066C + 00CC22D511FF22D511FF22D511FF22D511FF066C00CC066C0000021C00000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF000E8D + 000007460000000000000000000000000000031F000009780000097800000978 + 00CC23CD12FF22CD11FF22CD11FF22CD11FF097800CC0978000009780000031F + 0000000000000000000000000000074600000E8D0000FFFFFF00FFFFFF000E8D + 00000E8C00000E8C000007460000074600000B8100000B8100000B8100000B81 + 00CC25C714FF22C611FF22C611FF22C611FF0B8100CC0B8100000B8100000B81 + 000007460000074600000E8C00000E8C00000E8D0000FFFFFF00FFFFFF000E8D + 00000E8C00000E8C00000E8C00000E8C00000E8A00000C8400000C8400000C84 + 00CC28C117FF22BD11FF22BD11FF24BE13FF0C8400CC0C8400000C8400000E8A + 00000E8C00000E8C00000E8C00000E8C00000E8D0000FFFFFF00FFFFFF000E8D + 00000E8C00000E8C00000E8C00000E8C00000E8C00000E8B00000C8700000C87 + 00CC2CBC1BFF22B511FF22B511FF26B815FF0C8700CC0C8700000E8B00000E8C + 00000E8C00000E8C00000E8C00000E8C00000E8D0000FFFFFF00FFFFFF000E8D + 00000E8C00000E8C00000E8C00000E8C00000E8C00000E8C00000E8C00000D8A + 00CC31B820FF22AD11FF22AD11FF28B117FF0D8A00CC0E8C00000E8C00000E8C + 00000E8C00000E8C00000E8C00000E8C00000E8D0000FFFFFF00FFFFFF000E8D + 00990E8D00CC0E8D00CC0E8D00CC0E8D00CC0E8D00CC0E8D00CC0E8D00CC0E8D + 00CC36B725FF22A511FF22A511FF2AAC19FF0E8D00CC0E8D00CC0E8D00CC0E8D + 00CC0E8D00CC0E8D00CC0E8D00CC0E8D00CC0E8D0099FFFFFF00FFFFFF000F90 + 00CC5DD44CFF4FC63EFF4FC63EFF4EC53DFF4EC53DFF49C138FF3CB72BFF31AD + 20FF2EAA1DFF229F11FF229F11FF27A316FF2BA71AFF2AA619FF29A518FF28A4 + 17FF28A417FF27A316FF28A417FF34AE23FF0F9000CCFFFFFF00FFFFFF000F92 + 00CC60D74FFF44BB33FF44BB33FF44BB33FF44BB33FF44BB33FF44BB33FF42B9 + 31FF39B128FF2FA71EFF2AA219FF259D14FF239B12FF239B12FF259D14FF2AA2 + 19FF2FA71EFF39B128FF42B931FF48BF37FF0F9200CCFFFFFF00FFFFFF001095 + 00CC64DB53FF44BB33FF44BB33FF44BB33FF44BB33FF44BB33FF44BB33FF44BB + 33FF44BB33FF44BB33FF44BB33FF44BB33FF44BB33FF44BB33FF44BB33FF44BB + 33FF44BB33FF44BB33FF44BB33FF49C038FF109500CCFFFFFF00FFFFFF001198 + 00CC67DE56FF66DD55FF65DC54FF64DB53FF63DA52FF61D850FF60D74FFF5FD6 + 4EFF5ED54DFF44BB33FF44BB33FF50C73FFF59D048FF58CF47FF57CE46FF56CD + 45FF55CC44FF54CB43FF53CA42FF52C941FF119800CCFFFFFF00FFFFFF00119A + 0099119A00CC119A00CC119A00CC119A00CC119A00CC119A00CC119A00CC119A + 00CC62D951FF45BC34FF45BC34FF51C840FF119A00CC119A00CC119A00CC119A + 00CC119A00CC119A00CC119A00CC119A00CC119A0099FFFFFF00FFFFFF00119A + 0000119B0000119B0000119B0000119B0000119B0000119B0000129C0000129D + 00CC66DD55FF47BE36FF47BE36FF55CC44FF129D00CC129C0000119B0000119B + 0000119B0000119B0000119B0000119B0000119A0000FFFFFF00FFFFFF00119A + 0000119B0000119B0000119B0000119B0000119B0000129C0000129F0000129F + 00CC6BE25AFF4CC33BFF4CC33BFF5AD149FF129F00CC129F0000129C0000119B + 0000119B0000119B0000119B0000119B0000119A0000FFFFFF00FFFFFF00119A + 0000119B0000119B0000119B0000119B0000129D000013A2000013A2000013A2 + 00CC6FE65EFF52C941FF52C941FF5FD64EFF13A200CC13A2000013A20000129D + 0000119B0000119B0000119B0000119B0000119A0000FFFFFF00FFFFFF00119A + 0000119B0000119B0000119B0000129E000013A4000013A4000013A4000013A4 + 00CC72E961FF58CF47FF58CF47FF64DB53FF13A400CC13A4000013A4000013A4 + 0000129E0000119B0000119B0000119B0000119A0000FFFFFF00FFFFFF00119A + 0000119B0000119B0000129E000014A5000014A5000014A5000014A5000014A5 + 00CC75EC64FF5DD44CFF5DD44CFF68DF57FF14A500CC14A5000014A5000014A5 + 000014A50000129E0000119B0000119B0000119A0000FFFFFF00FFFFFF000D74 + 0000119B0000129E000014A7000014A7000014A7000014A7000014A7000014A7 + 00CC76ED65FF62D951FF62D951FF6CE35BFF14A700CC14A7000014A7000014A7 + 000014A7000014A70000129E0000119B0000119A0000FFFFFF00FFFFFF000000 + 00000000000000000000107F000015A9000015A9000015A9000015A9000015A9 + 00CC77EE66FF77EE66FF76ED65FF76ED65FF15A900CC15A9000015A9000015A9 + 000015A90000107F00000000000000000000094D0000FFFFFF00FFFFFF000000 + 0000000000000000000000000000107F000015A9000015A9000015A9000015AA + 009915AA00CC15AA00CC15AA00CC15AA00CC15AA009915A9000015A9000015A9 + 0000107F000000000000000000000000000000000000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + OnClick = SpeedButton1Click + end + object SpeedButton2: TSpeedButton + Left = 24 + Height = 33 + Top = 272 + Width = 35 + Glyph.Data = { + 36090000424D3609000000000000360000002800000018000000180000000100 + 2000000000000009000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000080000 + 0011000000190000001A0000001A0000001A0000001A0000001A0000001A0000 + 001A0000001A0000001A0000001A0000001A0000001A0000001A0000001A0000 + 001A0000001A0000001A0000001A000000170000000E00000007000000100000 + 55A000006DCC00006DCC00006DCC00006DCC00006DCC00006DCC00006DCC0000 + 6DCC00006DCC00006DCC00006DCC00006DCC00006DCC00006DCC00006DCC0000 + 6DCC00006DCC00006DCC00006DCC00006DCC0000559F0000000E000022000000 + 86CC7777FFFF6E6EF6FF6D6DF5FF6B6BF3FF6666EDFF5E5EE5FF5656DAFF4C4C + D0FF4242C5FF3939BEFF3030BCFF2828C0FF2020C9FF1A1AD3FF1414DBFF1111 + DDFF1111DDFF1111DDFF1111DDFF1111DDFF000086CC00002200000091000000 + 91CC7777FFFF6666EEFF6666EEFF6666EEFF6464ECFF5F5FE5FF5858DDFF5050 + D4FF4747CBFF3F3FC3FF3838BDFF3030BCFF2828C0FF2020C9FF1A1AD3FF1414 + DBFF1111DDFF1111DDFF1111DDFF1111DDFF000091CC0000910000009A000000 + 9ACC7777FFFF6666EEFF6666EEFF6666EEFF6666EEFF6464ECFF5F5FE5FF5858 + DDFF5050D4FF4747CBFF3F3FC3FF3838BDFF3030BCFF2828C0FF2020C9FF1A1A + D3FF1414DBFF1111DDFF1111DDFF1111DDFF00009ACC00009A000000A3000000 + A3CC7777FFFF7777FFFF7777FFFF7777FFFF7777FFFF7777FFFF7777FFFF7777 + FFFF7777FFFF7575FDFF7070F7FF6969EFFF5F5FE6FF5353DDFF4545D7FF3636 + D6FF2727D9FF1A1ADDFF1313DEFF1111DDFF0000A3CC0000A3000000A7000000 + A8990000A9CC0000A9CC0000A9CC0000A9CC0000A9CC0000A9CC0000A9CC0000 + A9CC0000A9CC0000A9CC0000A9CC0000A9CC0000A9CC0000A9CC0000A9CC0000 + A9CC0000A9CC0000A9CC0000A9CC0000A9CC0000A8990000A700FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + OnClick = SpeedButton2Click + end + object Label22: TLabel + Left = 96 + Height = 25 + Top = 280 + Width = 47 + Caption = 'Bump' + end + end + object GeneralSettingsGb: TGroupBox + Left = 176 + Height = 456 + Top = 16 + Width = 278 + Caption = 'General Settings' + ClientHeight = 426 + ClientWidth = 274 + ParentBackground = False + ParentColor = False + TabOrder = 1 + object SlowSnapCb: TCheckBox + Left = 16 + Height = 29 + Hint = 'Set the Snap Around Mode'#13#10'SlowSnap prevents twitchy behavior'#13#10'when wrapping at start or end of ranges' + Top = 216 + Width = 103 + Caption = 'SlowSnap' + Checked = True + ParentShowHint = False + ShowHint = True + State = cbChecked + TabOrder = 0 + OnChange = SlowSnapCbChange + end + object KnobTypeCb: TComboBox + Left = 16 + Height = 33 + Hint = 'Range is an arbitrary range'#13#10'Sector uses Sector Divisions' + Top = 32 + Width = 248 + ItemHeight = 25 + ItemIndex = 0 + Items.Strings = ( + 'User Range - ktRange' + 'Sector Positions - ktSector' + ) + ParentShowHint = False + ReadOnly = True + ShowHint = True + TabOrder = 1 + Text = 'User Range - ktRange' + OnChange = KnobTypeCbChange + end + object Label13: TLabel + Left = 16 + Height = 25 + Top = 8 + Width = 114 + Caption = 'Set Knob Type' + end + object MouseWheelSpeedTB: TBCTrackbarUpdown + Left = 16 + Height = 36 + Hint = '0 - Mouse Wheel Disabled'#13#10'1 - Slowest/Highest Resolution'#13#10'255 - Fastest/Lowest Resolution' + Top = 94 + Width = 85 + AllowNegativeValues = False + BarExponent = 1 + Increment = 1 + LongTimeInterval = 400 + MinValue = 0 + MaxValue = 255 + OnChange = MouseWheelSpeedTBChange + Value = 50 + ShortTimeInterval = 100 + Background.Color = clWindow + Background.Gradient1.StartColor = clWhite + Background.Gradient1.EndColor = clBlack + Background.Gradient1.GradientType = gtLinear + Background.Gradient1.Point1XPercent = 0 + Background.Gradient1.Point1YPercent = 0 + Background.Gradient1.Point2XPercent = 0 + Background.Gradient1.Point2YPercent = 100 + Background.Gradient2.StartColor = clWhite + Background.Gradient2.EndColor = clBlack + Background.Gradient2.GradientType = gtLinear + Background.Gradient2.Point1XPercent = 0 + Background.Gradient2.Point1YPercent = 0 + Background.Gradient2.Point2XPercent = 0 + Background.Gradient2.Point2YPercent = 100 + Background.Gradient1EndPercent = 35 + Background.Style = bbsColor + ButtonBackground.Gradient1.StartColor = clBtnShadow + ButtonBackground.Gradient1.EndColor = clBtnFace + ButtonBackground.Gradient1.GradientType = gtLinear + ButtonBackground.Gradient1.Point1XPercent = 0 + ButtonBackground.Gradient1.Point1YPercent = -50 + ButtonBackground.Gradient1.Point2XPercent = 0 + ButtonBackground.Gradient1.Point2YPercent = 50 + ButtonBackground.Gradient2.StartColor = clBtnFace + ButtonBackground.Gradient2.EndColor = clBtnShadow + ButtonBackground.Gradient2.GradientType = gtLinear + ButtonBackground.Gradient2.Point1XPercent = 0 + ButtonBackground.Gradient2.Point1YPercent = 50 + ButtonBackground.Gradient2.Point2XPercent = 0 + ButtonBackground.Gradient2.Point2YPercent = 150 + ButtonBackground.Gradient1EndPercent = 50 + ButtonBackground.Style = bbsGradient + ButtonDownBackground.Color = clBtnShadow + ButtonDownBackground.Gradient1.StartColor = clWhite + ButtonDownBackground.Gradient1.EndColor = clBlack + ButtonDownBackground.Gradient1.GradientType = gtLinear + ButtonDownBackground.Gradient1.Point1XPercent = 0 + ButtonDownBackground.Gradient1.Point1YPercent = 0 + ButtonDownBackground.Gradient1.Point2XPercent = 0 + ButtonDownBackground.Gradient1.Point2YPercent = 100 + ButtonDownBackground.Gradient2.StartColor = clWhite + ButtonDownBackground.Gradient2.EndColor = clBlack + ButtonDownBackground.Gradient2.GradientType = gtLinear + ButtonDownBackground.Gradient2.Point1XPercent = 0 + ButtonDownBackground.Gradient2.Point1YPercent = 0 + ButtonDownBackground.Gradient2.Point2XPercent = 0 + ButtonDownBackground.Gradient2.Point2YPercent = 100 + ButtonDownBackground.Gradient1EndPercent = 35 + ButtonDownBackground.Style = bbsColor + Border.Color = clWindowText + Border.Style = bboSolid + Rounding.RoundX = 1 + Rounding.RoundY = 1 + Font.Color = clWindowText + Font.Name = 'Arial' + HasTrackBar = True + ArrowColor = clBtnText + ParentShowHint = False + ShowHint = True + TabOrder = 2 + TabStop = True + UseDockManager = False + end + object Label14: TLabel + Left = 16 + Height = 25 + Top = 72 + Width = 193 + Caption = 'Set Mouse Wheel Speed' + end + object ResetGeneralBtn: TBitBtn + Left = 16 + Height = 45 + Top = 371 + Width = 249 + Caption = 'Reset General' + Glyph.Data = { + 36090000424D3609000000000000360000002800000018000000180000000100 + 2000000000000009000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 00030000000900000011000000180000001A0000001900000019000000180000 + 00160000001400000012000000100000000E0000000C0000000A000000080000 + 00060000000400000002000000010000000000000000FFFFFF00FFFFFF000000 + 000500000012000000220505054A060606660404046602020266010101660000 + 00660000006600000045000000200000001C00000017000000130000000F0000 + 000B0000000700000004000000020000000000000000FFFFFF00FFFFFF000000 + 0000080808000F0F0F3410101066DEDEDEFFCDCDCDFFCDCDCDFFCDCDCDFFCDCD + CDFFCDCDCDFF0101016600000034000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF002323 + 2300222222341D1D1D66EFEFEFFFDFDFDFFFDFDFDFFFBDBDBDFFBEBEBEFFBFBF + BFFFC1C1C1FFCFCFCFFF04040466020202340404040003030300000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF003232 + 32342C2C2C66EFEFEFFFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFBFBFBFFFC1C1 + C1FFC2C2C2FFC3C3C3FFD1D1D1FF09090966070707340B0B0B000D0D0D000606 + 06000000000000000000000000000000000000000000FFFFFF00FFFFFF003D3D + 3D66EFEFEFFFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFC2C2 + C2FFC3C3C3FFC5C5C5FFC6C6C6FFD4D4D4FF0E0E0E660C0C0C34111111001717 + 17001803710008012600000000000000000000000000FFFFFF00FFFFFF004B4B + 4B66EFEFEFFFE8E8E8FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5 + E5FFC5C5C5FFC6C6C6FFC7C7C7FFC9C9C9FFD7D7D7FF14141466121212341717 + 170020039600200298001902740011014E0011014F00FFFFFF00FFFFFF005656 + 563453535366F0F0F0FFE9E9E9FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7 + E7FFE7E7E7FFC7C7C7FFC9C9C9FFCACACAFFCCCCCCFFD9D9D9FF1B1B1B661919 + 1934200396002002980021029A0021029C0021029E00FFFFFF00FFFFFF005757 + 57005C5C5C345A5A5A66F1F1F1FFEBEBEBFFE9E9E9FFE9E9E9FFE9E9E9FFE9E9 + E9FFE9E9E9FFE9E9E9FFCACACAFFCCCCCCFFCECECEFFCFCFCFFFDCDCDCFF2002 + 98982003974D2002980021029A0021029C0021029E00FFFFFF00FFFFFF005757 + 57005D5D5D006262623460606066F3F3F3FFEDEDEDFFEBEBEBFFEBEBEBFFEBEB + EBFFEBEBEBFFEBEBEBFFEBEBEBFFCECECEFFCFCFCFFFD1D1D1FF8D7CD1FFA08F + E4FF210299962102994C21029A0021029C0021029E00FFFFFF00FFFFFF005757 + 57005D5D5D00636363006868683466666666F4F4F4FFEFEFEFFFEEEEEEFFEEEE + EEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFD1D1D1FF8D7CD1FF8F7ED3FF907F + D4FFA291E6FF21029B9421029B4B21029C0021029E00FFFFFF00FFFFFF005757 + 57005D5D5D0063636300696969006E6E6E346C6C6C66F5F5F5FFF1F1F1FFF0F0 + F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFAE9DE7FF8F7ED3FF907FD4FF9180 + D5FF9382D7FFA594E9FF21029D9221029C4A21029E00FFFFFF00FFFFFF005757 + 57005D5D5D0063636300696969006F6F6F007474743472727266F6F6F6FFF4F4 + F4FFF3F3F3FFF3F3F3FFF3F3F3FFAE9DE7FFAF9EE8FFB1A0E9FF9180D5FF9382 + D7FF9483D8FF9584D9FFA796EBFF22029F9121029E49FFFFFF00FFFFFF005757 + 57005D5D5D0063636300696969006F6F6F00757575007979793478787866F8F8 + F8FFF6F6F6FFF5F5F5FFAE9DE7FFAF9EE8FFB1A0E9FFB2A1E9FFB3A2EAFF9483 + D8FF9584D9FF9685DAFF9786DBFFA998EDFF2202A08FFFFFFF00FFFFFF005757 + 57005D5D5D0063636300696969006F6F6F00757575007A7A7A007F7F7F347D7D + 7D66F9F9F9FFB2A1ECFFAF9EE8FFB1A0E9FFB2A1E9FFB3A2EAFFB4A3EBFFB5A4 + EBFF9685DAFF9786DBFF9887DCFFAA99EEFF2202A38CFFFFFF00FFFFFF005757 + 57005D5D5D0063636300696969006F6F6F00757575007A7A7A00808080008484 + 84342402AE80C1B0FAFFB5A4EDFFB2A1E9FFB3A2EAFFB4A3EBFFB5A4EBFFB6A5 + ECFFB7A6ECFF9887DCFFAA99EEFF2302A6892302A545FFFFFF00FFFFFF005757 + 57005D5D5D0063636300696969006F6F6F00757575007A7A7A00808080008585 + 85002502B0402502B07FC3B2FBFFB7A6EFFFB4A3EBFFB5A4EBFFB6A5ECFFB7A6 + ECFFB8A7EDFFCAB9FEFF2402A9852302A8442302A500FFFFFF00FFFFFF005757 + 57005D5D5D0063636300696969006F6F6F00757575007A7A7A00808080008585 + 85002502B0002502B1402502B17EC6B5FCFFBAA9F0FFB6A5ECFFB7A6ECFFB8A7 + EDFFCAB9FEFF2402AC822402AB422302A8002302A500FFFFFF00FFFFFF001616 + 16004646460063636300696969006F6F6F00757575007A7A7A00808080008585 + 85002502B0002502B1002502B23F2502B27DC8B7FDFFBCABF1FFB8A7EDFFCAB9 + FEFF2502AF7F2402AE402402AB002302A8002302A500FFFFFF00FFFFFF000000 + 000000000000191919004F4F4F006F6F6F00757575007A7A7A00808080008585 + 85002502B0002502B1002502B2002502B43E2502B37CC9B8FEFFCAB9FEFF2502 + B27E2502B1402402AE002402AB002302A8002302A500FFFFFF00FFFFFF000000 + 00000000000000000000000000001C1C1C00585858007A7A7A00808080008585 + 85002502B0002502B1002502B2002502B4002602B53E2602B47B2502B47B2502 + B33E2502B1002402AE002402AB002302A8002302A500FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + GlyphShowMode = gsmAlways + OnClick = ResetGeneralBtnClick + TabOrder = 3 + end + object StartFromBottomCb: TCheckBox + Left = 16 + Height = 29 + Hint = 'Draw Pointer From Top' + Top = 249 + Width = 174 + Caption = 'Start From Bottom' + Checked = True + ParentShowHint = False + ShowHint = True + State = cbChecked + TabOrder = 4 + OnChange = StartFromBottomCbChange + end + object ReverseScaleCb: TCheckBox + Left = 16 + Height = 29 + Hint = 'Flips scale, can also sometimes be done in tRange mode' + Top = 282 + Width = 131 + Caption = 'Reverse Scale' + TabOrder = 5 + OnChange = ReverseScaleCbChange + end + object MouseWheelWrapCb: TCheckBox + Left = 16 + Height = 29 + Hint = 'If checked allow the mouse wheel to '#13#10'cycle around over start and end' + Top = 316 + Width = 181 + Caption = 'Mouse Wheel Wrap' + ParentShowHint = False + ShowHint = True + TabOrder = 6 + OnChange = MouseWheelWrapCbChange + end + object Label9: TLabel + Left = 16 + Height = 25 + Top = 128 + Width = 214 + Caption = 'No Effect in ktSector mode' + end + end + object DVAPGb: TGroupBox + Left = 640 + Height = 456 + Top = 16 + Width = 320 + Caption = 'Data Values and Properties' + ClientHeight = 426 + ClientWidth = 316 + TabOrder = 2 + object ValueLbl: TLabel + Left = 184 + Height = 25 + Top = 54 + Width = 40 + Caption = ' ' + end + object Label2: TLabel + Left = 184 + Height = 25 + Top = 78 + Width = 40 + Caption = ' ' + end + object Label3: TLabel + Left = 184 + Height = 25 + Top = 126 + Width = 40 + Caption = ' ' + end + object Label4: TLabel + Left = 184 + Height = 25 + Top = 150 + Width = 40 + Caption = ' ' + end + object Label5: TLabel + Left = 184 + Height = 25 + Top = 174 + Width = 40 + Caption = ' ' + end + object Label6: TLabel + Left = 184 + Height = 25 + Top = 198 + Width = 40 + Caption = ' ' + end + object MouseWheelSpeedLbl: TLabel + Left = 184 + Height = 25 + Top = 104 + Width = 40 + Caption = ' ' + end + object Label7: TLabel + Left = 8 + Height = 25 + Top = 54 + Width = 42 + Caption = 'Value' + end + object Label10: TLabel + Left = 8 + Height = 25 + Top = 78 + Width = 90 + Caption = 'WheelDelta' + end + object Label15: TLabel + Left = 8 + Height = 25 + Top = 104 + Width = 99 + Caption = 'WheelSpeed' + end + object Label16: TLabel + Left = 8 + Height = 25 + Top = 126 + Width = 60 + Caption = 'OnClick' + end + object Label17: TLabel + Left = 8 + Height = 25 + Top = 150 + Width = 88 + Caption = 'OnDblClick' + end + object Label18: TLabel + Left = 8 + Height = 25 + Top = 174 + Width = 136 + Caption = 'Mouse Up/Down' + end + object Label19: TLabel + Left = 8 + Height = 25 + Top = 198 + Width = 150 + Caption = 'Mouse Enter/Leave' + end + object Label20: TLabel + Left = 8 + Height = 25 + Top = 222 + Width = 72 + Caption = 'MinValue' + end + object Label21: TLabel + Left = 8 + Height = 25 + Top = 246 + Width = 75 + Caption = 'MaxValue' + end + object MinValueLbl: TLabel + Left = 184 + Height = 25 + Top = 222 + Width = 72 + Caption = 'MinValue' + end + object MaxValueLbl: TLabel + Left = 184 + Height = 25 + Top = 246 + Width = 75 + Caption = 'MaxValue' + end + object Label24: TLabel + Left = 8 + Height = 25 + Top = 270 + Width = 82 + Caption = 'StartAngle' + end + object Label25: TLabel + Left = 8 + Height = 25 + Top = 294 + Width = 76 + Caption = 'EndAngle' + end + object StartAngleLbl: TLabel + Left = 184 + Height = 25 + Top = 270 + Width = 82 + Caption = 'StartAngle' + end + object EndAngleLbl: TLabel + Left = 184 + Height = 25 + Top = 294 + Width = 76 + Caption = 'EndAngle' + end + object CDVDBtn: TBitBtn + Left = 16 + Height = 45 + Top = 371 + Width = 266 + Caption = 'Clear Data Values Display' + Glyph.Data = { + 36090000424D3609000000000000360000002800000018000000180000000100 + 2000000000000009000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + 00030000000900000011000000180000001A0000001900000019000000180000 + 00160000001400000012000000100000000E0000000C0000000A000000080000 + 00060000000400000002000000010000000000000000FFFFFF00FFFFFF000000 + 000500000012000000220505054A060606660404046602020266010101660000 + 00660000006600000045000000200000001C00000017000000130000000F0000 + 000B0000000700000004000000020000000000000000FFFFFF00FFFFFF000000 + 0000080808000F0F0F3410101066DEDEDEFFCDCDCDFFCDCDCDFFCDCDCDFFCDCD + CDFFCDCDCDFF0101016600000034000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF002323 + 2300222222341D1D1D66EFEFEFFFDFDFDFFFDFDFDFFFBDBDBDFFBEBEBEFFBFBF + BFFFC1C1C1FFCFCFCFFF04040466020202340404040003030300000000000000 + 00000000000000000000000000000000000000000000FFFFFF00FFFFFF003232 + 32342C2C2C66EFEFEFFFE1E1E1FFE1E1E1FFE1E1E1FFE1E1E1FFBFBFBFFFC1C1 + C1FFC2C2C2FFC3C3C3FFD1D1D1FF09090966070707340B0B0B000D0D0D000606 + 06000000000000000000000000000000000000000000FFFFFF00FFFFFF003D3D + 3D66EFEFEFFFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFC2C2 + C2FFC3C3C3FFC5C5C5FFC6C6C6FFD4D4D4FF0E0E0E660C0C0C34111111001717 + 17001803710008012600000000000000000000000000FFFFFF00FFFFFF004B4B + 4B66EFEFEFFFE8E8E8FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5 + E5FFC5C5C5FFC6C6C6FFC7C7C7FFC9C9C9FFD7D7D7FF14141466121212341717 + 170020039600200298001902740011014E0011014F00FFFFFF00FFFFFF005656 + 563453535366F0F0F0FFE9E9E9FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7 + E7FFE7E7E7FFC7C7C7FFC9C9C9FFCACACAFFCCCCCCFFD9D9D9FF1B1B1B661919 + 1934200396002002980021029A0021029C0021029E00FFFFFF00FFFFFF005757 + 57005C5C5C345A5A5A66F1F1F1FFEBEBEBFFE9E9E9FFE9E9E9FFE9E9E9FFE9E9 + E9FFE9E9E9FFE9E9E9FFCACACAFFCCCCCCFFCECECEFFCFCFCFFFDCDCDCFF2002 + 98982003974D2002980021029A0021029C0021029E00FFFFFF00FFFFFF005757 + 57005D5D5D006262623460606066F3F3F3FFEDEDEDFFEBEBEBFFEBEBEBFFEBEB + EBFFEBEBEBFFEBEBEBFFEBEBEBFFCECECEFFCFCFCFFFD1D1D1FF8D7CD1FFA08F + E4FF210299962102994C21029A0021029C0021029E00FFFFFF00FFFFFF005757 + 57005D5D5D00636363006868683466666666F4F4F4FFEFEFEFFFEEEEEEFFEEEE + EEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFD1D1D1FF8D7CD1FF8F7ED3FF907F + D4FFA291E6FF21029B9421029B4B21029C0021029E00FFFFFF00FFFFFF005757 + 57005D5D5D0063636300696969006E6E6E346C6C6C66F5F5F5FFF1F1F1FFF0F0 + F0FFF0F0F0FFF0F0F0FFF0F0F0FFF0F0F0FFAE9DE7FF8F7ED3FF907FD4FF9180 + D5FF9382D7FFA594E9FF21029D9221029C4A21029E00FFFFFF00FFFFFF005757 + 57005D5D5D0063636300696969006F6F6F007474743472727266F6F6F6FFF4F4 + F4FFF3F3F3FFF3F3F3FFF3F3F3FFAE9DE7FFAF9EE8FFB1A0E9FF9180D5FF9382 + D7FF9483D8FF9584D9FFA796EBFF22029F9121029E49FFFFFF00FFFFFF005757 + 57005D5D5D0063636300696969006F6F6F00757575007979793478787866F8F8 + F8FFF6F6F6FFF5F5F5FFAE9DE7FFAF9EE8FFB1A0E9FFB2A1E9FFB3A2EAFF9483 + D8FF9584D9FF9685DAFF9786DBFFA998EDFF2202A08FFFFFFF00FFFFFF005757 + 57005D5D5D0063636300696969006F6F6F00757575007A7A7A007F7F7F347D7D + 7D66F9F9F9FFB2A1ECFFAF9EE8FFB1A0E9FFB2A1E9FFB3A2EAFFB4A3EBFFB5A4 + EBFF9685DAFF9786DBFF9887DCFFAA99EEFF2202A38CFFFFFF00FFFFFF005757 + 57005D5D5D0063636300696969006F6F6F00757575007A7A7A00808080008484 + 84342402AE80C1B0FAFFB5A4EDFFB2A1E9FFB3A2EAFFB4A3EBFFB5A4EBFFB6A5 + ECFFB7A6ECFF9887DCFFAA99EEFF2302A6892302A545FFFFFF00FFFFFF005757 + 57005D5D5D0063636300696969006F6F6F00757575007A7A7A00808080008585 + 85002502B0402502B07FC3B2FBFFB7A6EFFFB4A3EBFFB5A4EBFFB6A5ECFFB7A6 + ECFFB8A7EDFFCAB9FEFF2402A9852302A8442302A500FFFFFF00FFFFFF005757 + 57005D5D5D0063636300696969006F6F6F00757575007A7A7A00808080008585 + 85002502B0002502B1402502B17EC6B5FCFFBAA9F0FFB6A5ECFFB7A6ECFFB8A7 + EDFFCAB9FEFF2402AC822402AB422302A8002302A500FFFFFF00FFFFFF001616 + 16004646460063636300696969006F6F6F00757575007A7A7A00808080008585 + 85002502B0002502B1002502B23F2502B27DC8B7FDFFBCABF1FFB8A7EDFFCAB9 + FEFF2502AF7F2402AE402402AB002302A8002302A500FFFFFF00FFFFFF000000 + 000000000000191919004F4F4F006F6F6F00757575007A7A7A00808080008585 + 85002502B0002502B1002502B2002502B43E2502B37CC9B8FEFFCAB9FEFF2502 + B27E2502B1402402AE002402AB002302A8002302A500FFFFFF00FFFFFF000000 + 00000000000000000000000000001C1C1C00585858007A7A7A00808080008585 + 85002502B0002502B1002502B2002502B4002602B53E2602B47B2502B47B2502 + B33E2502B1002402AE002402AB002302A8002302A500FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + GlyphShowMode = gsmAlways + OnClick = CDVDBtnClick + TabOrder = 0 + end + object Label8: TLabel + Left = 184 + Height = 25 + Top = 32 + Width = 40 + Caption = ' ' + end + object Label28: TLabel + Left = 8 + Height = 25 + Top = 32 + Width = 80 + Caption = 'MouseXY ' + end + object Label1: TLabel + Left = 8 + Height = 25 + Top = 10 + Width = 79 + Caption = 'KnobType' + end + object KnobTypeLbl: TLabel + Left = 184 + Height = 25 + Top = 10 + Width = 40 + Caption = ' ' + end + end + object RangesGb: TGroupBox + Left = 968 + Height = 456 + Top = 16 + Width = 288 + Caption = 'Ranges' + ClientHeight = 426 + ClientWidth = 284 + ParentBackground = False + ParentColor = False + TabOrder = 3 + object Label29: TLabel + Left = 8 + Height = 25 + Top = 16 + Width = 72 + Caption = 'MinValue' + end + object Label30: TLabel + Left = 8 + Height = 25 + Top = 54 + Width = 75 + Caption = 'MaxValue' + end + object Label31: TLabel + Left = 8 + Height = 25 + Top = 88 + Width = 82 + Caption = 'StartAngle' + end + object Label32: TLabel + Left = 8 + Height = 25 + Top = 126 + Width = 76 + Caption = 'EndAngle' + end + object MinValueEdt: TEdit + Left = 128 + Height = 33 + Top = 8 + Width = 113 + TabOrder = 0 + Text = '0.0' + OnKeyDown = MinValueEdtKeyDown + end + object SetMinValueBtn: TSpeedButton + Left = 240 + Height = 33 + Hint = 'Set MinValue Property' + Top = 8 + Width = 35 + Glyph.Data = { + 36090000424D3609000000000000360000002800000018000000180000000100 + 2000000000000009000064000000640000000000000000000000FFFFFF003535 + 352B55555503FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003434342C3333 + 33FF343539EA42516ABC4762822FFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00555555033435 + 39EA333333FF333434FF4C668FFC5F8DD4AA618BD54200FFFF01FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004151 + 6ABC333434FF4C668EFF5F8DD3FF5F8DD3FF5F8DD3FF5E8CD3D84E7DC55CFFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00475C + 7D2F4C668FFC5F8DD3FF5F8DD3FF5F8DD3FF5F8DD3FF598DD0CC2674AEF72D5B + A089FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005F8ED2AB5F8DD3FF5F8DD3FF5F8DD3FF5891D2CC16A2C4F71C8BB7FF2473 + ACFF2B5BA089FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00618BD5425F8DD3FF5F8DD3FF5696D5CC07D3DBF70DBCCFFF14A3C3FF1C8B + B8FF2473ACFF2D5BA089FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF005F8DD3D55894D5CC03FAFDF700EAEAFF04D4DBFF0CBCCFFF14A3 + C3FF1C8BB8FF2473ACFF2B59A089FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004E80C25C2092C1F80EC9E0FF00FFFFFF00EAEAFF04D4DAFF0DBC + CFFF14A3C3FF1C8BB8FF2372ACFF2D5BA283FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF002B5A9F821D92C0FF0ECAE0FF00FEFEFF00EAEAFF05D4 + DBFF0CBCCFFF14A3C3FF1C8BB8FF2473ACFF2D5BA289FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF002D5AA1821D92C0FF0FCAE1FF00FEFEFF00EA + EAFF05D4DBFF0CBBCFFF14A4C4FF1C8BB8FF2472ACFF2D5BA089FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002D5AA1821D92C0FF0ECAE0FF00FE + FEFF00EAEAFF04D4DBFF0CBBCFFF14A4C4FF1C8BB7FF2473ACFF2B59A089FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002B5AA0831D92C1FF0ECA + E0FF00FFFFFF00EAEAFF04D4DBFF0CBBCFFF14A4C4FF1C8BB8FF2473ACFF2D5B + A083FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002B5AA1821D92 + C0FF0EC9E0FF00FFFFFF00EAEAFF05D4DBFF0CBCCFFF14A3C3FF1B8BB7FC6C92 + ADC499999989FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002B5A + A1821D91C0FF0ECAE0FF00FEFEFF00EAEAFF04D3DAFF0CBCCFFC7ABECEC4C2C2 + C2FFAEAEAEFF99999989FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002B5A9F821D92C0FF0FCAE1FF00FEFEFF00EAEAFC88EAEEC5EBEBEBFFD6D6 + D6FFC2C2C2FFAEAEAEFF5D5DA073FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF002B5AA1821D92C0FF0EC9E0FC70EAEAC4EAEAEAFFFFFFFFFFEBEB + EBFFD7D7D7FF6F6FC7C70000BBFB0000AB89FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF002D5BA0836BA1B6C4C1C1C1FFD6D6D6FFEBEBEBFFFFFF + FFFF8585EBC40000DEFB0000CDFF0000BCFF0000AB89FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0099999982AEAEAEFFC2C2C2FFD6D6D6FF8383 + ECC70000FEFC0000F0FF0000DEFF0000CDFF0000BBDD0000AF10FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0098989881AEAEAEFF6F6FC5C60000 + DCFB0000ECFF0000FDFF0000F0FF0000DFE00000C921FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005D5DA0730000BAFC0000 + CBFF0000DCFF0000ECFF0000FDDD0000EE1EFFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000AB820000 + BBFF0000CBFF0000DCE00000F021FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + AB820000BBE00000D121FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000AF10FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + OnClick = SetMinValueBtnClick + ShowHint = True + ParentShowHint = False + end + object MaxValueEdt: TEdit + Left = 128 + Height = 33 + Top = 45 + Width = 113 + TabOrder = 1 + Text = '360.0' + OnKeyDown = MaxValueEdtKeyDown + end + object SetMaxValueBtn: TSpeedButton + Left = 240 + Height = 33 + Hint = 'Set MaxValue Property' + Top = 40 + Width = 35 + Glyph.Data = { + 36090000424D3609000000000000360000002800000018000000180000000100 + 2000000000000009000064000000640000000000000000000000FFFFFF003535 + 352B55555503FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003434342C3333 + 33FF343539EA42516ABC4762822FFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00555555033435 + 39EA333333FF333434FF4C668FFC5F8DD4AA618BD54200FFFF01FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004151 + 6ABC333434FF4C668EFF5F8DD3FF5F8DD3FF5F8DD3FF5E8CD3D84E7DC55CFFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00475C + 7D2F4C668FFC5F8DD3FF5F8DD3FF5F8DD3FF5F8DD3FF598DD0CC2674AEF72D5B + A089FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005F8ED2AB5F8DD3FF5F8DD3FF5F8DD3FF5891D2CC16A2C4F71C8BB7FF2473 + ACFF2B5BA089FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00618BD5425F8DD3FF5F8DD3FF5696D5CC07D3DBF70DBCCFFF14A3C3FF1C8B + B8FF2473ACFF2D5BA089FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF005F8DD3D55894D5CC03FAFDF700EAEAFF04D4DBFF0CBCCFFF14A3 + C3FF1C8BB8FF2473ACFF2B59A089FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004E80C25C2092C1F80EC9E0FF00FFFFFF00EAEAFF04D4DAFF0DBC + CFFF14A3C3FF1C8BB8FF2372ACFF2D5BA283FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF002B5A9F821D92C0FF0ECAE0FF00FEFEFF00EAEAFF05D4 + DBFF0CBCCFFF14A3C3FF1C8BB8FF2473ACFF2D5BA289FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF002D5AA1821D92C0FF0FCAE1FF00FEFEFF00EA + EAFF05D4DBFF0CBBCFFF14A4C4FF1C8BB8FF2472ACFF2D5BA089FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002D5AA1821D92C0FF0ECAE0FF00FE + FEFF00EAEAFF04D4DBFF0CBBCFFF14A4C4FF1C8BB7FF2473ACFF2B59A089FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002B5AA0831D92C1FF0ECA + E0FF00FFFFFF00EAEAFF04D4DBFF0CBBCFFF14A4C4FF1C8BB8FF2473ACFF2D5B + A083FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002B5AA1821D92 + C0FF0EC9E0FF00FFFFFF00EAEAFF05D4DBFF0CBCCFFF14A3C3FF1B8BB7FC6C92 + ADC499999989FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002B5A + A1821D91C0FF0ECAE0FF00FEFEFF00EAEAFF04D3DAFF0CBCCFFC7ABECEC4C2C2 + C2FFAEAEAEFF99999989FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002B5A9F821D92C0FF0FCAE1FF00FEFEFF00EAEAFC88EAEEC5EBEBEBFFD6D6 + D6FFC2C2C2FFAEAEAEFF5D5DA073FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF002B5AA1821D92C0FF0EC9E0FC70EAEAC4EAEAEAFFFFFFFFFFEBEB + EBFFD7D7D7FF6F6FC7C70000BBFB0000AB89FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF002D5BA0836BA1B6C4C1C1C1FFD6D6D6FFEBEBEBFFFFFF + FFFF8585EBC40000DEFB0000CDFF0000BCFF0000AB89FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0099999982AEAEAEFFC2C2C2FFD6D6D6FF8383 + ECC70000FEFC0000F0FF0000DEFF0000CDFF0000BBDD0000AF10FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0098989881AEAEAEFF6F6FC5C60000 + DCFB0000ECFF0000FDFF0000F0FF0000DFE00000C921FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005D5DA0730000BAFC0000 + CBFF0000DCFF0000ECFF0000FDDD0000EE1EFFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000AB820000 + BBFF0000CBFF0000DCE00000F021FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + AB820000BBE00000D121FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000AF10FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + OnClick = SetMaxValueBtnClick + ShowHint = True + ParentShowHint = False + end + object StartAngleEdt: TEdit + Left = 128 + Height = 33 + Top = 80 + Width = 113 + TabOrder = 2 + Text = '30.0' + OnKeyDown = StartAngleEdtKeyDown + end + object SetStartAngleBtn: TSpeedButton + Left = 238 + Height = 33 + Hint = 'Set StartAngle Property' + Top = 80 + Width = 35 + Glyph.Data = { + 36090000424D3609000000000000360000002800000018000000180000000100 + 2000000000000009000064000000640000000000000000000000FFFFFF003535 + 352B55555503FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003434342C3333 + 33FF343539EA42516ABC4762822FFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00555555033435 + 39EA333333FF333434FF4C668FFC5F8DD4AA618BD54200FFFF01FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004151 + 6ABC333434FF4C668EFF5F8DD3FF5F8DD3FF5F8DD3FF5E8CD3D84E7DC55CFFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00475C + 7D2F4C668FFC5F8DD3FF5F8DD3FF5F8DD3FF5F8DD3FF598DD0CC2674AEF72D5B + A089FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005F8ED2AB5F8DD3FF5F8DD3FF5F8DD3FF5891D2CC16A2C4F71C8BB7FF2473 + ACFF2B5BA089FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00618BD5425F8DD3FF5F8DD3FF5696D5CC07D3DBF70DBCCFFF14A3C3FF1C8B + B8FF2473ACFF2D5BA089FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF005F8DD3D55894D5CC03FAFDF700EAEAFF04D4DBFF0CBCCFFF14A3 + C3FF1C8BB8FF2473ACFF2B59A089FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004E80C25C2092C1F80EC9E0FF00FFFFFF00EAEAFF04D4DAFF0DBC + CFFF14A3C3FF1C8BB8FF2372ACFF2D5BA283FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF002B5A9F821D92C0FF0ECAE0FF00FEFEFF00EAEAFF05D4 + DBFF0CBCCFFF14A3C3FF1C8BB8FF2473ACFF2D5BA289FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF002D5AA1821D92C0FF0FCAE1FF00FEFEFF00EA + EAFF05D4DBFF0CBBCFFF14A4C4FF1C8BB8FF2472ACFF2D5BA089FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002D5AA1821D92C0FF0ECAE0FF00FE + FEFF00EAEAFF04D4DBFF0CBBCFFF14A4C4FF1C8BB7FF2473ACFF2B59A089FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002B5AA0831D92C1FF0ECA + E0FF00FFFFFF00EAEAFF04D4DBFF0CBBCFFF14A4C4FF1C8BB8FF2473ACFF2D5B + A083FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002B5AA1821D92 + C0FF0EC9E0FF00FFFFFF00EAEAFF05D4DBFF0CBCCFFF14A3C3FF1B8BB7FC6C92 + ADC499999989FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002B5A + A1821D91C0FF0ECAE0FF00FEFEFF00EAEAFF04D3DAFF0CBCCFFC7ABECEC4C2C2 + C2FFAEAEAEFF99999989FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002B5A9F821D92C0FF0FCAE1FF00FEFEFF00EAEAFC88EAEEC5EBEBEBFFD6D6 + D6FFC2C2C2FFAEAEAEFF5D5DA073FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF002B5AA1821D92C0FF0EC9E0FC70EAEAC4EAEAEAFFFFFFFFFFEBEB + EBFFD7D7D7FF6F6FC7C70000BBFB0000AB89FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF002D5BA0836BA1B6C4C1C1C1FFD6D6D6FFEBEBEBFFFFFF + FFFF8585EBC40000DEFB0000CDFF0000BCFF0000AB89FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0099999982AEAEAEFFC2C2C2FFD6D6D6FF8383 + ECC70000FEFC0000F0FF0000DEFF0000CDFF0000BBDD0000AF10FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0098989881AEAEAEFF6F6FC5C60000 + DCFB0000ECFF0000FDFF0000F0FF0000DFE00000C921FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005D5DA0730000BAFC0000 + CBFF0000DCFF0000ECFF0000FDDD0000EE1EFFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000AB820000 + BBFF0000CBFF0000DCE00000F021FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + AB820000BBE00000D121FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000AF10FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + OnClick = SetStartAngleBtnClick + ShowHint = True + ParentShowHint = False + end + object EndAngleEdt: TEdit + Left = 128 + Height = 33 + Top = 118 + Width = 113 + TabOrder = 3 + Text = '330.0' + OnKeyDown = EndAngleEdtKeyDown + end + object SetEndAngleBtn: TSpeedButton + Left = 240 + Height = 33 + Hint = 'Set EndAngle Property' + Top = 118 + Width = 35 + Glyph.Data = { + 36090000424D3609000000000000360000002800000018000000180000000100 + 2000000000000009000064000000640000000000000000000000FFFFFF003535 + 352B55555503FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003434342C3333 + 33FF343539EA42516ABC4762822FFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00555555033435 + 39EA333333FF333434FF4C668FFC5F8DD4AA618BD54200FFFF01FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004151 + 6ABC333434FF4C668EFF5F8DD3FF5F8DD3FF5F8DD3FF5E8CD3D84E7DC55CFFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00475C + 7D2F4C668FFC5F8DD3FF5F8DD3FF5F8DD3FF5F8DD3FF598DD0CC2674AEF72D5B + A089FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005F8ED2AB5F8DD3FF5F8DD3FF5F8DD3FF5891D2CC16A2C4F71C8BB7FF2473 + ACFF2B5BA089FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00618BD5425F8DD3FF5F8DD3FF5696D5CC07D3DBF70DBCCFFF14A3C3FF1C8B + B8FF2473ACFF2D5BA089FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF005F8DD3D55894D5CC03FAFDF700EAEAFF04D4DBFF0CBCCFFF14A3 + C3FF1C8BB8FF2473ACFF2B59A089FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF004E80C25C2092C1F80EC9E0FF00FFFFFF00EAEAFF04D4DAFF0DBC + CFFF14A3C3FF1C8BB8FF2372ACFF2D5BA283FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF002B5A9F821D92C0FF0ECAE0FF00FEFEFF00EAEAFF05D4 + DBFF0CBCCFFF14A3C3FF1C8BB8FF2473ACFF2D5BA289FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF002D5AA1821D92C0FF0FCAE1FF00FEFEFF00EA + EAFF05D4DBFF0CBBCFFF14A4C4FF1C8BB8FF2472ACFF2D5BA089FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002D5AA1821D92C0FF0ECAE0FF00FE + FEFF00EAEAFF04D4DBFF0CBBCFFF14A4C4FF1C8BB7FF2473ACFF2B59A089FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002B5AA0831D92C1FF0ECA + E0FF00FFFFFF00EAEAFF04D4DBFF0CBBCFFF14A4C4FF1C8BB8FF2473ACFF2D5B + A083FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002B5AA1821D92 + C0FF0EC9E0FF00FFFFFF00EAEAFF05D4DBFF0CBCCFFF14A3C3FF1B8BB7FC6C92 + ADC499999989FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002B5A + A1821D91C0FF0ECAE0FF00FEFEFF00EAEAFF04D3DAFF0CBCCFFC7ABECEC4C2C2 + C2FFAEAEAEFF99999989FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF002B5A9F821D92C0FF0FCAE1FF00FEFEFF00EAEAFC88EAEEC5EBEBEBFFD6D6 + D6FFC2C2C2FFAEAEAEFF5D5DA073FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF002B5AA1821D92C0FF0EC9E0FC70EAEAC4EAEAEAFFFFFFFFFFEBEB + EBFFD7D7D7FF6F6FC7C70000BBFB0000AB89FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF002D5BA0836BA1B6C4C1C1C1FFD6D6D6FFEBEBEBFFFFFF + FFFF8585EBC40000DEFB0000CDFF0000BCFF0000AB89FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0099999982AEAEAEFFC2C2C2FFD6D6D6FF8383 + ECC70000FEFC0000F0FF0000DEFF0000CDFF0000BBDD0000AF10FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0098989881AEAEAEFF6F6FC5C60000 + DCFB0000ECFF0000FDFF0000F0FF0000DFE00000C921FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005D5DA0730000BAFC0000 + CBFF0000DCFF0000ECFF0000FDDD0000EE1EFFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000AB820000 + BBFF0000CBFF0000DCE00000F021FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + AB820000BBE00000D121FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF000000AF10FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + OnClick = SetEndAngleBtnClick + ShowHint = True + ParentShowHint = False + end + object ResetRangesBtn1: TBitBtn + Left = 3 + Height = 45 + Top = 371 + Width = 272 + Caption = 'Update All Range Value' + Glyph.Data = { + 36090000424D3609000000000000360000002800000018000000180000000100 + 20000000000000090000640000006400000000000000000000000000000E0000 + 0015000000190000001A00000019000000180000001600000014000000120000 + 00100000000E0000000C0000000A000000080000000600000004000000020000 + 00010000000000000000000000000000000000000000FFFFFF00000000150000 + 00FF01485FC00127346F0000002500000024000000210000001F0000001C0000 + 001900000015000000120000000F0000000C0000000900000006000000040000 + 00020000000000000000000000000000000000000000FFFFFF00000000030155 + 70AFB3DEEFFF4D8DA2D5014E67AB012F3B480000000500000004000000040000 + 0004000000030000000300000002000000020000000100000001000000010000 + 00000000000000000000000000000000000000000000FFFFFF00001C2500016A + 8B4367AAC3C6B3DEEFFF99CCDDFF00768DC1006E846200364100000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00005774000073 + 98000072977ACCEEFFFF55AABBFF55CCDDFF00768DC1006E8462006C82000036 + 4100000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00018EAD00018E + AD00018EAE32019CB4B46EDDEEFF66DDEEFF55CCDDFF00768DC1006E8462006C + 8200006C82000036410000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF0001A4BC0001A4 + BC0001A4BC0001A3BB59019CB4B488EEFFFF66DDEEFF55CCDDFF00768DC1006E + 8462006C8200006C8200006C8200003641000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF0001A4BC0001A4 + BC0001A4BC0001A4BC0001A3BB59019CB4B488EEFFFF66DDEEFF55CCDDFF0076 + 8DC1006E8462006C8200006C8200006C8200006C820000364100000000000000 + 00000000000000000000000000000000000000000000FFFFFF0001A4BC0001A4 + BC0001A4BC0001A4BC0001A4BC0001A3BB59019CB4B488EEFFFF66DDEEFF55CC + DDFF00768DC1006E8462006C8200006C8200006C8200006C8200006C82000051 + 620000364100011C2200020202000101270000004B00FFFFFF0001A4BC0001A4 + BC0001A4BC0001A4BC0001A4BC0001A4BC0001A3BB59019CB4B488EEFFFF66DD + EEFF55CCDDFF00768DC1006E8462006C8200006C8200006C8200006C8200006C + 8200006C8200023843000404040002024D0000009500FFFFFF0001A4BC0001A4 + BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A3BB59019CB4B488EE + FFFF66DDEEFF55CCDDFF00768DC1006E8462006C8200006C8200006C8200006C + 8200006C8200023843000404040002024D0000009500FFFFFF0001A4BC0001A4 + BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A3BB59019C + B4B488EEFFFF66DDEEFF55CCDDFF00768DC1006E8462006C8200006C8200006C + 8200006C8200023843000404040002024D0000009500FFFFFF0001A4BC0001A4 + BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A3 + BB59019CB4B488EEFFFF66DDEEFF55CCDDFF00768DC1006E8462006C8200006C + 8200006C8200023843000404040002024D0000009500FFFFFF0001A4BC0001A4 + BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4 + BC0001A3BB59019CB4B488EEFFFF66DDEEFF55CCDDFF00768DC1006E8462006C + 8200006C8200023843000404040002024D0000009500FFFFFF0001A4BC0001A4 + BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4 + BC0001A4BC0001A3BB59019CB4B488EEFFFF66DDEEFF55CCDDFF00768DC1006E + 8462006C8200023843000404040002024D0000009500FFFFFF0001A4BC0001A4 + BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4 + BC0001A4BC0001A4BC0001A3BB59019CB4B488EEFFFF66DDEEFF55CCDDFF0076 + 8DC1006E8462023843000404040002024D0000009500FFFFFF0001A4BC0001A4 + BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4 + BC0001A4BC0001A4BC0001A4BC0001A3BB59019CB4B488EEFFFF66DDEEFF55CC + DDFF00768DC1031E244D0404040002024D0000009500FFFFFF0001A4BC0001A4 + BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4 + BC0001A4BC0001A4BC0001A4BC0001A4BC0001A3BB59019CB4B488EEFFFF66DD + EEFF55CCDDFF0C0C0C870404044602024D0000009500FFFFFF00000000000000 + 0000000000000000000001292F00017B8D0001A4BC0001A4BC0001A4BC0001A4 + BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A3BB59019CB4B488EE + FFFFAAAAAAFFBBBBBBFF0C0C0C870101715E00009500FFFFFF00000000000000 + 00000000000000000000000000000000000001292F00017B8D0001A4BC0001A4 + BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC002B7D893D5555 + 5566FFFFFFFFEEEEEEFFBBBBBBFF000095CC00009566FFFFFF00000000000000 + 000000000000000000000000000000000000000000000000000001292F00017B + 8D0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC0001A4BC002B7D89005555 + 553455555566FFFFFFFF4444DDFF7777FFFF000095CCFFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000001292F00017B8D0001A4BC0001A4BC0001A4BC0001A4BC002B7D89005555 + 55002B2B9D4D0101E5AB9999FFFF7777FFFF000099CBFFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000001292F00017B8D0001A4BC0001A4BC002B7D89005555 + 55002B2B9D000101E5560101E5AB0101E1AD0101A92FFFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + OnClick = ResetRangesBtn1Click + TabOrder = 4 + end + end + object Label23: TLabel + Left = 40 + Height = 25 + Top = 168 + Width = 84 + Caption = 'Test Knob' + Font.Style = [fsBold] + ParentFont = False + end + object Label26: TLabel + Left = 16 + Height = 25 + Top = 448 + Width = 68 + Caption = 'Test v2.0' + end + object Timer1: TTimer + Interval = 3000 + OnTimer = Timer1Timer + Left = 16 + Top = 368 + end +end diff --git a/test/test_bgraknob/unit1.pas b/test/test_bgraknob/unit1.pas new file mode 100644 index 0000000..802ea84 --- /dev/null +++ b/test/test_bgraknob/unit1.pas @@ -0,0 +1,502 @@ +unit Unit1; + +{$mode objfpc}{$H+} + +{ + v1.0 05-21-2024 Sandy Ganz - Begat. sganz@pacbell.net + v2.0 05-26-2024 Sandy Ganz - Removed SectorDivision stuff, Knob now computes it. + + Hacked up test progam to test the enhanced BGRAKnob. +} + +interface + +uses + Classes, LCLType, SysUtils, Forms, Controls, Graphics, StdCtrls, Buttons, MaskEdit, + ExtCtrls, BGRAKnob, BCTrackbarUpdown; + +type + + { TForm1 } + + TForm1 = class(TForm) + BitBtn1: TBitBtn; + Label22: TLabel; + Label23: TLabel; + Label26: TLabel; + Label9: TLabel; + MouseWheelWrapCb: TCheckBox; + ReverseScaleCb: TCheckBox; + Label1: TLabel; + KnobTypeLbl: TLabel; + MouseWheelSpeedTB: TBCTrackbarUpdown; + BGRAKnob1: TBGRAKnob; + CDVDBtn: TBitBtn; + ResetRangesBtn1: TBitBtn; + Set1000Btn: TButton; + SetNeg10Btn: TButton; + SetNeg5Btn: TButton; + SpeedButton1: TSpeedButton; + SpeedButton2: TSpeedButton; + StartFromBottomCb: TCheckBox; + DVAPGb: TGroupBox; + MinValueEdt: TEdit; + MaxValueEdt: TEdit; + StartAngleEdt: TEdit; + EndAngleEdt: TEdit; + Label29: TLabel; + Label30: TLabel; + Label31: TLabel; + Label32: TLabel; + RangesGb: TGroupBox; + Label10: TLabel; + Label15: TLabel; + Label16: TLabel; + Label17: TLabel; + Label18: TLabel; + Label19: TLabel; + Label20: TLabel; + Label21: TLabel; + MinValueLbl: TLabel; + MaxValueLbl: TLabel; + Label24: TLabel; + Label25: TLabel; + StartAngleLbl: TLabel; + EndAngleLbl: TLabel; + Label28: TLabel; + Label7: TLabel; + ResetGeneralBtn: TBitBtn; + Set50Btn: TButton; + Set180Btn: TButton; + Set100Btn: TButton; + Set360Btn: TButton; + Set25Btn: TButton; + Set0Btn: TButton; + SlowSnapCb: TCheckBox; + KnobTypeCb: TComboBox; + ValueEdt: TEdit; + GroupBox1: TGroupBox; + GeneralSettingsGb: TGroupBox; + ValueLbl: TLabel; + Label11: TLabel; + Label12: TLabel; + Label13: TLabel; + Label14: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + Label5: TLabel; + Label6: TLabel; + Label8: TLabel; + MouseWheelSpeedLbl: TLabel; + SetValueBtn: TSpeedButton; + SetMinValueBtn: TSpeedButton; + SetMaxValueBtn: TSpeedButton; + SetStartAngleBtn: TSpeedButton; + SetEndAngleBtn: TSpeedButton; + Timer1: TTimer; + + procedure BitBtn1Click(Sender: TObject); + function KnobTypeToStr(kt : TKnobType) : string; + procedure EndAngleEdtKeyDown(Sender: TObject; var Key: Word; + {%H-}Shift: TShiftState); + procedure MaxValueEdtKeyDown(Sender: TObject; var Key: Word; + {%H-}Shift: TShiftState); + procedure MinValueEdtKeyDown(Sender: TObject; var Key: Word; + {%H-}Shift: TShiftState); + procedure MouseWheelSpeedTBChange(Sender: TObject; {%H-}AByUser: boolean); + procedure BGRAKnob1Click(Sender: TObject); + procedure BGRAKnob1DblClick(Sender: TObject); + procedure BGRAKnob1MouseDown(Sender: TObject; {%H-}Button: TMouseButton; + {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: Integer); + procedure BGRAKnob1MouseEnter(Sender: TObject); + procedure BGRAKnob1MouseLeave(Sender: TObject); + procedure BGRAKnob1MouseMove(Sender: TObject; {%H-}Shift: TShiftState; X, + Y: Integer); + procedure BGRAKnob1MouseUp(Sender: TObject; {%H-}Button: TMouseButton; + {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: Integer); + procedure BGRAKnob1MouseWheel(Sender: TObject; {%H-}Shift: TShiftState; + WheelDelta: Integer; {%H-}MousePos: TPoint; var {%H-}Handled: Boolean); + procedure BGRAKnob1ValueChanged(Sender: TObject; Value: single); + procedure CDVDBtnClick(Sender: TObject); + procedure MouseWheelWrapCbChange(Sender: TObject); + procedure ResetRangesBtn1Click(Sender: TObject); + procedure ReverseScaleCbChange(Sender: TObject); + procedure Set1000BtnClick(Sender: TObject); + procedure SetNeg10BtnClick(Sender: TObject); + procedure SetNeg5BtnClick(Sender: TObject); + procedure SpeedButton1Click(Sender: TObject); + procedure SpeedButton2Click(Sender: TObject); + procedure StartAngleEdtKeyDown(Sender: TObject; var Key: Word; + {%H-}Shift: TShiftState); + procedure StartFromBottomCbChange(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure ResetGeneralBtnClick(Sender: TObject); + procedure Set50BtnClick(Sender: TObject); + procedure Set180BtnClick(Sender: TObject); + procedure Set100BtnClick(Sender: TObject); + procedure Set360BtnClick(Sender: TObject); + procedure Set25BtnClick(Sender: TObject); + procedure Set0BtnClick(Sender: TObject); + procedure SlowSnapCbChange(Sender: TObject); + procedure KnobTypeCbChange(Sender: TObject); + procedure SetEndAngleBtnClick(Sender: TObject); + procedure SetMaxValueBtnClick(Sender: TObject); + procedure SetMinValueBtnClick(Sender: TObject); + procedure SetStartAngleBtnClick(Sender: TObject); + procedure SetValueBtnClick(Sender: TObject); + procedure Timer1Timer(Sender: TObject); + procedure ValueEdtKeyDown(Sender: TObject; var Key: Word; {%H-}Shift: TShiftState); + private + + public + + end; + +var + Form1: TForm1; + +implementation + +{$R *.lfm} + +{ TForm1 } + +procedure TForm1.FormCreate(Sender: TObject); +begin + ValueLbl.Caption := FloatToStr(BGRAKnob1.Value); + MinValueLbl.Caption := FloatToStr(BGRAKnob1.MinValue); + MaxValueLbl.Caption := FloatToStr(BGRAKnob1.MaxValue); + StartAngleLbl.Caption := FloatToStr(BGRAKnob1.StartAngle); + EndAngleLbl.Caption := FloatToStr(BGRAKnob1.EndAngle); + SlowSnapCb.Checked := BGRAKnob1.SlowSnap; + StartFromBottomCb.Checked := BGRAKnob1.StartFromBottom; + ReverseScaleCb.Checked := BGRAKnob1.ReverseScale; + + MouseWheelSpeedTB.Value := BGRAKnob1.WheelSpeed; + MouseWheelSpeedLbl.Caption := IntToStr(MouseWheelSpeedTB.Value); + + KnobTypeLbl.Caption := KnobTypeToStr(BGRAKnob1.KnobType); + +end; + +function TForm1.KnobTypeToStr(kt : TKnobType) : string; +begin + case kt of + ktRange : Result := 'ktRange'; + ktSector : Result := 'ktRange'; + else + Result := 'UNKNOWN'; + end; +end; + +procedure TForm1.BitBtn1Click(Sender: TObject); +begin + ValueLbl.Caption:=FloatToStr(BGRAKnob1.Value); +end; + +procedure TForm1.BGRAKnob1ValueChanged(Sender: TObject; Value: single); +begin + ValueLbl.Caption:=FloatToStr(Value); + MouseWheelSpeedLbl.Caption := IntToStr(BGRAKnob1.WheelSpeed); +end; + +procedure TForm1.CDVDBtnClick(Sender: TObject); +begin + ValueLbl.Caption := ''; + label2.Caption := ''; + label3.Caption := ''; + label4.Caption := ''; + label5.Caption := ''; + label6.Caption := ''; + label8.Caption := ''; + MouseWheelSpeedLbl.Caption := ''; + MinValueLbl.Caption := ''; + MaxValueLbl.Caption := ''; + StartAngleLbl.Caption := ''; + EndAngleLbl.Caption := ''; +end; + +procedure TForm1.MouseWheelWrapCbChange(Sender: TObject); +begin + BGRAKnob1.WheelWrap := MouseWheelWrapCb.Checked; +end; + +procedure TForm1.StartFromBottomCbChange(Sender: TObject); +begin + BGRAKnob1.StartFromBottom := StartFromBottomCb.Checked; +end; + +procedure TForm1.ReverseScaleCbChange(Sender: TObject); +begin + BGRAKnob1.ReverseScale := ReverseScaleCb.Checked; + ValueLbl.Caption := FloatToStr(BGRAKnob1.Value); +end; + +procedure TForm1.ResetRangesBtn1Click(Sender: TObject); +begin + SetMinValueBtnClick(Nil); + SetMaxValueBtnClick(Nil); + SetStartAngleBtnClick(Nil); + SetEndAngleBtnClick(Nil); +end; + +procedure TForm1.ResetGeneralBtnClick(Sender: TObject); +begin + BGRAKnob1.SlowSnap := True; + SlowSnapCb.Checked := True; + ReverseScaleCb.Checked := False; + MouseWheelWrapCb.Checked := False; + BGRAKnob1.StartFromBottom := True; // Normal Orientation + StartFromBottomCb.Checked := True; + MouseWheelSpeedTB.Value := 100; + KnobTypeCb.ItemIndex := 0; // ktRange type of knob + BGRAKnob1.KnobType:= ktRange; + MinValueLbl.Caption := FloatToStr(BGRAKnob1.MinValue); + MaxValueLbl.Caption := FloatToStr(BGRAKnob1.MaxValue); + StartAngleLbl.Caption := FloatToStr(BGRAKnob1.StartAngle); + EndAngleLbl.Caption := FloatToStr(BGRAKnob1.EndAngle); + KnobTypeLbl.Caption := KnobTypeToStr(BGRAKnob1.KnobType); +end; + +procedure TForm1.StartAngleEdtKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if (Key = VK_RETURN) then + SetStartAngleBtnClick(nil); +end; + +procedure TForm1.SetNeg5BtnClick(Sender: TObject); +begin + BGRAKnob1.Value:= -5.0; + ValueLbl.Caption := FloatToStr(BGRAKnob1.Value); +end; + +procedure TForm1.SpeedButton1Click(Sender: TObject); +begin + BGRAKnob1.Value := BGRAKnob1.Value + 1.0; + ValueLbl.Caption := FloatToStr(BGRAKnob1.Value); +end; + +procedure TForm1.SpeedButton2Click(Sender: TObject); +begin + BGRAKnob1.Value := BGRAKnob1.Value - 1.0; + ValueLbl.Caption := FloatToStr(BGRAKnob1.Value); +end; + +procedure TForm1.SetNeg10BtnClick(Sender: TObject); +begin + BGRAKnob1.Value:= -10.0; + ValueLbl.Caption := FloatToStr(BGRAKnob1.Value); +end; + +procedure TForm1.Set0BtnClick(Sender: TObject); +begin + BGRAKnob1.Value:=0.0; + ValueLbl.Caption := FloatToStr(BGRAKnob1.Value); +end; + +procedure TForm1.Set25BtnClick(Sender: TObject); +begin + BGRAKnob1.Value:=25.0; + ValueLbl.Caption := FloatToStr(BGRAKnob1.Value); +end; + +procedure TForm1.Set50BtnClick(Sender: TObject); +begin + BGRAKnob1.Value:=50.0; + ValueLbl.Caption := FloatToStr(BGRAKnob1.Value); +end; + +procedure TForm1.Set100BtnClick(Sender: TObject); +begin + BGRAKnob1.Value:=100.0; + ValueLbl.Caption := FloatToStr(BGRAKnob1.Value); +end; + +procedure TForm1.Set180BtnClick(Sender: TObject); +begin + BGRAKnob1.Value:=180.0; + ValueLbl.Caption := FloatToStr(BGRAKnob1.Value); +end; + +procedure TForm1.Set360BtnClick(Sender: TObject); +begin + BGRAKnob1.Value:=360.0; + ValueLbl.Caption := FloatToStr(BGRAKnob1.Value); +end; + +procedure TForm1.Set1000BtnClick(Sender: TObject); +begin + BGRAKnob1.Value:=1000.0; + ValueLbl.Caption := FloatToStr(BGRAKnob1.Value); +end; + +procedure TForm1.SlowSnapCbChange(Sender: TObject); +begin + // Toggle the slow snap feature, makes wrap around more deliberate + + BGRAKnob1.SlowSnap:=SlowSnapCb.Checked; +end; + +procedure TForm1.KnobTypeCbChange(Sender: TObject); +begin + BGRAKnob1.MinValue := 0; // Must Set values AFTER setting ktRange + BGRAKnob1.MaxValue := 15; + + if Sender is TComboBox then + with Sender as TComboBox do + begin + case ItemIndex of + 0 : begin + // ktRange + BGRAKnob1.KnobType:= ktRange; + end; + 1 : begin + // ktSector + BGRAKnob1.KnobType:= ktSector; + end; + end; + end; + + KnobTypeLbl.Caption := KnobTypeToStr(BGRAKnob1.KnobType); + MinValueLbl.Caption := FloatToStr(BGRAKnob1.MinValue); + MinValueEdt.Text := MinValueLbl.Caption; + MaxValueLbl.Caption := FloatToStr(BGRAKnob1.MaxValue); + MaxValueEdt.Text := MaxValueLbl.Caption; + StartAngleLbl.Caption := FloatToStr(BGRAKnob1.StartAngle); + StartAngleEdt.Text := StartAngleLbl.Caption; + EndAngleLbl.Caption := FloatToStr(BGRAKnob1.EndAngle); + EndAngleEdt.Text := EndAngleLbl.Caption; + BGRAKnob1.Value := 0; + ValueLbl.Caption := FloatToStr(BGRAKnob1.Value); +end; + +procedure TForm1.SetStartAngleBtnClick(Sender: TObject); +begin + BGRAKnob1.StartAngle := StrToFloat(StartAngleEdt.Text); + StartAngleLbl.Caption := FloatToStr(BGRAKnob1.StartAngle); + ValueLbl.Caption:=FloatToStr(BGRAKnob1.Value); +end; + +procedure TForm1.SetEndAngleBtnClick(Sender: TObject); +begin + BGRAKnob1.EndAngle := StrToFloat(EndAngleEdt.Text); + EndAngleLbl.Caption := FloatToStr(BGRAKnob1.EndAngle); + ValueLbl.Caption:=FloatToStr(BGRAKnob1.Value); +end; + +procedure TForm1.SetMinValueBtnClick(Sender: TObject); +begin + BGRAKnob1.MinValue := StrToFloat(MinValueEdt.Text); + MinValueLbl.Caption := FloatToStr(BGRAKnob1.MinValue); + ValueLbl.Caption:=FloatToStr(BGRAKnob1.Value); +end; + +procedure TForm1.SetMaxValueBtnClick(Sender: TObject); +begin + BGRAKnob1.MaxValue := StrToFloat(MaxValueEdt.Text); + MaxValueLbl.Caption := FloatToStr(BGRAKnob1.MaxValue); + ValueLbl.Caption:=FloatToStr(BGRAKnob1.Value); +end; + +procedure TForm1.SetValueBtnClick(Sender: TObject); +begin + BGRAKnob1.Value:= StrToFloat(ValueEdt.Text); + ValueLbl.Caption := FloatToStr(BGRAKnob1.Value); +end; + +procedure TForm1.Timer1Timer(Sender: TObject); +begin + // When the timer fires (after leaving knob area) clear stuff out + + label3.Caption := ''; + label4.Caption := ''; + label5.Caption := ''; + label6.Caption := ''; + label8.Caption := ''; +end; + +procedure TForm1.ValueEdtKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if (Key = VK_RETURN) then + SetValueBtnClick(nil); +end; + +procedure TForm1.BGRAKnob1MouseWheel(Sender: TObject; Shift: TShiftState; + WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); +begin + label2.Caption:= IntToStr(WheelDelta); +end; + +procedure TForm1.BGRAKnob1Click(Sender: TObject); +begin + label3.Caption := 'OnClick'; +end; + +procedure TForm1.MouseWheelSpeedTBChange(Sender: TObject; AByUser: boolean); +begin + BGRAKnob1.WheelSpeed := MouseWheelSpeedTB.Value; + MouseWheelSpeedLbl.Caption := IntToStr(BGRAKnob1.WheelSpeed); +end; + +procedure TForm1.MinValueEdtKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if (Key = VK_RETURN) then + SetMinValueBtnClick(nil); +end; + +procedure TForm1.MaxValueEdtKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if (Key = VK_RETURN) then + SetMaxValueBtnClick(nil); +end; + +procedure TForm1.EndAngleEdtKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if (Key = VK_RETURN) then + SetEndAngleBtnClick(nil); +end; + +procedure TForm1.BGRAKnob1DblClick(Sender: TObject); +begin + label4.Caption := 'DoubleClick'; +end; + +procedure TForm1.BGRAKnob1MouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + label5.Caption := 'MouseDown'; +end; + +procedure TForm1.BGRAKnob1MouseEnter(Sender: TObject); +begin + label6.Caption := 'MouseEnter'; + BGRAKnob1.KnobColor:=clSilver; + Timer1.Enabled := False; // While in the knob, turn off the reset timer +end; + +procedure TForm1.BGRAKnob1MouseLeave(Sender: TObject); +begin + label6.Caption := 'MouseLeave'; + BGRAKnob1.KnobColor:=clMedGray; + Timer1.Enabled := True; // mouse leaves the knob space, turn on reset timer +end; + +procedure TForm1.BGRAKnob1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); +begin + label8.Caption := 'X: ' + IntToStr(x) + ' Y: ' + IntToStr(Y); +end; + +procedure TForm1.BGRAKnob1MouseUp(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + label5.Caption := 'MouseUp'; +end; + +end. + From 5935692a77061b17d70610994078573b63884027 Mon Sep 17 00:00:00 2001 From: Juliette ELSASS <circular@fastmail.com> Date: Tue, 28 May 2024 16:51:57 +0200 Subject: [PATCH 3/6] add defaults to properties --- bgraknob.pas | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/bgraknob.pas b/bgraknob.pas index 26c4b45..d560bc9 100644 --- a/bgraknob.pas +++ b/bgraknob.pas @@ -49,7 +49,6 @@ TBGRAKnob = class(TBGRAGraphicCtrl) FOnKnobValueChange: TBGRAKnobValueChangedEvent; FStartFromBottom: boolean; FWheelSpeed: byte; // 0 : no wheel, 1 slowest, 255 fastest - FWheelSpeedFactor: single; FWheelWrap: boolean; FSlowSnap: boolean; FReverseScale: boolean; @@ -113,29 +112,29 @@ TBGRAKnob = class(TBGRAGraphicCtrl) published { Published declarations } property Anchors; - property CurveExponent: single read FCurveExponent write SetCurveExponent; - property KnobColor: TColor read FKnobColor write SetKnobColor; - property LightIntensity: integer read GetLightIntensity write SetLightIntensity; - property PositionColor: TColor read FPositionColor write SetPositionColor; - property PositionWidth: single read FPositionWidth write SetPositionWidth; - property PositionOpacity: byte read FPositionOpacity write SetPositionOpacity; - property PositionMargin: single read FPositionMargin write SetPositionMargin; + property CurveExponent: single read FCurveExponent write SetCurveExponent nodefault; + property KnobColor: TColor read FKnobColor write SetKnobColor default clBtnFace; + property LightIntensity: integer read GetLightIntensity write SetLightIntensity default 300; + property PositionColor: TColor read FPositionColor write SetPositionColor default clBtnText; + property PositionWidth: single read FPositionWidth write SetPositionWidth default 4; + property PositionOpacity: byte read FPositionOpacity write SetPositionOpacity default 192; + property PositionMargin: single read FPositionMargin write SetPositionMargin default 4; property PositionType: TBGRAKnobPositionType - read FPositionType write SetPositionType; - property UsePhongLighting: boolean read FUsePhongLighting write SetUsePhongLighting; + read FPositionType write SetPositionType default kptLineSquareCap; + property UsePhongLighting: boolean read FUsePhongLighting write SetUsePhongLighting default true; property MinValue: single read FMinValue write SetMinValue nodefault; property MaxValue: single read FMaxValue write SetMaxValue nodefault; - property StartFromBottom: boolean read FStartFromBottom write SetStartFromBottom; - property StartAngle: single read FStartAngle write SetStartAngle nodefault; - property EndAngle: single read FEndAngle write SetEndAngle; - property KnobType: TKnobType read FKnobType write SetKnobType; + property StartFromBottom: boolean read FStartFromBottom write SetStartFromBottom default true; + property StartAngle: single read FStartAngle write SetStartAngle default 30; + property EndAngle: single read FEndAngle write SetEndAngle default 330; + property KnobType: TKnobType read FKnobType write SetKnobType default ktRange; property Value: single read GetValue write SetValue nodefault; property OnValueChanged: TBGRAKnobValueChangedEvent read FOnKnobValueChange write FOnKnobValueChange; - property WheelSpeed: byte read FWheelSpeed write SetWheelSpeed; - property WheelWrap: boolean read FWheelWrap write FWheelWrap; - property SlowSnap: boolean read FSlowSnap write FSlowSnap; - property ReverseScale: boolean read FReverseScale write SetReverseScale; + property WheelSpeed: byte read FWheelSpeed write SetWheelSpeed default 0; + property WheelWrap: boolean read FWheelWrap write FWheelWrap default false; + property SlowSnap: boolean read FSlowSnap write FSlowSnap default false; + property ReverseScale: boolean read FReverseScale write SetReverseScale default false; property OnMouseWheel; property OnClick; property OnDblClick; @@ -151,14 +150,16 @@ TBGRAKnob = class(TBGRAGraphicCtrl) {$ENDIF} const - WHEELSPEEDFACTOR = 20.0; // used to calculate mouse wheel speed - WHEELSPEEDBASE = 300; VERSIONSTR = '2.10'; // knob version implementation uses Math; +const + WHEELSPEEDFACTOR = 20.0; // used to calculate mouse wheel speed + WHEELSPEEDBASE = 300; + {$IFDEF FPC} procedure Register; begin @@ -858,7 +859,6 @@ constructor TBGRAKnob.Create(AOwner: TComponent); FOnKnobValueChange := nil; FStartFromBottom := True; FWheelSpeed := 0; // 0, no wheel, 1 slowest, 255 fastest - FWheelSpeedFactor := WHEELSPEEDFACTOR; // factor for the mousewheel speed FWheelWrap := False; // don't allow the mouse wheel to wrap around FSlowSnap := False; // True : less snap around on min/max FReverseScale := False; // Flips direction around if True @@ -933,7 +933,7 @@ procedure TBGRAKnob.MouseWheelPos(Shift: TShiftState; WheelDelta: integer); if FKnobType = ktRange then begin newValue := Value + (FMaxValue - FMinValue) * WheelDelta / - ((WHEELSPEEDBASE - FWheelSpeed) * FWheelSpeedFactor); + ((WHEELSPEEDBASE - FWheelSpeed) * WHEELSPEEDFACTOR); // Check for wrap in either direction From c1b29bd7d542d044339e8381f626d77bdcd1946f Mon Sep 17 00:00:00 2001 From: Juliette ELSASS <circular@fastmail.com> Date: Tue, 28 May 2024 16:53:30 +0200 Subject: [PATCH 4/6] fix example, remove defaults in LFM --- test/test_bgraknob/unit1.lfm | 20 ++++---------------- test/test_bgraknob/unit1.pas | 6 ++---- 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/test/test_bgraknob/unit1.lfm b/test/test_bgraknob/unit1.lfm index 50b1f0a..2833c4c 100644 --- a/test/test_bgraknob/unit1.lfm +++ b/test/test_bgraknob/unit1.lfm @@ -16,25 +16,13 @@ object Form1: TForm1 Width = 100 CurveExponent = 0.200000002980232 KnobColor = clMedGray - LightIntensity = 300 - PositionColor = clBtnText - PositionWidth = 4 - PositionOpacity = 192 - PositionMargin = 4 - PositionType = kptLineSquareCap - UsePhongLighting = True - MinValue = 30 - MaxValue = 360 - StartFromBottom = True - StartAngle = 30 - EndAngle = 330 - KnobType = ktRange - Value = 30 + PositionColor = clBlack + MinValue = 0 + MaxValue = 50 + Value = 0 OnValueChanged = BGRAKnob1ValueChanged WheelSpeed = 100 - WheelWrap = False SlowSnap = True - ReverseScale = False OnMouseWheel = BGRAKnob1MouseWheel OnClick = BGRAKnob1Click OnDblClick = BGRAKnob1DblClick diff --git a/test/test_bgraknob/unit1.pas b/test/test_bgraknob/unit1.pas index 802ea84..b2a59dc 100644 --- a/test/test_bgraknob/unit1.pas +++ b/test/test_bgraknob/unit1.pas @@ -166,7 +166,9 @@ procedure TForm1.FormCreate(Sender: TObject); begin ValueLbl.Caption := FloatToStr(BGRAKnob1.Value); MinValueLbl.Caption := FloatToStr(BGRAKnob1.MinValue); + MinValueEdt.Text := MinValueLbl.Caption; MaxValueLbl.Caption := FloatToStr(BGRAKnob1.MaxValue); + MaxValueEdt.Text := MaxValueLbl.Caption; StartAngleLbl.Caption := FloatToStr(BGRAKnob1.StartAngle); EndAngleLbl.Caption := FloatToStr(BGRAKnob1.EndAngle); SlowSnapCb.Checked := BGRAKnob1.SlowSnap; @@ -341,9 +343,6 @@ procedure TForm1.SlowSnapCbChange(Sender: TObject); procedure TForm1.KnobTypeCbChange(Sender: TObject); begin - BGRAKnob1.MinValue := 0; // Must Set values AFTER setting ktRange - BGRAKnob1.MaxValue := 15; - if Sender is TComboBox then with Sender as TComboBox do begin @@ -368,7 +367,6 @@ procedure TForm1.KnobTypeCbChange(Sender: TObject); StartAngleEdt.Text := StartAngleLbl.Caption; EndAngleLbl.Caption := FloatToStr(BGRAKnob1.EndAngle); EndAngleEdt.Text := EndAngleLbl.Caption; - BGRAKnob1.Value := 0; ValueLbl.Caption := FloatToStr(BGRAKnob1.Value); end; From bc8a0f6993a295a7dae380665c881ff4775a20bb Mon Sep 17 00:00:00 2001 From: Juliette ELSASS <circular@fastmail.com> Date: Tue, 28 May 2024 17:15:30 +0200 Subject: [PATCH 5/6] modal example --- test/test_bccombobox/umain.lfm | 90 +++++++++++++++++++--------------- test/test_bccombobox/umain.pas | 16 ++++++ 2 files changed, 66 insertions(+), 40 deletions(-) diff --git a/test/test_bccombobox/umain.lfm b/test/test_bccombobox/umain.lfm index 093ceff..75ce766 100644 --- a/test/test_bccombobox/umain.lfm +++ b/test/test_bccombobox/umain.lfm @@ -1,19 +1,18 @@ object Form1: TForm1 Left = 433 - Height = 218 + Height = 174 Top = 119 - Width = 400 + Width = 320 Caption = 'Form1' - ClientHeight = 218 - ClientWidth = 400 - DesignTimePPI = 120 + ClientHeight = 174 + ClientWidth = 320 OnCreate = FormCreate - LCLVersion = '2.0.2.0' + LCLVersion = '3.2.0.0' object BCComboBox1: TBCComboBox - Left = 10 - Height = 49 - Top = 10 - Width = 184 + Left = 8 + Height = 39 + Top = 8 + Width = 147 Items.Strings = ( 'One' 'Two' @@ -22,6 +21,7 @@ object Form1: TForm1 ItemIndex = 0 ArrowSize = 8 ArrowWidth = 16 + FocusBorderOpacity = 0 DropDownBorderColor = 4194304 DropDownColor = 8405056 DropDownFontColor = 16770790 @@ -108,65 +108,75 @@ object Form1: TForm1 StateNormal.FontEx.Style = [fsBold] StaticButton = False OnChange = BCComboBox1Change + TabOrder = 0 end object Label1: TLabel - Left = 208 - Height = 22 - Top = 24 - Width = 53 + Left = 166 + Height = 15 + Top = 19 + Width = 41 Caption = 'Waiting' ParentColor = False ParentFont = False end object Label2: TLabel - Left = 12 - Height = 22 - Top = 82 - Width = 41 + Left = 10 + Height = 15 + Top = 66 + Width = 31 Caption = 'Style :' ParentColor = False ParentFont = False end object RadioFlash: TBGRAThemeRadioButton - Left = 8 - Height = 22 - Top = 152 - Width = 69 + Left = 6 + Height = 18 + Top = 122 + Width = 55 + Theme = BGRAColorTheme1 Caption = 'Flash' Checked = False - Theme = BGRAColorTheme1 OnChange = RadioButtonChange end object RadioWin7: TBGRAThemeRadioButton - Left = 8 - Height = 22 - Top = 128 - Width = 66 + Left = 6 + Height = 18 + Top = 102 + Width = 53 + Theme = BGRAColorTheme1 Caption = 'Win7' Checked = False - Theme = BGRAColorTheme1 OnChange = RadioButtonChange end object RadioCustom: TBGRAThemeRadioButton - Left = 8 - Height = 22 - Top = 176 - Width = 86 + Left = 6 + Height = 18 + Top = 141 + Width = 69 + Theme = BGRAColorTheme1 Caption = 'Custom' Checked = False - Theme = BGRAColorTheme1 OnChange = RadioButtonChange end object RadioDefault: TBGRAThemeRadioButton - Left = 8 - Height = 22 - Top = 104 - Width = 86 + Left = 6 + Height = 18 + Top = 83 + Width = 69 + Theme = BGRAColorTheme1 Caption = 'Default' Checked = True - Theme = BGRAColorTheme1 OnChange = RadioButtonChange end + object Button1: TButton + Left = 224 + Height = 25 + Top = 134 + Width = 75 + Caption = 'Modal...' + TabOrder = 5 + OnClick = Button1Click + end object BGRAColorTheme1: TBGRAColorTheme ColorNormal = clBlack ColorHover = 24576 @@ -174,7 +184,7 @@ object Form1: TForm1 ColorDisabled = clGray ColorFocused = clMoneyGreen ColorText = clBlack - left = 240 - top = 90 + Left = 192 + Top = 72 end end diff --git a/test/test_bccombobox/umain.pas b/test/test_bccombobox/umain.pas index f18f713..f712d16 100644 --- a/test/test_bccombobox/umain.pas +++ b/test/test_bccombobox/umain.pas @@ -15,6 +15,7 @@ interface TForm1 = class(TForm) BCComboBox1: TBCComboBox; BGRAColorTheme1: TBGRAColorTheme; + Button1: TButton; Label1: TLabel; Label2: TLabel; RadioCustom: TBGRAThemeRadioButton; @@ -22,6 +23,7 @@ TForm1 = class(TForm) RadioWin7: TBGRAThemeRadioButton; RadioDefault: TBGRAThemeRadioButton; procedure BCComboBox1Change(Sender: TObject); + procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure RadioButtonChange(Sender: TObject); private @@ -61,6 +63,20 @@ procedure TForm1.BCComboBox1Change(Sender: TObject); Label1.Caption := 'Changed to '+BCComboBox1.Text; end; +procedure TForm1.Button1Click(Sender: TObject); +var f: TForm1; +begin + Hide; + f := TForm1.Create(nil); + f.Button1.Visible := false; + try + f.ShowModal; + finally + f.Free; + end; + Close; +end; + procedure TForm1.OnBCComboBoxDrawItem(Control: TWinControl; Index: integer; ARect: TRect; State: TOwnerDrawState); var From 12cbaf027800fc381c16eeb2ac57b0977d4fd8e2 Mon Sep 17 00:00:00 2001 From: Sandy Ganz <sganz@pacbell.net> Date: Tue, 28 May 2024 12:08:57 -0700 Subject: [PATCH 6/6] Update bgraknob.pas removed needless procs Removed a couple of needless procedures that calculated values for ktSector mode. Minor code clean in the wheel movement code. --- bgraknob.pas | 72 ++++++++-------------------------------------------- 1 file changed, 11 insertions(+), 61 deletions(-) diff --git a/bgraknob.pas b/bgraknob.pas index d560bc9..53e8f0f 100644 --- a/bgraknob.pas +++ b/bgraknob.pas @@ -1,6 +1,6 @@ // SPDX-License-Identifier: LGPL-3.0-linking-exception { - Iintially written by Circular. + Initially written by Circular. } {******************************* CONTRIBUTOR(S) ****************************** - Edivando S. Santos Brasil | mailedivando@gmail.com @@ -94,8 +94,6 @@ TBGRAKnob = class(TBGRAGraphicCtrl) function DoMouseWheel(Shift: TShiftState; WheelDelta: integer; MousePos: TPoint): boolean; override; procedure MouseWheelPos({%H-}Shift: TShiftState; WheelDelta: integer); virtual; function RemapRange(OldValue: single; OldMin, OldMax, NewMin, NewMax: single): single; - function CalcValueFromSector(Sector: integer): single; - function CalcSectorFromValue(AValue: single): integer; function AngularPosSector(AValue: single): single; public { Public declarations } @@ -150,7 +148,7 @@ TBGRAKnob = class(TBGRAGraphicCtrl) {$ENDIF} const - VERSIONSTR = '2.10'; // knob version + VERSIONSTR = '2.11'; // knob version implementation @@ -268,7 +266,7 @@ function TBGRAKnob.GetValue: single; Result := FMaxValue + FMinValue - Result; if FKnobType = ktSector then - Result := CalcSectorFromValue(Result); + Result := Round(Result); end; @@ -300,7 +298,6 @@ function TBGRAKnob.DegPosToAngular(DegPos: single): single; function TBGRAKnob.AngularPosSector(AValue: single): single; var - valueMapped: single; sector: integer; begin // AValue is the degree angle of FAngularPos of where the mouse is @@ -312,16 +309,10 @@ function TBGRAKnob.AngularPosSector(AValue: single): single; Avalue := FStartAngle; // from the current angular pos get the value - valueMapped := RemapRange(AValue, FStartAngle, FEndAngle, FMinValue, FMaxValue); - - // now with that value we can see what sector is returned - sector := CalcSectorFromValue(valueMapped); - - // once we have the sector we need to get back to the value for that sector - valueMapped := CalcValueFromSector(sector); + sector := Round(RemapRange(AValue, FStartAngle, FEndAngle, FMinValue, FMaxValue)); // now get back the FAngularPos after mapping - Result := DegPosToAngular(RemapRange(valueMapped, FMinValue, FMaxValue, FStartAngle, FEndAngle)); + Result := DegPosToAngular(RemapRange(sector, FMinValue, FMaxValue, FStartAngle, FEndAngle)); end; function TBGRAKnob.ValueCorrection(var AValue: single): boolean; @@ -372,47 +363,6 @@ function TBGRAKnob.RemapRange(OldValue: single; Result := (((OldValue - OldMin) * (NewMax - NewMin)) / (OldMax - OldMin)) + NewMin; end; -function TBGRAKnob.CalcValueFromSector(Sector: integer): single; -var - sectorSpan, secValue: single; -begin - // Given a sector offset get the value where it's at. - - // Check for some sane values - - if Sector > MaxValue then - exit(FMaxValue); - - if Sector < MinValue then - exit(FMinValue); - - sectorSpan := (FMaxValue - FMinValue) / FSectorDivisions; - secValue := Sector * SectorSpan; - - Result := secValue; -end; - -function TBGRAKnob.CalcSectorFromValue(AValue: single): integer; -var - sectorSpan: single; - secValue: integer; -begin - // We need to get the matching sector that the value lands in. - // If we are PAST the previous sector (end of a sector range is the NEXT Sector), we are in that - // next sector, so sector endpoints are the sector starts, For 2 sectors - // angles of 0-178 (In first) 179-360 (In second) etc. - - sectorSpan := (FMaxValue - FMinValue) / FSectorDivisions; - - // could happen with rare odd values... - - if sectorSpan = 0.0 then - exit(Round(FMinValue)); - - secValue := Round(AValue / sectorSpan); - Result := secValue; -end; - procedure TBGRAKnob.SetCurveExponent(const AValue: single); begin if FCurveExponent = AValue then @@ -484,10 +434,10 @@ procedure TBGRAKnob.SetValue(AValue: single); if AValue < FMinValue then AValue := FMinValue; - // Get the value from given sector, + // Get the integeral value from given sector, if FKnobType = ktSector then - AValue := CalcValueFromSector(Round(AValue)); // Round to sector + AValue := Round(AValue); // Round to sector AValue := RemapRange(AValue, FMinValue, FMaxValue, FStartAngle, FEndAngle); @@ -940,10 +890,10 @@ procedure TBGRAKnob.MouseWheelPos(Shift: TShiftState; WheelDelta: integer); if FWheelWrap then begin if newValue > FMaxValue then - newValue := FMinValue; - - if newValue < FMinValue then - newValue := FMaxValue; + newValue := FMinValue + else + if newValue < FMinValue then + newValue := FMaxValue; end; end else