• R/O
  • SSH
  • HTTPS

onstepper: Commit


Commit MetaInfo

Revision4 (tree)
Time2022-03-05 04:07:43
Authorderekwildstar

Log Message

Commit inicial

Change Summary

Incremental Difference

--- trunk/prj/OnStepper.dpr (nonexistent)
+++ trunk/prj/OnStepper.dpr (revision 4)
@@ -0,0 +1,33 @@
1+program OnStepper;
2+
3+
4+
5+
6+
7+{$R *.dres}
8+
9+uses
10+ Vcl.Forms,
11+ KRK.Vcl.Forms,
12+ Vcl.Themes,
13+ Vcl.Styles,
14+ UFormPrincipal in '..\src\UFormPrincipal.pas' {FormPrincipal},
15+ UFuncoes in '..\src\UFuncoes.pas',
16+ UDamoPrincipal in '..\src\UDamoPrincipal.pas' {DamoPrincipal: TDataModule},
17+ UClassesAjudantes in '..\src\UClassesAjudantes.pas',
18+ UFramBasico in '..\src\UFramBasico.pas' {FramBasico: TFrame},
19+ UFramLocaisDeObservacao in '..\src\UFramLocaisDeObservacao.pas' {FramLocaisDeObservacao: TFrame},
20+ UOnStepInfo in '..\src\UOnStepInfo.pas',
21+ UTipos in '..\src\UTipos.pas';
22+
23+{$R *.res}
24+
25+begin
26+ ReportMemoryLeaksOnShutdown := True;
27+ Application.Initialize;
28+ Application.MainFormOnTaskbar := True;
29+ Application.Title := 'OnStepper';
30+ TStyleManager.TrySetStyle('Cyan Night');
31+ Application.CreateForm(TFormPrincipal, FormPrincipal);
32+ Application.Run;
33+end.
--- trunk/prj/OnStepper.dproj (nonexistent)
+++ trunk/prj/OnStepper.dproj (revision 4)
@@ -0,0 +1,1035 @@
1+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
2+ <PropertyGroup>
3+ <ProjectGuid>{26828A7F-647E-4E10-A6A2-4B632CB620A5}</ProjectGuid>
4+ <ProjectVersion>18.8</ProjectVersion>
5+ <FrameworkType>VCL</FrameworkType>
6+ <MainSource>OnStepper.dpr</MainSource>
7+ <Base>True</Base>
8+ <Config Condition="'$(Config)'==''">Debug</Config>
9+ <Platform Condition="'$(Platform)'==''">Win32</Platform>
10+ <TargetedPlatforms>1</TargetedPlatforms>
11+ <AppType>Application</AppType>
12+ </PropertyGroup>
13+ <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
14+ <Base>true</Base>
15+ </PropertyGroup>
16+ <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
17+ <Base_Win32>true</Base_Win32>
18+ <CfgParent>Base</CfgParent>
19+ <Base>true</Base>
20+ </PropertyGroup>
21+ <PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
22+ <Base_Win64>true</Base_Win64>
23+ <CfgParent>Base</CfgParent>
24+ <Base>true</Base>
25+ </PropertyGroup>
26+ <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
27+ <Cfg_1>true</Cfg_1>
28+ <CfgParent>Base</CfgParent>
29+ <Base>true</Base>
30+ </PropertyGroup>
31+ <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
32+ <Cfg_1_Win32>true</Cfg_1_Win32>
33+ <CfgParent>Cfg_1</CfgParent>
34+ <Cfg_1>true</Cfg_1>
35+ <Base>true</Base>
36+ </PropertyGroup>
37+ <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
38+ <Cfg_2>true</Cfg_2>
39+ <CfgParent>Base</CfgParent>
40+ <Base>true</Base>
41+ </PropertyGroup>
42+ <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
43+ <Cfg_2_Win32>true</Cfg_2_Win32>
44+ <CfgParent>Cfg_2</CfgParent>
45+ <Cfg_2>true</Cfg_2>
46+ <Base>true</Base>
47+ </PropertyGroup>
48+ <PropertyGroup Condition="'$(Base)'!=''">
49+ <DCC_DcuOutput>..\bin\dcu</DCC_DcuOutput>
50+ <DCC_ExeOutput>..\bin</DCC_ExeOutput>
51+ <DCC_E>false</DCC_E>
52+ <DCC_N>false</DCC_N>
53+ <DCC_S>false</DCC_S>
54+ <DCC_F>false</DCC_F>
55+ <DCC_K>false</DCC_K>
56+ <DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace>
57+ <Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.ico</Icon_MainIcon>
58+ <UWP_DelphiLogo44>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png</UWP_DelphiLogo44>
59+ <UWP_DelphiLogo150>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png</UWP_DelphiLogo150>
60+ <SanitizedProjectName>OnStepper</SanitizedProjectName>
61+ <VerInfo_Locale>1046</VerInfo_Locale>
62+ <VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
63+ <Custom_Styles>&quot;Cyan Night|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CyanNight.vsf&quot;</Custom_Styles>
64+ </PropertyGroup>
65+ <PropertyGroup Condition="'$(Base_Win32)'!=''">
66+ <DCC_UsePackage>DBXSqliteDriver;bindcompdbx;RESTComponents;GR32_D;DBXInterBaseDriver;vcl;IndyIPServer;vclactnband;IndyIPCommon;vclFireDAC;IndySystem;tethering;svnui;dsnapcon;FireDACADSDriver;FireDACMSAccDriver;fmxFireDAC;vclimg;TeeDB;FireDAC;vcltouch;vcldb;bindcompfmx;svn;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;inetdb;CEF4Delphi;FMXTee;soaprtl;DbxCommonDriver;FmxTeeUI;ibxpress;FireDACIBDriver;fmx;fmxdae;xmlrtl;soapmidas;ibxbindings;fmxobj;vclwinx;vclib;rtl;Tee;DbxClientDriver;GR32_R;CustomIPTransport;vcldsnap;dbexpress;IndyCore;vclx;bindcomp;appanalytics;dsnap;officeXPrt;FireDACCommon;IndyIPClient;bindcompvcl;RESTBackendComponents;KRKLib;TeeUI;VCLRESTComponents;soapserver;dbxcds;VclSmp;adortl;PNGComponentsR;FireDACConnR;ADOConnR;UserControlR;vclie;bindengine;DBXMySQLDriver;CloudService;dsnapxml;FireDACMySQLDriver;dbrtl;inetdbxpress;IndyProtocols;DBXConnR;FireDACCommonODBC;FireDACCommonDriver;inet;fmxase;$(DCC_UsePackage)</DCC_UsePackage>
67+ <DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
68+ <BT_BuildType>Debug</BT_BuildType>
69+ <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
70+ <VerInfo_Locale>1033</VerInfo_Locale>
71+ <Icon_MainIcon>..\res\OnStepBrasil.ico</Icon_MainIcon>
72+ <Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
73+ <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
74+ </PropertyGroup>
75+ <PropertyGroup Condition="'$(Base_Win64)'!=''">
76+ <DCC_UsePackage>DBXSqliteDriver;bindcompdbx;RESTComponents;DBXInterBaseDriver;vcl;IndyIPServer;vclactnband;IndyIPCommon;vclFireDAC;IndySystem;tethering;dsnapcon;FireDACADSDriver;FireDACMSAccDriver;fmxFireDAC;vclimg;TeeDB;FireDAC;vcltouch;vcldb;bindcompfmx;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;inetdb;CEF4Delphi;FMXTee;soaprtl;DbxCommonDriver;FmxTeeUI;ibxpress;FireDACIBDriver;fmx;fmxdae;xmlrtl;soapmidas;ibxbindings;fmxobj;vclwinx;vclib;rtl;Tee;DbxClientDriver;GR32_R;CustomIPTransport;vcldsnap;dbexpress;IndyCore;vclx;bindcomp;appanalytics;dsnap;officeXPrt;FireDACCommon;IndyIPClient;bindcompvcl;RESTBackendComponents;TeeUI;VCLRESTComponents;soapserver;dbxcds;VclSmp;adortl;PNGComponentsR;FireDACConnR;ADOConnR;UserControlR;vclie;bindengine;DBXMySQLDriver;CloudService;dsnapxml;FireDACMySQLDriver;dbrtl;inetdbxpress;IndyProtocols;DBXConnR;FireDACCommonODBC;FireDACCommonDriver;inet;fmxase;$(DCC_UsePackage)</DCC_UsePackage>
77+ </PropertyGroup>
78+ <PropertyGroup Condition="'$(Cfg_1)'!=''">
79+ <DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
80+ <DCC_DebugDCUs>true</DCC_DebugDCUs>
81+ <DCC_Optimize>false</DCC_Optimize>
82+ <DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
83+ <DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
84+ <DCC_RemoteDebug>true</DCC_RemoteDebug>
85+ <DCC_UnitSearchPath>X:\Program Files (x86)\Embarcadero\Studio\20.0\source\rtl\common;$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
86+ </PropertyGroup>
87+ <PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
88+ <DCC_RemoteDebug>false</DCC_RemoteDebug>
89+ <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
90+ <AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode>
91+ <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
92+ <VerInfo_Locale>1033</VerInfo_Locale>
93+ <Icon_MainIcon>..\res\OnStepBrasil.ico</Icon_MainIcon>
94+ </PropertyGroup>
95+ <PropertyGroup Condition="'$(Cfg_2)'!=''">
96+ <DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
97+ <DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
98+ <DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
99+ <DCC_DebugInformation>0</DCC_DebugInformation>
100+ </PropertyGroup>
101+ <PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
102+ <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
103+ <AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode>
104+ </PropertyGroup>
105+ <ItemGroup>
106+ <DelphiCompile Include="$(MainSource)">
107+ <MainSource>MainSource</MainSource>
108+ </DelphiCompile>
109+ <DCCReference Include="..\src\UFormPrincipal.pas">
110+ <Form>FormPrincipal</Form>
111+ </DCCReference>
112+ <DCCReference Include="..\src\UFuncoes.pas"/>
113+ <DCCReference Include="..\src\UDamoPrincipal.pas">
114+ <Form>DamoPrincipal</Form>
115+ <DesignClass>TDataModule</DesignClass>
116+ </DCCReference>
117+ <DCCReference Include="..\src\UClassesAjudantes.pas"/>
118+ <DCCReference Include="..\src\UFramBasico.pas">
119+ <Form>FramBasico</Form>
120+ <FormType>dfm</FormType>
121+ <DesignClass>TFrame</DesignClass>
122+ </DCCReference>
123+ <DCCReference Include="..\src\UFramLocaisDeObservacao.pas">
124+ <Form>FramLocaisDeObservacao</Form>
125+ <FormType>dfm</FormType>
126+ <DesignClass>TFrame</DesignClass>
127+ </DCCReference>
128+ <DCCReference Include="..\src\UOnStepInfo.pas"/>
129+ <DCCReference Include="..\src\UTipos.pas"/>
130+ <RcItem Include="..\res\icons8-casa-32.ico">
131+ <ResourceType>ICON</ResourceType>
132+ <ResourceId>IMAGATHOME</ResourceId>
133+ </RcItem>
134+ <RcItem Include="..\res\icons8-alfinete-de-mapa-32.ico">
135+ <ResourceType>ICON</ResourceType>
136+ <ResourceId>IMAGPARKED</ResourceId>
137+ </RcItem>
138+ <RcItem Include="..\res\icons8-modo-esportivo-32.ico">
139+ <ResourceType>ICON</ResourceType>
140+ <ResourceId>IMAGGOTO</ResourceId>
141+ </RcItem>
142+ <RcItem Include="..\res\icons8-dispositivo-gps-32.ico">
143+ <ResourceType>ICON</ResourceType>
144+ <ResourceId>IMAGTRACKING</ResourceId>
145+ </RcItem>
146+ <BuildConfiguration Include="Release">
147+ <Key>Cfg_2</Key>
148+ <CfgParent>Base</CfgParent>
149+ </BuildConfiguration>
150+ <BuildConfiguration Include="Base">
151+ <Key>Base</Key>
152+ </BuildConfiguration>
153+ <BuildConfiguration Include="Debug">
154+ <Key>Cfg_1</Key>
155+ <CfgParent>Base</CfgParent>
156+ </BuildConfiguration>
157+ </ItemGroup>
158+ <ProjectExtensions>
159+ <Borland.Personality>Delphi.Personality.12</Borland.Personality>
160+ <Borland.ProjectType>Application</Borland.ProjectType>
161+ <BorlandProject>
162+ <Delphi.Personality>
163+ <Source>
164+ <Source Name="MainSource">OnStepper.dpr</Source>
165+ </Source>
166+ </Delphi.Personality>
167+ <Deployment Version="3">
168+ <DeployFile LocalName="..\bin\OnStepper.exe" Configuration="Debug" Class="ProjectOutput">
169+ <Platform Name="Win32">
170+ <RemoteName>OnStepper.exe</RemoteName>
171+ <Overwrite>true</Overwrite>
172+ </Platform>
173+ </DeployFile>
174+ <DeployFile LocalName="..\res\icons8-dispositivo-gps-32.ico" Configuration="Debug" Class="ProjectFile">
175+ <Platform Name="Win32">
176+ <RemoteDir>.\</RemoteDir>
177+ <Overwrite>true</Overwrite>
178+ </Platform>
179+ </DeployFile>
180+ <DeployFile LocalName="..\res\icons8-modo-esportivo-32.ico" Configuration="Debug" Class="ProjectFile">
181+ <Platform Name="Win32">
182+ <RemoteDir>.\</RemoteDir>
183+ <Overwrite>true</Overwrite>
184+ </Platform>
185+ </DeployFile>
186+ <DeployFile LocalName="..\res\icons8-casa-32.ico" Configuration="Debug" Class="ProjectFile">
187+ <Platform Name="Win32">
188+ <RemoteDir>.\</RemoteDir>
189+ <Overwrite>true</Overwrite>
190+ </Platform>
191+ </DeployFile>
192+ <DeployFile LocalName="..\res\icons8-alfinete-de-mapa-32.ico" Configuration="Debug" Class="ProjectFile">
193+ <Platform Name="Win32">
194+ <RemoteDir>.\</RemoteDir>
195+ <Overwrite>true</Overwrite>
196+ </Platform>
197+ </DeployFile>
198+ <DeployClass Name="AdditionalDebugSymbols">
199+ <Platform Name="iOSSimulator">
200+ <Operation>1</Operation>
201+ </Platform>
202+ <Platform Name="OSX32">
203+ <RemoteDir>Contents\MacOS</RemoteDir>
204+ <Operation>1</Operation>
205+ </Platform>
206+ <Platform Name="Win32">
207+ <Operation>0</Operation>
208+ </Platform>
209+ </DeployClass>
210+ <DeployClass Name="AndroidClassesDexFile">
211+ <Platform Name="Android">
212+ <RemoteDir>classes</RemoteDir>
213+ <Operation>1</Operation>
214+ </Platform>
215+ <Platform Name="Android64">
216+ <RemoteDir>classes</RemoteDir>
217+ <Operation>1</Operation>
218+ </Platform>
219+ </DeployClass>
220+ <DeployClass Name="AndroidFileProvider">
221+ <Platform Name="Android">
222+ <RemoteDir>res\xml</RemoteDir>
223+ <Operation>1</Operation>
224+ </Platform>
225+ <Platform Name="Android64">
226+ <RemoteDir>res\xml</RemoteDir>
227+ <Operation>1</Operation>
228+ </Platform>
229+ </DeployClass>
230+ <DeployClass Name="AndroidGDBServer">
231+ <Platform Name="Android">
232+ <RemoteDir>library\lib\armeabi-v7a</RemoteDir>
233+ <Operation>1</Operation>
234+ </Platform>
235+ </DeployClass>
236+ <DeployClass Name="AndroidLibnativeArmeabiFile">
237+ <Platform Name="Android">
238+ <RemoteDir>library\lib\armeabi</RemoteDir>
239+ <Operation>1</Operation>
240+ </Platform>
241+ <Platform Name="Android64">
242+ <RemoteDir>library\lib\armeabi</RemoteDir>
243+ <Operation>1</Operation>
244+ </Platform>
245+ </DeployClass>
246+ <DeployClass Name="AndroidLibnativeArmeabiv7aFile">
247+ <Platform Name="Android64">
248+ <RemoteDir>library\lib\armeabi-v7a</RemoteDir>
249+ <Operation>1</Operation>
250+ </Platform>
251+ </DeployClass>
252+ <DeployClass Name="AndroidLibnativeMipsFile">
253+ <Platform Name="Android">
254+ <RemoteDir>library\lib\mips</RemoteDir>
255+ <Operation>1</Operation>
256+ </Platform>
257+ <Platform Name="Android64">
258+ <RemoteDir>library\lib\mips</RemoteDir>
259+ <Operation>1</Operation>
260+ </Platform>
261+ </DeployClass>
262+ <DeployClass Name="AndroidServiceOutput">
263+ <Platform Name="Android">
264+ <RemoteDir>library\lib\armeabi-v7a</RemoteDir>
265+ <Operation>1</Operation>
266+ </Platform>
267+ <Platform Name="Android64">
268+ <RemoteDir>library\lib\arm64-v8a</RemoteDir>
269+ <Operation>1</Operation>
270+ </Platform>
271+ </DeployClass>
272+ <DeployClass Name="AndroidServiceOutput_Android32">
273+ <Platform Name="Android64">
274+ <RemoteDir>library\lib\armeabi-v7a</RemoteDir>
275+ <Operation>1</Operation>
276+ </Platform>
277+ </DeployClass>
278+ <DeployClass Name="AndroidSplashImageDef">
279+ <Platform Name="Android">
280+ <RemoteDir>res\drawable</RemoteDir>
281+ <Operation>1</Operation>
282+ </Platform>
283+ <Platform Name="Android64">
284+ <RemoteDir>res\drawable</RemoteDir>
285+ <Operation>1</Operation>
286+ </Platform>
287+ </DeployClass>
288+ <DeployClass Name="AndroidSplashStyles">
289+ <Platform Name="Android">
290+ <RemoteDir>res\values</RemoteDir>
291+ <Operation>1</Operation>
292+ </Platform>
293+ <Platform Name="Android64">
294+ <RemoteDir>res\values</RemoteDir>
295+ <Operation>1</Operation>
296+ </Platform>
297+ </DeployClass>
298+ <DeployClass Name="AndroidSplashStylesV21">
299+ <Platform Name="Android">
300+ <RemoteDir>res\values-v21</RemoteDir>
301+ <Operation>1</Operation>
302+ </Platform>
303+ <Platform Name="Android64">
304+ <RemoteDir>res\values-v21</RemoteDir>
305+ <Operation>1</Operation>
306+ </Platform>
307+ </DeployClass>
308+ <DeployClass Name="Android_Colors">
309+ <Platform Name="Android">
310+ <RemoteDir>res\values</RemoteDir>
311+ <Operation>1</Operation>
312+ </Platform>
313+ <Platform Name="Android64">
314+ <RemoteDir>res\values</RemoteDir>
315+ <Operation>1</Operation>
316+ </Platform>
317+ </DeployClass>
318+ <DeployClass Name="Android_DefaultAppIcon">
319+ <Platform Name="Android">
320+ <RemoteDir>res\drawable</RemoteDir>
321+ <Operation>1</Operation>
322+ </Platform>
323+ <Platform Name="Android64">
324+ <RemoteDir>res\drawable</RemoteDir>
325+ <Operation>1</Operation>
326+ </Platform>
327+ </DeployClass>
328+ <DeployClass Name="Android_LauncherIcon144">
329+ <Platform Name="Android">
330+ <RemoteDir>res\drawable-xxhdpi</RemoteDir>
331+ <Operation>1</Operation>
332+ </Platform>
333+ <Platform Name="Android64">
334+ <RemoteDir>res\drawable-xxhdpi</RemoteDir>
335+ <Operation>1</Operation>
336+ </Platform>
337+ </DeployClass>
338+ <DeployClass Name="Android_LauncherIcon36">
339+ <Platform Name="Android">
340+ <RemoteDir>res\drawable-ldpi</RemoteDir>
341+ <Operation>1</Operation>
342+ </Platform>
343+ <Platform Name="Android64">
344+ <RemoteDir>res\drawable-ldpi</RemoteDir>
345+ <Operation>1</Operation>
346+ </Platform>
347+ </DeployClass>
348+ <DeployClass Name="Android_LauncherIcon48">
349+ <Platform Name="Android">
350+ <RemoteDir>res\drawable-mdpi</RemoteDir>
351+ <Operation>1</Operation>
352+ </Platform>
353+ <Platform Name="Android64">
354+ <RemoteDir>res\drawable-mdpi</RemoteDir>
355+ <Operation>1</Operation>
356+ </Platform>
357+ </DeployClass>
358+ <DeployClass Name="Android_LauncherIcon72">
359+ <Platform Name="Android">
360+ <RemoteDir>res\drawable-hdpi</RemoteDir>
361+ <Operation>1</Operation>
362+ </Platform>
363+ <Platform Name="Android64">
364+ <RemoteDir>res\drawable-hdpi</RemoteDir>
365+ <Operation>1</Operation>
366+ </Platform>
367+ </DeployClass>
368+ <DeployClass Name="Android_LauncherIcon96">
369+ <Platform Name="Android">
370+ <RemoteDir>res\drawable-xhdpi</RemoteDir>
371+ <Operation>1</Operation>
372+ </Platform>
373+ <Platform Name="Android64">
374+ <RemoteDir>res\drawable-xhdpi</RemoteDir>
375+ <Operation>1</Operation>
376+ </Platform>
377+ </DeployClass>
378+ <DeployClass Name="Android_NotificationIcon24">
379+ <Platform Name="Android">
380+ <RemoteDir>res\drawable-mdpi</RemoteDir>
381+ <Operation>1</Operation>
382+ </Platform>
383+ <Platform Name="Android64">
384+ <RemoteDir>res\drawable-mdpi</RemoteDir>
385+ <Operation>1</Operation>
386+ </Platform>
387+ </DeployClass>
388+ <DeployClass Name="Android_NotificationIcon36">
389+ <Platform Name="Android">
390+ <RemoteDir>res\drawable-hdpi</RemoteDir>
391+ <Operation>1</Operation>
392+ </Platform>
393+ <Platform Name="Android64">
394+ <RemoteDir>res\drawable-hdpi</RemoteDir>
395+ <Operation>1</Operation>
396+ </Platform>
397+ </DeployClass>
398+ <DeployClass Name="Android_NotificationIcon48">
399+ <Platform Name="Android">
400+ <RemoteDir>res\drawable-xhdpi</RemoteDir>
401+ <Operation>1</Operation>
402+ </Platform>
403+ <Platform Name="Android64">
404+ <RemoteDir>res\drawable-xhdpi</RemoteDir>
405+ <Operation>1</Operation>
406+ </Platform>
407+ </DeployClass>
408+ <DeployClass Name="Android_NotificationIcon72">
409+ <Platform Name="Android">
410+ <RemoteDir>res\drawable-xxhdpi</RemoteDir>
411+ <Operation>1</Operation>
412+ </Platform>
413+ <Platform Name="Android64">
414+ <RemoteDir>res\drawable-xxhdpi</RemoteDir>
415+ <Operation>1</Operation>
416+ </Platform>
417+ </DeployClass>
418+ <DeployClass Name="Android_NotificationIcon96">
419+ <Platform Name="Android">
420+ <RemoteDir>res\drawable-xxxhdpi</RemoteDir>
421+ <Operation>1</Operation>
422+ </Platform>
423+ <Platform Name="Android64">
424+ <RemoteDir>res\drawable-xxxhdpi</RemoteDir>
425+ <Operation>1</Operation>
426+ </Platform>
427+ </DeployClass>
428+ <DeployClass Name="Android_SplashImage426">
429+ <Platform Name="Android">
430+ <RemoteDir>res\drawable-small</RemoteDir>
431+ <Operation>1</Operation>
432+ </Platform>
433+ <Platform Name="Android64">
434+ <RemoteDir>res\drawable-small</RemoteDir>
435+ <Operation>1</Operation>
436+ </Platform>
437+ </DeployClass>
438+ <DeployClass Name="Android_SplashImage470">
439+ <Platform Name="Android">
440+ <RemoteDir>res\drawable-normal</RemoteDir>
441+ <Operation>1</Operation>
442+ </Platform>
443+ <Platform Name="Android64">
444+ <RemoteDir>res\drawable-normal</RemoteDir>
445+ <Operation>1</Operation>
446+ </Platform>
447+ </DeployClass>
448+ <DeployClass Name="Android_SplashImage640">
449+ <Platform Name="Android">
450+ <RemoteDir>res\drawable-large</RemoteDir>
451+ <Operation>1</Operation>
452+ </Platform>
453+ <Platform Name="Android64">
454+ <RemoteDir>res\drawable-large</RemoteDir>
455+ <Operation>1</Operation>
456+ </Platform>
457+ </DeployClass>
458+ <DeployClass Name="Android_SplashImage960">
459+ <Platform Name="Android">
460+ <RemoteDir>res\drawable-xlarge</RemoteDir>
461+ <Operation>1</Operation>
462+ </Platform>
463+ <Platform Name="Android64">
464+ <RemoteDir>res\drawable-xlarge</RemoteDir>
465+ <Operation>1</Operation>
466+ </Platform>
467+ </DeployClass>
468+ <DeployClass Name="Android_Strings">
469+ <Platform Name="Android">
470+ <RemoteDir>res\values</RemoteDir>
471+ <Operation>1</Operation>
472+ </Platform>
473+ <Platform Name="Android64">
474+ <RemoteDir>res\values</RemoteDir>
475+ <Operation>1</Operation>
476+ </Platform>
477+ </DeployClass>
478+ <DeployClass Name="DebugSymbols">
479+ <Platform Name="iOSSimulator">
480+ <Operation>1</Operation>
481+ </Platform>
482+ <Platform Name="OSX32">
483+ <RemoteDir>Contents\MacOS</RemoteDir>
484+ <Operation>1</Operation>
485+ </Platform>
486+ <Platform Name="Win32">
487+ <Operation>0</Operation>
488+ </Platform>
489+ </DeployClass>
490+ <DeployClass Name="DependencyFramework">
491+ <Platform Name="OSX32">
492+ <RemoteDir>Contents\MacOS</RemoteDir>
493+ <Operation>1</Operation>
494+ <Extensions>.framework</Extensions>
495+ </Platform>
496+ <Platform Name="OSX64">
497+ <RemoteDir>Contents\MacOS</RemoteDir>
498+ <Operation>1</Operation>
499+ <Extensions>.framework</Extensions>
500+ </Platform>
501+ <Platform Name="Win32">
502+ <Operation>0</Operation>
503+ </Platform>
504+ </DeployClass>
505+ <DeployClass Name="DependencyModule">
506+ <Platform Name="iOSDevice32">
507+ <Operation>1</Operation>
508+ <Extensions>.dylib</Extensions>
509+ </Platform>
510+ <Platform Name="iOSDevice64">
511+ <Operation>1</Operation>
512+ <Extensions>.dylib</Extensions>
513+ </Platform>
514+ <Platform Name="iOSSimulator">
515+ <Operation>1</Operation>
516+ <Extensions>.dylib</Extensions>
517+ </Platform>
518+ <Platform Name="OSX32">
519+ <RemoteDir>Contents\MacOS</RemoteDir>
520+ <Operation>1</Operation>
521+ <Extensions>.dylib</Extensions>
522+ </Platform>
523+ <Platform Name="OSX64">
524+ <RemoteDir>Contents\MacOS</RemoteDir>
525+ <Operation>1</Operation>
526+ <Extensions>.dylib</Extensions>
527+ </Platform>
528+ <Platform Name="Win32">
529+ <Operation>0</Operation>
530+ <Extensions>.dll;.bpl</Extensions>
531+ </Platform>
532+ </DeployClass>
533+ <DeployClass Required="true" Name="DependencyPackage">
534+ <Platform Name="iOSDevice32">
535+ <Operation>1</Operation>
536+ <Extensions>.dylib</Extensions>
537+ </Platform>
538+ <Platform Name="iOSDevice64">
539+ <Operation>1</Operation>
540+ <Extensions>.dylib</Extensions>
541+ </Platform>
542+ <Platform Name="iOSSimulator">
543+ <Operation>1</Operation>
544+ <Extensions>.dylib</Extensions>
545+ </Platform>
546+ <Platform Name="OSX32">
547+ <RemoteDir>Contents\MacOS</RemoteDir>
548+ <Operation>1</Operation>
549+ <Extensions>.dylib</Extensions>
550+ </Platform>
551+ <Platform Name="OSX64">
552+ <RemoteDir>Contents\MacOS</RemoteDir>
553+ <Operation>1</Operation>
554+ <Extensions>.dylib</Extensions>
555+ </Platform>
556+ <Platform Name="Win32">
557+ <Operation>0</Operation>
558+ <Extensions>.bpl</Extensions>
559+ </Platform>
560+ </DeployClass>
561+ <DeployClass Name="File">
562+ <Platform Name="Android">
563+ <Operation>0</Operation>
564+ </Platform>
565+ <Platform Name="Android64">
566+ <Operation>0</Operation>
567+ </Platform>
568+ <Platform Name="iOSDevice32">
569+ <Operation>0</Operation>
570+ </Platform>
571+ <Platform Name="iOSDevice64">
572+ <Operation>0</Operation>
573+ </Platform>
574+ <Platform Name="iOSSimulator">
575+ <Operation>0</Operation>
576+ </Platform>
577+ <Platform Name="OSX32">
578+ <RemoteDir>Contents\Resources\StartUp\</RemoteDir>
579+ <Operation>0</Operation>
580+ </Platform>
581+ <Platform Name="OSX64">
582+ <RemoteDir>Contents\Resources\StartUp\</RemoteDir>
583+ <Operation>0</Operation>
584+ </Platform>
585+ <Platform Name="Win32">
586+ <Operation>0</Operation>
587+ </Platform>
588+ </DeployClass>
589+ <DeployClass Name="iPad_Launch1024x768">
590+ <Platform Name="iOSDevice32">
591+ <Operation>1</Operation>
592+ </Platform>
593+ <Platform Name="iOSDevice64">
594+ <Operation>1</Operation>
595+ </Platform>
596+ <Platform Name="iOSSimulator">
597+ <Operation>1</Operation>
598+ </Platform>
599+ </DeployClass>
600+ <DeployClass Name="iPad_Launch1536x2048">
601+ <Platform Name="iOSDevice32">
602+ <Operation>1</Operation>
603+ </Platform>
604+ <Platform Name="iOSDevice64">
605+ <Operation>1</Operation>
606+ </Platform>
607+ <Platform Name="iOSSimulator">
608+ <Operation>1</Operation>
609+ </Platform>
610+ </DeployClass>
611+ <DeployClass Name="iPad_Launch1668">
612+ <Platform Name="iOSDevice32">
613+ <Operation>1</Operation>
614+ </Platform>
615+ <Platform Name="iOSDevice64">
616+ <Operation>1</Operation>
617+ </Platform>
618+ <Platform Name="iOSSimulator">
619+ <Operation>1</Operation>
620+ </Platform>
621+ </DeployClass>
622+ <DeployClass Name="iPad_Launch1668x2388">
623+ <Platform Name="iOSDevice32">
624+ <Operation>1</Operation>
625+ </Platform>
626+ <Platform Name="iOSDevice64">
627+ <Operation>1</Operation>
628+ </Platform>
629+ <Platform Name="iOSSimulator">
630+ <Operation>1</Operation>
631+ </Platform>
632+ </DeployClass>
633+ <DeployClass Name="iPad_Launch2048x1536">
634+ <Platform Name="iOSDevice32">
635+ <Operation>1</Operation>
636+ </Platform>
637+ <Platform Name="iOSDevice64">
638+ <Operation>1</Operation>
639+ </Platform>
640+ <Platform Name="iOSSimulator">
641+ <Operation>1</Operation>
642+ </Platform>
643+ </DeployClass>
644+ <DeployClass Name="iPad_Launch2048x2732">
645+ <Platform Name="iOSDevice32">
646+ <Operation>1</Operation>
647+ </Platform>
648+ <Platform Name="iOSDevice64">
649+ <Operation>1</Operation>
650+ </Platform>
651+ <Platform Name="iOSSimulator">
652+ <Operation>1</Operation>
653+ </Platform>
654+ </DeployClass>
655+ <DeployClass Name="iPad_Launch2224">
656+ <Platform Name="iOSDevice32">
657+ <Operation>1</Operation>
658+ </Platform>
659+ <Platform Name="iOSDevice64">
660+ <Operation>1</Operation>
661+ </Platform>
662+ <Platform Name="iOSSimulator">
663+ <Operation>1</Operation>
664+ </Platform>
665+ </DeployClass>
666+ <DeployClass Name="iPad_Launch2388x1668">
667+ <Platform Name="iOSDevice32">
668+ <Operation>1</Operation>
669+ </Platform>
670+ <Platform Name="iOSDevice64">
671+ <Operation>1</Operation>
672+ </Platform>
673+ <Platform Name="iOSSimulator">
674+ <Operation>1</Operation>
675+ </Platform>
676+ </DeployClass>
677+ <DeployClass Name="iPad_Launch2732x2048">
678+ <Platform Name="iOSDevice32">
679+ <Operation>1</Operation>
680+ </Platform>
681+ <Platform Name="iOSDevice64">
682+ <Operation>1</Operation>
683+ </Platform>
684+ <Platform Name="iOSSimulator">
685+ <Operation>1</Operation>
686+ </Platform>
687+ </DeployClass>
688+ <DeployClass Name="iPad_Launch768x1024">
689+ <Platform Name="iOSDevice32">
690+ <Operation>1</Operation>
691+ </Platform>
692+ <Platform Name="iOSDevice64">
693+ <Operation>1</Operation>
694+ </Platform>
695+ <Platform Name="iOSSimulator">
696+ <Operation>1</Operation>
697+ </Platform>
698+ </DeployClass>
699+ <DeployClass Name="iPhone_Launch1125">
700+ <Platform Name="iOSDevice32">
701+ <Operation>1</Operation>
702+ </Platform>
703+ <Platform Name="iOSDevice64">
704+ <Operation>1</Operation>
705+ </Platform>
706+ <Platform Name="iOSSimulator">
707+ <Operation>1</Operation>
708+ </Platform>
709+ </DeployClass>
710+ <DeployClass Name="iPhone_Launch1136x640">
711+ <Platform Name="iOSDevice32">
712+ <Operation>1</Operation>
713+ </Platform>
714+ <Platform Name="iOSDevice64">
715+ <Operation>1</Operation>
716+ </Platform>
717+ <Platform Name="iOSSimulator">
718+ <Operation>1</Operation>
719+ </Platform>
720+ </DeployClass>
721+ <DeployClass Name="iPhone_Launch1242">
722+ <Platform Name="iOSDevice32">
723+ <Operation>1</Operation>
724+ </Platform>
725+ <Platform Name="iOSDevice64">
726+ <Operation>1</Operation>
727+ </Platform>
728+ <Platform Name="iOSSimulator">
729+ <Operation>1</Operation>
730+ </Platform>
731+ </DeployClass>
732+ <DeployClass Name="iPhone_Launch1242x2688">
733+ <Platform Name="iOSDevice32">
734+ <Operation>1</Operation>
735+ </Platform>
736+ <Platform Name="iOSDevice64">
737+ <Operation>1</Operation>
738+ </Platform>
739+ <Platform Name="iOSSimulator">
740+ <Operation>1</Operation>
741+ </Platform>
742+ </DeployClass>
743+ <DeployClass Name="iPhone_Launch1334">
744+ <Platform Name="iOSDevice32">
745+ <Operation>1</Operation>
746+ </Platform>
747+ <Platform Name="iOSDevice64">
748+ <Operation>1</Operation>
749+ </Platform>
750+ <Platform Name="iOSSimulator">
751+ <Operation>1</Operation>
752+ </Platform>
753+ </DeployClass>
754+ <DeployClass Name="iPhone_Launch1792">
755+ <Platform Name="iOSDevice32">
756+ <Operation>1</Operation>
757+ </Platform>
758+ <Platform Name="iOSDevice64">
759+ <Operation>1</Operation>
760+ </Platform>
761+ <Platform Name="iOSSimulator">
762+ <Operation>1</Operation>
763+ </Platform>
764+ </DeployClass>
765+ <DeployClass Name="iPhone_Launch2208">
766+ <Platform Name="iOSDevice32">
767+ <Operation>1</Operation>
768+ </Platform>
769+ <Platform Name="iOSDevice64">
770+ <Operation>1</Operation>
771+ </Platform>
772+ <Platform Name="iOSSimulator">
773+ <Operation>1</Operation>
774+ </Platform>
775+ </DeployClass>
776+ <DeployClass Name="iPhone_Launch2436">
777+ <Platform Name="iOSDevice32">
778+ <Operation>1</Operation>
779+ </Platform>
780+ <Platform Name="iOSDevice64">
781+ <Operation>1</Operation>
782+ </Platform>
783+ <Platform Name="iOSSimulator">
784+ <Operation>1</Operation>
785+ </Platform>
786+ </DeployClass>
787+ <DeployClass Name="iPhone_Launch2688x1242">
788+ <Platform Name="iOSDevice32">
789+ <Operation>1</Operation>
790+ </Platform>
791+ <Platform Name="iOSDevice64">
792+ <Operation>1</Operation>
793+ </Platform>
794+ <Platform Name="iOSSimulator">
795+ <Operation>1</Operation>
796+ </Platform>
797+ </DeployClass>
798+ <DeployClass Name="iPhone_Launch320">
799+ <Platform Name="iOSDevice32">
800+ <Operation>1</Operation>
801+ </Platform>
802+ <Platform Name="iOSDevice64">
803+ <Operation>1</Operation>
804+ </Platform>
805+ <Platform Name="iOSSimulator">
806+ <Operation>1</Operation>
807+ </Platform>
808+ </DeployClass>
809+ <DeployClass Name="iPhone_Launch640">
810+ <Platform Name="iOSDevice32">
811+ <Operation>1</Operation>
812+ </Platform>
813+ <Platform Name="iOSDevice64">
814+ <Operation>1</Operation>
815+ </Platform>
816+ <Platform Name="iOSSimulator">
817+ <Operation>1</Operation>
818+ </Platform>
819+ </DeployClass>
820+ <DeployClass Name="iPhone_Launch640x1136">
821+ <Platform Name="iOSDevice32">
822+ <Operation>1</Operation>
823+ </Platform>
824+ <Platform Name="iOSDevice64">
825+ <Operation>1</Operation>
826+ </Platform>
827+ <Platform Name="iOSSimulator">
828+ <Operation>1</Operation>
829+ </Platform>
830+ </DeployClass>
831+ <DeployClass Name="iPhone_Launch750">
832+ <Platform Name="iOSDevice32">
833+ <Operation>1</Operation>
834+ </Platform>
835+ <Platform Name="iOSDevice64">
836+ <Operation>1</Operation>
837+ </Platform>
838+ <Platform Name="iOSSimulator">
839+ <Operation>1</Operation>
840+ </Platform>
841+ </DeployClass>
842+ <DeployClass Name="iPhone_Launch828">
843+ <Platform Name="iOSDevice32">
844+ <Operation>1</Operation>
845+ </Platform>
846+ <Platform Name="iOSDevice64">
847+ <Operation>1</Operation>
848+ </Platform>
849+ <Platform Name="iOSSimulator">
850+ <Operation>1</Operation>
851+ </Platform>
852+ </DeployClass>
853+ <DeployClass Name="ProjectAndroidManifest">
854+ <Platform Name="Android">
855+ <Operation>1</Operation>
856+ </Platform>
857+ <Platform Name="Android64">
858+ <Operation>1</Operation>
859+ </Platform>
860+ </DeployClass>
861+ <DeployClass Name="ProjectiOSDeviceDebug">
862+ <Platform Name="iOSDevice32">
863+ <RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
864+ <Operation>1</Operation>
865+ </Platform>
866+ <Platform Name="iOSDevice64">
867+ <RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
868+ <Operation>1</Operation>
869+ </Platform>
870+ </DeployClass>
871+ <DeployClass Name="ProjectiOSDeviceResourceRules">
872+ <Platform Name="iOSDevice32">
873+ <Operation>1</Operation>
874+ </Platform>
875+ <Platform Name="iOSDevice64">
876+ <Operation>1</Operation>
877+ </Platform>
878+ </DeployClass>
879+ <DeployClass Name="ProjectiOSEntitlements">
880+ <Platform Name="iOSDevice32">
881+ <RemoteDir>..\</RemoteDir>
882+ <Operation>1</Operation>
883+ </Platform>
884+ <Platform Name="iOSDevice64">
885+ <RemoteDir>..\</RemoteDir>
886+ <Operation>1</Operation>
887+ </Platform>
888+ </DeployClass>
889+ <DeployClass Name="ProjectiOSInfoPList">
890+ <Platform Name="iOSDevice32">
891+ <Operation>1</Operation>
892+ </Platform>
893+ <Platform Name="iOSDevice64">
894+ <Operation>1</Operation>
895+ </Platform>
896+ <Platform Name="iOSSimulator">
897+ <Operation>1</Operation>
898+ </Platform>
899+ </DeployClass>
900+ <DeployClass Name="ProjectiOSResource">
901+ <Platform Name="iOSDevice32">
902+ <Operation>1</Operation>
903+ </Platform>
904+ <Platform Name="iOSDevice64">
905+ <Operation>1</Operation>
906+ </Platform>
907+ <Platform Name="iOSSimulator">
908+ <Operation>1</Operation>
909+ </Platform>
910+ </DeployClass>
911+ <DeployClass Name="ProjectOSXDebug">
912+ <Platform Name="OSX64">
913+ <RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
914+ <Operation>1</Operation>
915+ </Platform>
916+ </DeployClass>
917+ <DeployClass Name="ProjectOSXEntitlements">
918+ <Platform Name="OSX32">
919+ <RemoteDir>..\</RemoteDir>
920+ <Operation>1</Operation>
921+ </Platform>
922+ <Platform Name="OSX64">
923+ <RemoteDir>..\</RemoteDir>
924+ <Operation>1</Operation>
925+ </Platform>
926+ </DeployClass>
927+ <DeployClass Name="ProjectOSXInfoPList">
928+ <Platform Name="OSX32">
929+ <RemoteDir>Contents</RemoteDir>
930+ <Operation>1</Operation>
931+ </Platform>
932+ <Platform Name="OSX64">
933+ <RemoteDir>Contents</RemoteDir>
934+ <Operation>1</Operation>
935+ </Platform>
936+ </DeployClass>
937+ <DeployClass Name="ProjectOSXResource">
938+ <Platform Name="OSX32">
939+ <RemoteDir>Contents\Resources</RemoteDir>
940+ <Operation>1</Operation>
941+ </Platform>
942+ <Platform Name="OSX64">
943+ <RemoteDir>Contents\Resources</RemoteDir>
944+ <Operation>1</Operation>
945+ </Platform>
946+ </DeployClass>
947+ <DeployClass Required="true" Name="ProjectOutput">
948+ <Platform Name="Android">
949+ <RemoteDir>library\lib\armeabi-v7a</RemoteDir>
950+ <Operation>1</Operation>
951+ </Platform>
952+ <Platform Name="Android64">
953+ <RemoteDir>library\lib\arm64-v8a</RemoteDir>
954+ <Operation>1</Operation>
955+ </Platform>
956+ <Platform Name="iOSDevice32">
957+ <Operation>1</Operation>
958+ </Platform>
959+ <Platform Name="iOSDevice64">
960+ <Operation>1</Operation>
961+ </Platform>
962+ <Platform Name="iOSSimulator">
963+ <Operation>1</Operation>
964+ </Platform>
965+ <Platform Name="Linux64">
966+ <Operation>1</Operation>
967+ </Platform>
968+ <Platform Name="OSX32">
969+ <RemoteDir>Contents\MacOS</RemoteDir>
970+ <Operation>1</Operation>
971+ </Platform>
972+ <Platform Name="OSX64">
973+ <RemoteDir>Contents\MacOS</RemoteDir>
974+ <Operation>1</Operation>
975+ </Platform>
976+ <Platform Name="Win32">
977+ <Operation>0</Operation>
978+ </Platform>
979+ </DeployClass>
980+ <DeployClass Name="ProjectOutput_Android32">
981+ <Platform Name="Android64">
982+ <RemoteDir>library\lib\armeabi-v7a</RemoteDir>
983+ <Operation>1</Operation>
984+ </Platform>
985+ </DeployClass>
986+ <DeployClass Name="ProjectUWPManifest">
987+ <Platform Name="Win32">
988+ <Operation>1</Operation>
989+ </Platform>
990+ <Platform Name="Win64">
991+ <Operation>1</Operation>
992+ </Platform>
993+ </DeployClass>
994+ <DeployClass Name="UWP_DelphiLogo150">
995+ <Platform Name="Win32">
996+ <RemoteDir>Assets</RemoteDir>
997+ <Operation>1</Operation>
998+ </Platform>
999+ <Platform Name="Win64">
1000+ <RemoteDir>Assets</RemoteDir>
1001+ <Operation>1</Operation>
1002+ </Platform>
1003+ </DeployClass>
1004+ <DeployClass Name="UWP_DelphiLogo44">
1005+ <Platform Name="Win32">
1006+ <RemoteDir>Assets</RemoteDir>
1007+ <Operation>1</Operation>
1008+ </Platform>
1009+ <Platform Name="Win64">
1010+ <RemoteDir>Assets</RemoteDir>
1011+ <Operation>1</Operation>
1012+ </Platform>
1013+ </DeployClass>
1014+ <ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
1015+ <ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
1016+ <ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
1017+ <ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
1018+ <ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
1019+ <ProjectRoot Platform="OSX32" Name="$(PROJECTNAME).app"/>
1020+ <ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
1021+ <ProjectRoot Platform="OSX64" Name="$(PROJECTNAME).app"/>
1022+ <ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
1023+ <ProjectRoot Platform="Android64" Name="$(PROJECTNAME)"/>
1024+ </Deployment>
1025+ <Platforms>
1026+ <Platform value="Win32">True</Platform>
1027+ <Platform value="Win64">False</Platform>
1028+ </Platforms>
1029+ </BorlandProject>
1030+ <ProjectFileVersion>12</ProjectFileVersion>
1031+ </ProjectExtensions>
1032+ <Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
1033+ <Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
1034+ <Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/>
1035+</Project>
--- trunk/src/UClassesAjudantes.pas (nonexistent)
+++ trunk/src/UClassesAjudantes.pas (revision 4)
@@ -0,0 +1,29 @@
1+unit UClassesAjudantes;
2+
3+interface
4+
5+uses
6+ Vcl.ActnList;
7+
8+type
9+ TActionHelper = class Helper for TAction
10+ public
11+ procedure Disable;
12+ procedure Enable;
13+ end;
14+
15+implementation
16+
17+{ TActionHelper }
18+
19+procedure TActionHelper.Disable;
20+begin
21+ Enabled := False;
22+end;
23+
24+procedure TActionHelper.Enable;
25+begin
26+ Enabled := True;
27+end;
28+
29+end.
--- trunk/src/UDamoPrincipal.pas (nonexistent)
+++ trunk/src/UDamoPrincipal.pas (revision 4)
@@ -0,0 +1,308 @@
1+unit UDamoPrincipal;
2+
3+interface
4+
5+uses
6+ System.SysUtils, System.Classes, System.ImageList, Vcl.ImgList, Vcl.Controls,
7+ UPngImageList, Vcl.Forms, Vcl.Menus, System.Generics.Collections, UFramBasico,
8+ Vcl.ActnList, UOnStepInfo, UTipos, UClassesAjudantes,
9+ KRK.Rtl.Win.CommCtrl, KRK.Vcl.Controls;
10+
11+type
12+ TFramBasicoClass = class of TFramBasico;
13+
14+ TDamoPrincipal = class(TDataModule)
15+ PNILPrincpal: TPngImageList;
16+ PNILBalloonHint: TPngImageList;
17+ KRBHPrincipal: TKRKBalloonHint;
18+ private
19+ { Private declarations }
20+ FOnStepInfo: TOnStepInfo;
21+ FFrameList: TList<TFramBasico>;
22+ FVisibleFrame: TFramBasico;
23+
24+ function FrameByClassName(AClassName: String): TFramBasico;
25+ procedure HandleOnInfo(AIdentification: String; AStatus: TOnStepStatus);
26+
27+ procedure ShowBalloonHint(AControl: TControl);
28+ procedure HideBalloonHint;
29+ procedure HandleMouseEnter(ASender: TObject);
30+ procedure HandleMouseLeave(ASender: TObject);
31+ public
32+ { Public declarations }
33+ constructor Create(AOwner: TComponent); override;
34+ destructor Destroy; override;
35+
36+ procedure ShowFrame(AFrameClass: TFramBasicoClass; AAction: TAction);
37+ procedure StartPooling;
38+ procedure PausePooling;
39+ procedure ConfigureBalloonHint(AControl: TControl);
40+
41+ procedure s1;
42+ procedure s11;
43+ procedure h1;
44+ procedure h11;
45+ procedure s2;
46+ procedure s22;
47+ procedure h2;
48+ procedure h22;
49+ procedure MSG;
50+ end;
51+
52+implementation
53+
54+{%CLASSGROUP 'Vcl.Controls.TControl'}
55+
56+uses
57+ UFormPrincipal, Winapi.Windows, Vcl.Graphics, Vcl.ExtCtrls, Dialogs, Winapi.CommCtrl;
58+
59+{$R *.dfm}
60+
61+constructor TDamoPrincipal.Create(AOwner: TComponent);
62+begin
63+ inherited;
64+ FFrameList := TList<TFramBasico>.Create;
65+ FVisibleFrame := nil;
66+ FOnStepInfo := TOnStepInfo.Create(3);
67+ FOnStepInfo.OnInfo := HandleOnInfo;
68+end;
69+
70+procedure TDamoPrincipal.s11;
71+var
72+ T: TToolInfo;
73+begin
74+ T.cbSize := SizeOf(TToolInfo);
75+ T.hwnd := 0;
76+ T.uId := 1;
77+ SendMessage(FKRBH.ToolTipWindowHandle,TTM_TRACKACTIVATE,WPARAM(True),LPARAM(@T));
78+end;
79+
80+procedure TDamoPrincipal.s2;
81+var
82+ P2: TKRKTrackingToolTipParams;
83+begin
84+ P2 := Default(TKRKTrackingToolTipParams);
85+ P2.IconHandle := 2;
86+ P2.Title := 'Título 2';
87+ P2.Text := 'Este é um texto menor, porém que precisa de um ToolTip maior que 100 pixels, portanto ele será quebrado';
88+ P2.X := 500;
89+ P2.Y := 500;
90+ FKRBH.Show(0,2,P2);
91+end;
92+
93+procedure TDamoPrincipal.s22;
94+var
95+ T: TToolInfo;
96+begin
97+ T.cbSize := SizeOf(TToolInfo);
98+ T.hwnd := 0;
99+ T.uId := 2;
100+ SendMessage(FKRBH.ToolTipWindowHandle,TTM_TRACKACTIVATE,WPARAM(True),LPARAM(@T));
101+end;
102+
103+procedure TDamoPrincipal.h1;
104+begin
105+ FKRBH.Hide;
106+end;
107+
108+
109+procedure TDamoPrincipal.h11;
110+var
111+ T: TToolInfo;
112+begin
113+ T.cbSize := SizeOf(TToolInfo);
114+ T.hwnd := 0;
115+ T.uId := 1;
116+ SendMessage(FKRBH.ToolTipWindowHandle,TTM_TRACKACTIVATE,WPARAM(False),LPARAM(@T));
117+end;
118+
119+procedure TDamoPrincipal.h2;
120+begin
121+ FKRBH.Hide;
122+end;
123+
124+procedure TDamoPrincipal.h22;
125+var
126+ T: TToolInfo;
127+begin
128+ T.cbSize := SizeOf(TToolInfo);
129+ T.hwnd := 0;
130+ T.uId := 2;
131+ SendMessage(FKRBH.ToolTipWindowHandle,TTM_TRACKACTIVATE,WPARAM(False),LPARAM(@T));
132+end;
133+
134+destructor TDamoPrincipal.Destroy;
135+begin
136+ FKRBH.Free;
137+
138+ FOnStepInfo.Free;
139+ FFrameList.Free;
140+ inherited;
141+end;
142+
143+function TDamoPrincipal.FrameByClassName(AClassName: String): TFramBasico;
144+begin
145+ Result := nil;
146+
147+ for var Frame: TFramBasico in FFrameList do
148+ if LowerCase(Frame.ClassName) = LowerCase(AClassName) then
149+ begin
150+ Result := Frame;
151+ Break;
152+ end;
153+end;
154+
155+procedure TDamoPrincipal.HandleMouseEnter(ASender: TObject);
156+//var
157+// Icon: HICON;
158+begin
159+// Icon := LoadIcon(HInstance,PWideChar(UpperCase(AControl.Name)));
160+//
161+// if Icon > 0 then
162+// begin
163+// AControl.Hint := AControl.Hint + '|' + IntToStr(Icon);
164+// DestroyIcon(Icon);
165+// end;
166+
167+
168+
169+// eu estou tentando fazer com que TipIconId funcione, mas descobri que ao usar AUtoGetTexts (published)
170+// caso eu mude ele aqui embaixo, FToolInfo é todo vazio e por isso o hint não é mostrado
171+// se eu coloco Autogettexts no OI como false desde o começo ele pega o texto padrão.
172+
173+// KRBHPrincipal.AutoGetTexts := fALSE;
174+ //KRBHPrincipal.TipIcon := tiInfo;
175+// KRBHPrincipal.TipIconId := 'MAINICON';
176+
177+// em setautogettexts só resetar se houve mudança de propriedade. Nao fazer isso
178+// faz com que toda vez o valor dos textos sejam sobrescritos
179+
180+ ShowBalloonHint(TControl(ASender));
181+end;
182+
183+procedure TDamoPrincipal.HandleMouseLeave(ASender: TObject);
184+begin
185+ HideBalloonHint;
186+end;
187+
188+procedure TDamoPrincipal.HandleOnInfo(AIdentification: String; AStatus: TOnStepStatus);
189+var
190+ FormPrincipal: TFormPrincipal;
191+begin
192+ // Tive um problema de Access Violation ao fechar a aplicação porque
193+ // aparentemente aqui FormPrincipal é destruído antes da thread terminar. Não
194+ // faz sentido mesmo, já que quem destrói a thread é DamoPrincipal, e este é
195+ // destruído antes de FPrincipal, mas não tô com paciência de descrobrir
196+ // porque isso aconteceu. É melhor prevenir logo
197+ if not (csDestroying in ComponentState) then
198+ begin
199+ FormPrincipal := TFormPrincipal(Owner);
200+
201+ FormPrincipal.LABEOnStepIdentification.Caption := AIdentification;
202+
203+ FormPrincipal.IMAGAtHome.Hide;
204+ FormPrincipal.IMAGParked.Hide;
205+ FormPrincipal.IMAGTracking.Hide;
206+ FormPrincipal.IMAGGoTo.Hide;
207+
208+ FormPrincipal.IMAGAtHome.Visible := TOnStepStatuses.AtHome in AStatus;
209+ FormPrincipal.IMAGParked.Visible := not (TOnStepStatuses.NotParked in AStatus);
210+ FormPrincipal.IMAGTracking.Visible := not (TOnStepStatuses.NotTracking in AStatus);
211+ FormPrincipal.IMAGGoTo.Visible := not (TOnStepStatuses.NotGoTo in AStatus);
212+ end;
213+end;
214+
215+procedure TDamoPrincipal.HideBalloonHint;
216+begin
217+ KRBHPrincipal.Hide;
218+end;
219+
220+procedure TDamoPrincipal.MSG;
221+begin
222+// ShowMessage(Inttostr(SendMessage(FKRBH.ToolTipWindowHandle,TTM_GETTOOLCOUNT,0,0)));
223+
224+var T: TToolInfo := Default(TToolInfo);
225+T.cbSize := SizeOf(TToolInfo);
226+
227+SendMessage(FKRBH.ToolTipWindowHandle,TTM_ENUMTOOLS,0,LPARAM(@T));
228+SendMessage(FKRBH.ToolTipWindowHandle,TTM_ENUMTOOLS,1,LPARAM(@T));
229+
230+T := Default(TToolInfo);
231+T.cbSize := SizeOf(TToolInfo);
232+
233+if SendMessage(FKRBH.ToolTipWindowHandle,TTM_GETCURRENTTOOL,0,LPARAM(@T)) > 0 then
234+ ShowMessage('tem');
235+
236+end;
237+
238+type
239+ TControlHack = class(TControl);
240+
241+procedure TDamoPrincipal.ConfigureBalloonHint(AControl: TControl);
242+var
243+ Icon: HICON;
244+begin
245+ Icon := LoadIcon(HInstance,PWideChar(UpperCase(AControl.Name)));
246+
247+ if Icon > 0 then
248+ begin
249+ AControl.Hint := AControl.Hint + '|' + IntToStr(Icon);
250+ DestroyIcon(Icon);
251+ end;
252+
253+ TControlHack(AControl).OnMouseEnter := HandleMouseEnter;
254+ TControlHack(AControl).OnMouseLeave := HandleMouseLeave;
255+end;
256+
257+procedure TDamoPrincipal.PausePooling;
258+begin
259+ FOnStepInfo.Pause;
260+end;
261+
262+procedure TDamoPrincipal.ShowBalloonHint(AControl: TControl);
263+begin
264+ // Remove o controle que já existe (se houver um) e atribui o novo controle.
265+ // Isso é necessário porque o TKRKBalloonHint é concebido para servir a apenas
266+ // um controle de cada vez e ser configurado completamente via Object
267+ // Inspector. Esse é o mesmo motivo pelo qual eu também desativo e ativo a
268+ // propriedade AutoGetTexts e altero a posição TipAlignmente para algo
269+ // diferente de taCenter
270+ KRBHPrincipal.AssociatedControl := nil;
271+ KRBHPrincipal.AssociatedControl := AControl;
272+ KRBHPrincipal.AutoGetTexts := False;
273+ KRBHPrincipal.AutoGetTexts := True;
274+ KRBHPrincipal.TipAlignment := taTopLeft;
275+ KRBHPrincipal.Show(taCenter);
276+end;
277+
278+procedure TDamoPrincipal.ShowFrame(AFrameClass: TFramBasicoClass; AAction: TAction);
279+var
280+ Frame: TFramBasico;
281+begin
282+ Frame := FrameByClassName(AFrameClass.ClassName);
283+
284+ if not Assigned(Frame) then
285+ begin
286+ Frame := AFrameClass.Create(Self,AAction);
287+ FFrameList.Add(Frame);
288+ end
289+ else
290+ begin
291+ FVisibleFrame.Parent := nil;
292+ FVisibleFrame.Action.Enable;
293+ end;
294+
295+ FVisibleFrame := Frame;
296+ FVisibleFrame.Parent := TForm(Owner);
297+ FVisibleFrame.Action.Disable;
298+end;
299+
300+procedure TDamoPrincipal.StartPooling;
301+begin
302+ if FOnStepInfo.Started then
303+ FOnStepInfo.Restart
304+ else
305+ FOnStepInfo.Start;
306+end;
307+
308+end.
--- trunk/src/UFormPrincipal.pas (nonexistent)
+++ trunk/src/UFormPrincipal.pas (revision 4)
@@ -0,0 +1,179 @@
1+unit UFormPrincipal;
2+
3+interface
4+
5+uses
6+ Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
7+ System.Classes, Vcl.Graphics, Vcl.ComCtrls, Vcl.Controls, Vcl.StdCtrls,
8+ Vcl.Forms, UDamoPrincipal, Vcl.ToolWin, Vcl.ActnMan, Vcl.ActnCtrls,
9+ Vcl.ActnMenus, System.Actions, Vcl.ActnList,
10+ Vcl.PlatformDefaultStyleActnCtrls, Vcl.ExtCtrls, Vcl.Imaging.pngimage,
11+ KRK.Vcl.StdCtrls;
12+
13+type
14+ TFormPrincipal = class(TForm)
15+ AMMBPrincipal: TActionMainMenuBar;
16+ AMANPrincipal: TActionManager;
17+ ACTNConexaoViaRedeSemFio: TAction;
18+ ACTNLocaisDeObservacao: TAction;
19+ ACTNConexaoUsb: TAction;
20+ ACTNSobre: TAction;
21+ KRPAFooter: TKRKPanel;
22+ IMAGTipoDeConexao: TImage;
23+ LABEOnStepIdentification: TLabel;
24+ LABEOnStepStatus: TLabel;
25+ IMAGAtHome: TImage;
26+ PANEStatus: TPanel;
27+ IMAGParked: TImage;
28+ IMAGTracking: TImage;
29+ IMAGGoTo: TImage;
30+ BUTNToggleToolTip: TButton;
31+ BUTN: TButton;
32+ BUTN3: TButton;
33+ BUTN4: TButton;
34+ BUTN5: TButton;
35+ procedure ACTNLocaisDeObservacaoExecute(Sender: TObject);
36+ procedure FormShow(Sender: TObject);
37+ procedure FormCreate(Sender: TObject);
38+ procedure BUTNToggleToolTipClick(Sender: TObject);
39+ procedure BUTNClick(Sender: TObject);
40+ procedure BUTN3Click(Sender: TObject);
41+ procedure BUTN4Click(Sender: TObject);
42+ procedure BUTN5Click(Sender: TObject);
43+ private
44+ { Private declarations }
45+ FDamoPrincipal: TDamoPrincipal;
46+ procedure HandleNotifyMessages(var AMessage: TWMNotify); message WM_NOTIFY;
47+ public
48+ { Public declarations }
49+ constructor Create(AOwner: TComponent); override;
50+ end;
51+
52+var
53+ FormPrincipal: TFormPrincipal;
54+
55+implementation
56+
57+{$R *.dfm}
58+
59+uses
60+ UFramLocaisDeObservacao, CommCtrl, KRK.Rtl.Win.CommCtrl;
61+
62+{ TFormPrincipal }
63+
64+procedure TFormPrincipal.ACTNLocaisDeObservacaoExecute(Sender: TObject);
65+begin
66+ FDamoPrincipal.ShowFrame(TFramLocaisDeObservacao,TAction(Sender));
67+end;
68+
69+var
70+ v1, v11, v2, v22: Boolean;
71+
72+procedure TFormPrincipal.BUTN3Click(Sender: TObject);
73+begin
74+ if v11 then
75+ begin
76+ FDamoPrincipal.h11;
77+ v11 := False;
78+ end
79+ else
80+ begin
81+ FDamoPrincipal.s11;
82+ v11 := True;
83+ end;
84+end;
85+
86+procedure TFormPrincipal.BUTN4Click(Sender: TObject);
87+begin
88+ if v22 then
89+ begin
90+ FDamoPrincipal.h22;
91+ v22 := False;
92+ end
93+ else
94+ begin
95+ FDamoPrincipal.s22;
96+ v22 := True;
97+ end;
98+end;
99+
100+procedure TFormPrincipal.BUTN5Click(Sender: TObject);
101+begin
102+ FDamoPrincipal.MSG;
103+end;
104+
105+procedure TFormPrincipal.BUTNClick(Sender: TObject);
106+begin
107+ if v2 then
108+ begin
109+ FDamoPrincipal.h2;
110+ v2 := False;
111+ end
112+ else
113+ begin
114+ FDamoPrincipal.s2;
115+ v2 := True;
116+ end;
117+end;
118+
119+procedure TFormPrincipal.BUTNToggleToolTipClick(Sender: TObject);
120+begin
121+ if v1 then
122+ begin
123+ FDamoPrincipal.h1;
124+ v1 := False;
125+ end
126+ else
127+ begin
128+ FDamoPrincipal.s1;
129+ v1 := True;
130+ end;
131+end;
132+
133+constructor TFormPrincipal.Create(AOwner: TComponent);
134+begin
135+ // Anteriormente eu criva FDamoPrincipal antes de inherited, porque eu
136+ // imaginava que inherited "finalizava" a construção da classe, o que
137+ // executaria o evento OnCreate, mas isso não é verdade. Inherited, como se
138+ // sabe, apenas executa o construtor da classe pai. O evento OnCreate só é
139+ // executado APÓS a finalização total do construtor, portanto, não importa
140+ // neste caso onde se cria FDamoPrincipal, pois no evento OnCreate ele estará
141+ // disponível com certeza! Com isso em mente eu acredito que dificilmente
142+ // alguma implementação deva de fato criar coisas antes do Inherited. Aqui
143+ // mesmo, fazer isso estava causando a limpeza do membro FToolInfo.lpszText
144+ // (em TKRKBalloonHint) e eu não sei porque isso aconteceu, pois não faz muito
145+ // sentido. Como a mudança de criação de FDamoPrincipal para depois de
146+ // inherited não quebrou o OnCreate deste form e ainda solucionou outro
147+ // problema, então preferi manter desse modo ao invés de investigar mais
148+ inherited;
149+ FDamoPrincipal := TDamoPrincipal.Create(Self);
150+end;
151+
152+procedure TFormPrincipal.FormCreate(Sender: TObject);
153+begin
154+ FDamoPrincipal.ConfigureBalloonHint(IMAGAtHome);
155+ FDamoPrincipal.ConfigureBalloonHint(IMAGGoTo);
156+ FDamoPrincipal.ConfigureBalloonHint(IMAGParked);
157+ FDamoPrincipal.ConfigureBalloonHint(IMAGTracking);
158+end;
159+
160+procedure TFormPrincipal.FormShow(Sender: TObject);
161+begin
162+// FDamoPrincipal.StartPooling;
163+// comitar o krakatoa depois de incluir nele a opção de uso do wordwrap
164+// nao esquecer de comentar que caso algo errado aconteça, que basta reverter os fontes para uma versão anterior
165+end;
166+
167+procedure TFormPrincipal.HandleNotifyMessages(var AMessage: TWMNotify);
168+var
169+ Link: TNMLink;
170+begin
171+ if Assigned(AMessage.NMHdr) and (AMessage.NMHdr.code = TTN_LINKCLICK) then
172+ begin
173+ Link := PNMLink(AMessage.NMHdr)^;
174+
175+ Application.MessageBox(PChar('O link clicado tem href="' + Link.item.szUrl + '" e id="' + Link.item.szID + '" e seu índice é "' + Link.item.iLink.ToString + '"'),'Sou foda!',MB_ICONINFORMATION);
176+ end;
177+end;
178+
179+end.
--- trunk/src/UFramBasico.pas (nonexistent)
+++ trunk/src/UFramBasico.pas (revision 4)
@@ -0,0 +1,51 @@
1+unit UFramBasico;
2+
3+interface
4+
5+uses
6+ Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
7+ Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ActnList,
8+ Vcl.ExtCtrls, KRK.Vcl.StdCtrls, Vcl.Imaging.pngimage;
9+
10+type
11+ TFramBasico = class(TFrame)
12+ KRPACabecalho: TKRKPanel;
13+ LABETitulo: TLabel;
14+ IMAGTitulo: TImage;
15+ IMAGHelp: TImage;
16+ procedure IMAGHelpClick(Sender: TObject);
17+ private
18+ { Private declarations }
19+ FAction: TAction;
20+ protected
21+ procedure ShowHelp; virtual;
22+ public
23+ { Public declarations }
24+ constructor Create(AOwner: TComponent; AAction: TAction); reintroduce;
25+
26+ property Action: TAction read FAction;
27+ end;
28+
29+implementation
30+
31+{$R *.dfm}
32+
33+{ TFramBasico }
34+
35+constructor TFramBasico.Create(AOwner: TComponent; AAction: TAction);
36+begin
37+ inherited Create(AOwner);
38+ FAction := AAction;
39+end;
40+
41+procedure TFramBasico.IMAGHelpClick(Sender: TObject);
42+begin
43+ ShowHelp;
44+end;
45+
46+procedure TFramBasico.ShowHelp;
47+begin
48+ Application.MessageBox('Ajuda indisponível','Ajuda indisponível',MB_ICONWARNING);
49+end;
50+
51+end.
--- trunk/src/UFramLocaisDeObservacao.pas (nonexistent)
+++ trunk/src/UFramLocaisDeObservacao.pas (revision 4)
@@ -0,0 +1,37 @@
1+unit UFramLocaisDeObservacao;
2+
3+interface
4+
5+uses
6+ Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
7+ Vcl.Controls, Vcl.Forms, Vcl.Dialogs, UFramBasico, Vcl.StdCtrls, Vcl.ExtCtrls,
8+ KRK.Vcl.StdCtrls, Vcl.Imaging.pngimage, Vcl.ComCtrls;
9+
10+type
11+ TFramLocaisDeObservacao = class(TFramBasico)
12+ PACOLocaisDeObservacao: TPageControl;
13+ TASHLocal1: TTabSheet;
14+ TASHLocal2: TTabSheet;
15+ TASHLocal3: TTabSheet;
16+ TASHLocal4: TTabSheet;
17+ private
18+ { Private declarations }
19+ protected
20+ procedure ShowHelp; override;
21+ public
22+ { Public declarations }
23+ end;
24+
25+implementation
26+
27+{$R *.dfm}
28+
29+{ TFramLocaisDeObservacao }
30+
31+procedure TFramLocaisDeObservacao.ShowHelp;
32+begin
33+// inherited;
34+ Application.MessageBox('A ajuda para a funcionalidade "Locais de Observação" não está disponível','Ajuda indisponível',MB_ICONWARNING);
35+end;
36+
37+end.
--- trunk/src/UFuncoes.pas (nonexistent)
+++ trunk/src/UFuncoes.pas (revision 4)
@@ -0,0 +1,106 @@
1+unit UFuncoes;
2+
3+interface
4+
5+uses
6+ UTipos;
7+
8+// Funções que retornam um resultado formatado que pode ser exibido diretamente
9+function GetOnStepIdentification: String;
10+// Funções que retonrnam dados nos formatos nativos
11+function GetFirmwareName: String;
12+function GetFirmwareNumber: String;
13+function GetFirmwareDate: TDate;
14+function GetFirmwareTime: TTime;
15+function GetStatus: TOnStepStatus;
16+
17+implementation
18+
19+uses
20+ KRK.Network.WinSock2, System.SysUtils, WinApi.Windows;
21+
22+type
23+ LPCOLESTR = PChar; // ansi em delphis ansi e wide em delphis unicode
24+
25+function VarDateFromStr(const AStrIn: LPCOLESTR; ALCID: DWORD; ADWFlags: Integer; out ADateOut: TDateTime): HRESULT; stdcall; external 'OleAut32.dll';
26+
27+const
28+ // Vao se transformar em configs,
29+ A = 'ESP-E12BEC.feitoza.net.br';
30+ B = 9999;
31+
32+function ParseStringResult(ARawResult: String): String;
33+begin
34+ Result := Copy(ARawResult,1,Pred(Pos('#',ARawResult)));
35+end;
36+
37+function ParseDate_MMM_DD_YYYY_Result(AResultadoCru: String): TDate;
38+begin
39+ Result := 0;
40+
41+ AResultadoCru := ParseStringResult(AResultadoCru);
42+
43+ // 1033 = en-US, pois o resultado é no formato mmm dd yyyy, onde mmm é o nome
44+ // abreviado dos meses em inglês. A unit Variants possui a função
45+ // VarToDateTime que no fim das contas chama VarDateFromStr, mas não pude usar
46+ // ela aqui porque internamente ela considera o locale padrão do Windows,
47+ // portanto, pt-BR e como eu queria usar en-US eu tive de usar minha própria
48+ // versão
49+ VarDateFromStr(PChar(AResultadoCru),1033,0,TDateTime(Result));
50+end;
51+
52+function ParseTimeResult(AResultadoCru: String): TTime;
53+begin
54+ AResultadoCru := ParseStringResult(AResultadoCru);
55+
56+ Result := StrToTime(AResultadoCru);
57+end;
58+
59+function ParseStatusResult(AResultadoCru: String): TOnStepStatus;
60+begin
61+ Result := [];
62+
63+ AResultadoCru := ParseStringResult(AResultadoCru);
64+
65+ for var i: Byte := 1 to Length(AResultadoCru) do
66+ // Apenas retorna os valores que são caracteres, descartando os valores
67+ // finais que são números
68+ if not CharInSet(AResultadoCru[i],['0'..'9']) then
69+ Result := Result + [TOnStepStatuses(Ord(AResultadoCru[i]))];
70+end;
71+
72+function GetFirmwareName: String;
73+begin
74+ Result := ParseStringResult(SendSynchronousSocketMessage(A,B,':GVP#'));
75+end;
76+
77+function GetFirmwareNumber: String;
78+begin
79+ Result := ParseStringResult(SendSynchronousSocketMessage(A,B,':GVN#'));
80+end;
81+
82+function GetFirmwareDate: TDate;
83+begin
84+ Result := ParseDate_MMM_DD_YYYY_Result(SendSynchronousSocketMessage(A,B,':GVD#'));
85+end;
86+
87+function GetFirmwareTime: TTime;
88+begin
89+ Result := ParseTimeResult(SendSynchronousSocketMessage(A,B,':GVT#'));
90+end;
91+
92+function GetOnStepIdentification: String;
93+var
94+ DataCompleta: TDateTime;
95+begin
96+ DataCompleta := GetFirmwareDate + GetFirmwareTime;
97+
98+ Result := 'Firmware ' + GetFirmwareName + ' ' + GetFirmwareNumber + ' (compilado em ' + FormatDateTime('dddddd',DataCompleta) + ')';
99+end;
100+
101+function GetStatus: TOnStepStatus;
102+begin
103+ Result := ParseStatusResult(SendSynchronousSocketMessage(A,B,':GU#'));
104+end;
105+
106+end.
--- trunk/src/UOnStepInfo.pas (nonexistent)
+++ trunk/src/UOnStepInfo.pas (revision 4)
@@ -0,0 +1,176 @@
1+unit UOnStepInfo;
2+
3+interface
4+
5+uses
6+ System.Classes, System.SyncObjs, System.SysUtils, UFuncoes, UTipos;
7+
8+type
9+ TOnInfo = procedure (AIdentification: String; AStatus: TOnStepStatus) of object;
10+ // https://www.zettaomnis.net.br/portal/a2d-mei/articles-a2d-mei/230-usando-tevent-para-controlar-a-execucao-de-uma-thread.html
11+ // Como criar sockets bloqueantes com TClientSocket:
12+ // https://edn.embarcadero.com/article/26693
13+ // Como lidar com exceções dentro de TThread:
14+ // https://edn.embarcadero.com/article/10452
15+ TOnStepInfo = class(TThread)
16+ private
17+ FPauseRestart: TEvent;
18+ FTimeOut: TEvent;
19+ FTimeOutValue: Byte;
20+ FOnInfo: TOnInfo;
21+ FOnStepIdentification: String;
22+ FOnStepStatus: TOnStepStatus;
23+ FException: Exception;
24+
25+ procedure DoExecute;
26+ procedure ForwareException;
27+ procedure DoForwareException;
28+ procedure ClearAllInfo;
29+ protected
30+ procedure Execute; override;
31+ public
32+ constructor Create(ATimeOutValue: Byte); reintroduce; // ATimeOutValue em segundos
33+ destructor Destroy; override;
34+
35+ procedure Pause;
36+ procedure Restart;
37+
38+ property OnInfo: TOnInfo read FOnInfo write FOnInfo;
39+ end;
40+
41+implementation
42+
43+uses
44+ Winapi.Windows, Winapi.Messages, Vcl.Forms;
45+
46+{ TPooling }
47+
48+procedure TOnStepInfo.ClearAllInfo;
49+begin
50+ // logar a mensagem de erro em alguma propriedade da própria thread e fazer
51+ // essa propriedade acessível externamente, assim é possivel obter a lista de
52+ // exceções
53+ FOnStepIdentification := 'Falha na obtenção de dados';
54+ FOnStepStatus := [];
55+end;
56+
57+constructor TOnStepInfo.Create(ATimeOutValue: Byte);
58+begin
59+ inherited Create(True);
60+
61+ FPauseRestart := nil;
62+ FTimeOut := nil;
63+ FTimeOutValue := ATimeOutValue;
64+end;
65+
66+destructor TOnStepInfo.Destroy;
67+begin
68+ Terminate;
69+
70+ if Assigned(FTimeOut) then
71+ begin
72+ FTimeOut.SetEvent;
73+ FTimeOut.Free;
74+ end;
75+
76+ if Assigned(FPauseRestart) then
77+ begin
78+ FPauseRestart.SetEvent;
79+ FPauseRestart.Free;
80+ end;
81+
82+ inherited;
83+end;
84+
85+procedure TOnStepInfo.DoExecute;
86+begin
87+ if Assigned(FOnInfo) then
88+ FOnInfo(FOnStepIdentification,FOnStepStatus);
89+end;
90+
91+procedure TOnStepInfo.Execute;
92+var
93+ WR: TWaitResult;
94+begin
95+ // O bloco try..except mais externo lida com exceções ocorridas fora do loop
96+ // da thread, as quais realmente precisam ser repassadas ao usuário
97+ try
98+ FPauseRestart := TEvent.Create(nil,True,True,'Pause/Restart');
99+ // --- ---- ---- -----
100+ // | | | |
101+ // | | | \......> Nome único para a instância, do contrário, será usado o já existente
102+ // | | \............> Podemos já criar SINALIZADO (no caso isso significa que a thread não estará pausada inicialmente)
103+ // | \.................> Indica se será resetado MANUALMENTE ou AUTOMATICAMENTE
104+ // \......................> Atributos, nil basta na maioria das necessidades
105+ FTimeOut := TEvent.Create(nil,False,False,'TimeOut');
106+
107+ while not Terminated do
108+ begin
109+ WR := FPauseRestart.WaitFor(INFINITE);
110+
111+ if not Terminated then
112+ case WR of
113+ wrSignaled: begin
114+ try
115+ FOnStepIdentification := GetOnStepIdentification;
116+ FOnStepStatus := GetStatus;
117+ except
118+ ClearAllInfo;
119+ end;
120+
121+ Synchronize(DoExecute);
122+
123+ FTimeOut.WaitFor(FTimeOutValue * 1000);
124+ end;
125+ end;
126+ end;
127+ except
128+ // Se você usar aqui algo como Synchronize(ForwardException), dentro de
129+ // ForwardException você não tem acesso a ExceptObject e é por isso que foi
130+ // feito da forma que está. Para saber de onde eu tirei essa ideia, acesse
131+ // "Como lidar com exceções dentro de TThread" em
132+ // https://edn.embarcadero.com/article/10452
133+ // No futuro faça uma tradução deste texto
134+ ForwareException;
135+ end;
136+end;
137+
138+procedure TOnStepInfo.DoForwareException;
139+begin
140+ // Cancel the mouse capture (não sei o efeito real disso, mas é
141+ // interessante seu uso aqui. Talvez isso tenha )
142+ if GetCapture <> 0 then
143+ SendMessage(GetCapture, WM_CANCELMODE, 0, 0);
144+
145+ // Now actually show the exception
146+ if FException is Exception then
147+ Application.ShowException(FException)
148+ else
149+ System.SysUtils.ShowException(FException, nil);
150+end;
151+
152+procedure TOnStepInfo.ForwareException;
153+begin
154+ FException := Exception(ExceptObject);
155+ try
156+ // Ignorar tudo que for EAbort. O resto, passa pra aplicação
157+ if not (FException is EAbort) then
158+ Synchronize(DoForwareException);
159+ finally
160+ FException := nil;
161+ end;
162+end;
163+
164+procedure TOnStepInfo.Pause;
165+begin
166+ if Started and Assigned(FPauseRestart) then
167+ FPauseRestart.ResetEvent;
168+end;
169+
170+procedure TOnStepInfo.Restart;
171+begin
172+ if Started and Assigned(FPauseRestart) then
173+ FPauseRestart.SetEvent;
174+end;
175+
176+end.
--- trunk/src/UTipos.pas (nonexistent)
+++ trunk/src/UTipos.pas (revision 4)
@@ -0,0 +1,29 @@
1+unit UTipos;
2+
3+interface
4+
5+type
6+ TOnStepStatuses = (NotTracking = Ord('n'),NotGoTo = Ord('N')
7+ ,NotParked = Ord('p'),Parking = Ord('I'),Parked = Ord('P')
8+ ,ParkFailed = Ord('F'),PECRecorded = Ord('R')
9+ ,SyncToEncodersOnly = Ord('e'),AtHome = Ord('H')
10+ ,PPSSync = Ord('S'),GuideActive = Ord('G')
11+ ,RefrEnabled = Ord('r'),SingleAxis = Ord('s')
12+ ,OnTrackEnabled = Ord('t'),WaitingAtHome = Ord('w')
13+ ,PauseAtHomeEnabled = Ord('u'),BuzzerEnabled = Ord('z')
14+ ,AutoMeridianFlip = Ord('a'),PECIgnore = Ord('/')
15+ ,PECReadyToLay = Ord(','),PECLaying = Ord('~')
16+ ,PECReadyToEncord = Ord(';'),PECEncording = Ord('^')
17+ ,MountGem = Ord('E'),MountFork = Ord('K')
18+ ,MountAltazm = Ord('A'),PierSideNone = Ord('o')
19+ ,PierSideEast = Ord('T'),PierSideWest = Ord('W')
20+ { Após estes status o OnStep retorna 3 números que eu
21+ imagino serem, respectivamente, PulseGuideRate, GuideRate e
22+ generalError. Não tenho certeza porque a programação
23+ existente em Command.ino é muito estranha }
24+ );
25+ TOnStepStatus = set of TOnStepStatuses;
26+
27+implementation
28+
29+end.
Show on old repository browser