├── AndroidManifest.template.xml ├── Entitlement.TemplateOSX32.xml ├── Entitlement.TemplateiOS.xml ├── Images ├── 01.png ├── 02.png ├── 03.png ├── 04.png ├── 09.png ├── 10.png ├── 11.png ├── 13.png ├── 50.png └── background.jpg ├── MainFrm.fmx ├── MainFrm.pas ├── OW.API.pas ├── OW.Consts.pas ├── OW.Data.pas ├── OW.Graphics.Net.Helpers.pas ├── OpenWeather.res ├── OpenWeatherDemo.dpr ├── OpenWeatherDemo.dproj ├── README.md ├── info.plist.TemplateOSX.xml └── info.plist.TemplateiOS.xml /AndroidManifest.template.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | 11 | <%uses-permission%> 12 | 13 | 21 | 22 | <%application-meta-data%> 23 | <%services%> 24 | 26 | 30 | 31 | 33 | 34 | 35 | 36 | 37 | 38 | <%activity%> 39 | <%receivers%> 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Entitlement.TemplateOSX32.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | <%appSandboxKeys%> 6 | 7 | 8 | -------------------------------------------------------------------------------- /Entitlement.TemplateiOS.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | <%getTaskAllowKey%> 6 | <%applicationIdentifier%> 7 | <%pushNotificationKey%> 8 | <%keychainAccessGroups%> 9 | 10 | 11 | -------------------------------------------------------------------------------- /Images/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DelphiWorlds/OpenWeatherDemo/7080d75d93da19e24a9fab521428fe37ba093850/Images/01.png -------------------------------------------------------------------------------- /Images/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DelphiWorlds/OpenWeatherDemo/7080d75d93da19e24a9fab521428fe37ba093850/Images/02.png -------------------------------------------------------------------------------- /Images/03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DelphiWorlds/OpenWeatherDemo/7080d75d93da19e24a9fab521428fe37ba093850/Images/03.png -------------------------------------------------------------------------------- /Images/04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DelphiWorlds/OpenWeatherDemo/7080d75d93da19e24a9fab521428fe37ba093850/Images/04.png -------------------------------------------------------------------------------- /Images/09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DelphiWorlds/OpenWeatherDemo/7080d75d93da19e24a9fab521428fe37ba093850/Images/09.png -------------------------------------------------------------------------------- /Images/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DelphiWorlds/OpenWeatherDemo/7080d75d93da19e24a9fab521428fe37ba093850/Images/10.png -------------------------------------------------------------------------------- /Images/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DelphiWorlds/OpenWeatherDemo/7080d75d93da19e24a9fab521428fe37ba093850/Images/11.png -------------------------------------------------------------------------------- /Images/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DelphiWorlds/OpenWeatherDemo/7080d75d93da19e24a9fab521428fe37ba093850/Images/13.png -------------------------------------------------------------------------------- /Images/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DelphiWorlds/OpenWeatherDemo/7080d75d93da19e24a9fab521428fe37ba093850/Images/50.png -------------------------------------------------------------------------------- /Images/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DelphiWorlds/OpenWeatherDemo/7080d75d93da19e24a9fab521428fe37ba093850/Images/background.jpg -------------------------------------------------------------------------------- /MainFrm.pas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DelphiWorlds/OpenWeatherDemo/7080d75d93da19e24a9fab521428fe37ba093850/MainFrm.pas -------------------------------------------------------------------------------- /OW.API.pas: -------------------------------------------------------------------------------- 1 | unit OW.API; 2 | 3 | interface 4 | 5 | uses 6 | OW.Data; 7 | 8 | type 9 | TOpenWeatherByCoordsEvent = procedure(Sender: TObject; const ByCoords: TOpenWeatherByCoords) of object; 10 | 11 | TOpenWeatherRequest = (ByCoords); 12 | 13 | TOpenWeatherAPI = class(TObject) 14 | private 15 | FOnByCoords: TOpenWeatherByCoordsEvent; 16 | procedure DoByCoords(const AByCoords: TOpenWeatherByCoords); 17 | procedure DoProcessContent(const AContent: string; const ARequest: TOpenWeatherRequest); 18 | procedure DoProcessContentByCoords(const AContent: string); 19 | procedure DoSendRequest(const AURL: string; const ARequest: TOpenWeatherRequest); 20 | public 21 | procedure GetByCoords(const ALatitude, ALongitude: Double); 22 | property OnByCoords: TOpenWeatherByCoordsEvent read FOnByCoords write FOnByCoords; 23 | end; 24 | 25 | implementation 26 | 27 | uses 28 | System.Classes, System.Threading, System.SysUtils, System.Net.HttpClient, System.NetEncoding, 29 | REST.Json, 30 | OW.Consts; 31 | 32 | { TOpenWeatherAPI } 33 | 34 | procedure TOpenWeatherAPI.DoProcessContent(const AContent: string; const ARequest: TOpenWeatherRequest); 35 | begin 36 | case ARequest of 37 | TOpenWeatherRequest.ByCoords: 38 | DoProcessContentByCoords(AContent); 39 | end; 40 | end; 41 | 42 | procedure TOpenWeatherAPI.DoProcessContentByCoords(const AContent: string); 43 | var 44 | LByCoords: TOpenWeatherByCoords; 45 | begin 46 | try 47 | LByCoords := TJson.JsonToObject(AContent); 48 | TThread.Synchronize(nil, 49 | procedure 50 | begin 51 | DoByCoords(LByCoords); 52 | end 53 | ); 54 | except 55 | // Left as an exercise to the reader 56 | end; 57 | end; 58 | 59 | procedure TOpenWeatherAPI.DoByCoords(const AByCoords: TOpenWeatherByCoords); 60 | begin 61 | if Assigned(FOnByCoords) then 62 | FOnByCoords(Self, AByCoords); 63 | end; 64 | 65 | procedure TOpenWeatherAPI.DoSendRequest(const AURL: string; const ARequest: TOpenWeatherRequest); 66 | var 67 | LHTTP: THTTPClient; 68 | LResponse: IHTTPResponse; 69 | begin 70 | LHTTP := THTTPClient.Create; 71 | try 72 | LResponse := LHTTP.Get(AURL); 73 | if LResponse.StatusCode = cHTTPResultOK then 74 | DoProcessContent(LResponse.ContentAsString, ARequest) 75 | else ; // Left as an exercise to the reader 76 | finally 77 | LHTTP.Free; 78 | end; 79 | end; 80 | 81 | procedure TOpenWeatherAPI.GetByCoords(const ALatitude, ALongitude: Double); 82 | var 83 | LQuery: string; 84 | begin 85 | LQuery := Format(cOpenWeatherByCoordsQuery, [cOpenWeatherAPIKey, ALatitude, ALongitude]); 86 | TTask.Run( 87 | procedure 88 | begin 89 | DoSendRequest(cOpenWeatherByCoordsURL + LQuery, TOpenWeatherRequest.ByCoords); 90 | end 91 | ); 92 | end; 93 | 94 | end. 95 | -------------------------------------------------------------------------------- /OW.Consts.pas: -------------------------------------------------------------------------------- 1 | unit OW.Consts; 2 | 3 | interface 4 | 5 | const 6 | cHTTPResultOK = 200; 7 | cOpenWeatherWeatherImagesURL = 'http://openweathermap.org/img/w/'; 8 | cOpenWeatherByCoordsURL = 'http://api.openweathermap.org/data/2.5/weather?'; 9 | cOpenWeatherByCoordsQuery = 'APPID=%s&lat=%.4f&lon=%.4f'; 10 | cOpenWeatherAPIKey = You need to supply one 11 | 12 | implementation 13 | 14 | end. 15 | -------------------------------------------------------------------------------- /OW.Data.pas: -------------------------------------------------------------------------------- 1 | unit OW.Data; 2 | 3 | interface 4 | 5 | (* 6 | Example: 7 | 8 | { 9 | "coord":{ 10 | "lon":138.58, 11 | "lat":-34.89 12 | }, 13 | "weather":[ 14 | { 15 | "id":800, 16 | "main":"Clear", 17 | "description":"clear sky", 18 | "icon":"01d" 19 | } 20 | ], 21 | "base":"stations", 22 | "main":{ 23 | "temp":292.15, 24 | "pressure":1020, 25 | "humidity":42, 26 | "temp_min":292.15, 27 | "temp_max":292.15 28 | }, 29 | "visibility":10000, 30 | "wind":{ 31 | "speed":5.7, 32 | "deg":240 33 | }, 34 | "clouds":{ 35 | "all":0 36 | }, 37 | "dt":1494738000, 38 | "sys":{ 39 | "type":1, 40 | "id":8204, 41 | "message":0.0044, 42 | "country":"AU", 43 | "sunrise":1494711125, 44 | "sunset":1494748298 45 | }, 46 | "id":2062944, 47 | "name":"Prospect", 48 | "cod":200 49 | } 50 | 51 | *) 52 | 53 | type 54 | TOpenWeatherCoords = class(TObject) 55 | private 56 | Flon: Double; 57 | Flat: Double; 58 | public 59 | property lon: Double read Flon; 60 | property lat: Double read Flat; 61 | end; 62 | 63 | TOpenWeatherSys = class(TObject) 64 | private 65 | Fcountry: string; 66 | Fsunrise: Integer; 67 | Fsunset: Integer; 68 | public 69 | property country: string read Fcountry; 70 | property sunrise: Integer read Fsunrise; 71 | property sunset: Integer read Fsunset; 72 | end; 73 | 74 | TOpenWeatherWeatherItem = class(TObject) 75 | private 76 | Fid: Integer; 77 | Fmain: string; 78 | Fdescription: string; 79 | Ficon: string; 80 | public 81 | property id: Integer read Fid; 82 | property main: string read Fmain; 83 | property description: string read Fdescription; 84 | property icon: string read Ficon; 85 | end; 86 | 87 | TOpenWeatherWeather = array of TOpenWeatherWeatherItem; 88 | 89 | TOpenWeatherMain = class(TObject) 90 | private 91 | Ftemp: Double; 92 | Fhumidity: Double; 93 | Fpressure: Double; 94 | Ftemp_min: Double; 95 | Ftemp_max: Double; 96 | public 97 | property temp: Double read Ftemp; 98 | property humidity: Double read Fhumidity; 99 | property pressure: Double read Fpressure; 100 | property temp_min: Double read Ftemp_min; 101 | property temp_max: Double read Ftemp_max; 102 | end; 103 | 104 | TOpenWeatherWind = class(TObject) 105 | private 106 | Fspeed: Double; 107 | Fdegrees: Double; 108 | public 109 | property speed: Double read Fspeed; 110 | property degrees: Double read Fdegrees; 111 | end; 112 | 113 | TOpenWeatherClouds = class(TObject) 114 | private 115 | Fall: Double; 116 | public 117 | property all: Double read Fall; 118 | end; 119 | 120 | TOpenWeatherRain = class(TObject) 121 | private 122 | F3h: Double; 123 | public 124 | property vol3h: Double read F3h; 125 | end; 126 | 127 | TOpenWeatherByCoords = class(TObject) 128 | private 129 | Fcoord: TOpenWeatherCoords; 130 | Fsys: TOpenWeatherSys; 131 | Fweather: TOpenWeatherWeather; 132 | Fmain: TOpenWeatherMain; 133 | Fwind: TOpenWeatherWind; 134 | Frain: TOpenWeatherRain; 135 | Fclouds: TOpenWeatherClouds; 136 | Fdt: Integer; 137 | Fid: Integer; 138 | Fname: string; 139 | Fcod: Integer; 140 | public 141 | property coord: TOpenWeatherCoords read Fcoord; 142 | property sys: TOpenWeatherSys read Fsys; 143 | property weather: TOpenWeatherWeather read Fweather; 144 | property main: TOpenWeatherMain read Fmain; 145 | property wind: TOpenWeatherWind read Fwind; 146 | property rain: TOpenWeatherRain read Frain; 147 | property clouds: TOpenWeatherClouds read Fclouds; 148 | property dt: Integer read Fdt; 149 | property id: Integer read Fid; 150 | property name: string read Fname; 151 | property cod: Integer read Fcod; 152 | end; 153 | 154 | implementation 155 | 156 | end. 157 | -------------------------------------------------------------------------------- /OW.Graphics.Net.Helpers.pas: -------------------------------------------------------------------------------- 1 | unit OW.Graphics.Net.Helpers; 2 | 3 | interface 4 | 5 | uses 6 | System.Classes, 7 | FMX.Graphics; 8 | 9 | type 10 | TBitmapHelper = class helper for TBitmap 11 | private 12 | procedure DoLoadFromURL(const AURL: string); 13 | procedure SynchedLoadFromStream(const AStream: TStream); 14 | public 15 | procedure LoadFromURL(const AURL: string); 16 | end; 17 | 18 | implementation 19 | 20 | uses 21 | System.Threading, System.Net.HttpClient; 22 | 23 | { TBitmapHelper } 24 | 25 | procedure TBitmapHelper.SynchedLoadFromStream(const AStream: TStream); 26 | begin 27 | TThread.Synchronize(nil, 28 | procedure 29 | begin 30 | LoadFromStream(AStream); 31 | end 32 | ); 33 | end; 34 | 35 | procedure TBitmapHelper.DoLoadFromURL(const AURL: string); 36 | var 37 | LHTTP: THTTPClient; 38 | LResponse: IHTTPResponse; 39 | begin 40 | LHTTP := THTTPClient.Create; 41 | try 42 | LResponse := LHTTP.Get(AURL); 43 | if LResponse.StatusCode = 200 then 44 | SynchedLoadFromStream(LResponse.ContentStream) 45 | else ; // Left as an exercise to the reader 46 | finally 47 | LHTTP.Free; 48 | end; 49 | end; 50 | 51 | procedure TBitmapHelper.LoadFromURL(const AURL: string); 52 | begin 53 | TTask.Run( 54 | procedure 55 | begin 56 | DoLoadFromURL(AURL); 57 | end 58 | ); 59 | end; 60 | 61 | end. 62 | -------------------------------------------------------------------------------- /OpenWeather.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DelphiWorlds/OpenWeatherDemo/7080d75d93da19e24a9fab521428fe37ba093850/OpenWeather.res -------------------------------------------------------------------------------- /OpenWeatherDemo.dpr: -------------------------------------------------------------------------------- 1 | program OpenWeatherDemo; 2 | 3 | uses 4 | System.StartUpCopy, 5 | FMX.Forms, 6 | MainFrm in 'MainFrm.pas' {frmMain}, 7 | OW.Data in 'OW.Data.pas', 8 | OW.API in 'OW.API.pas', 9 | OW.Consts in 'OW.Consts.pas', 10 | OW.Graphics.Net.Helpers in 'OW.Graphics.Net.Helpers.pas'; 11 | 12 | {$R *.res} 13 | 14 | begin 15 | Application.Initialize; 16 | Application.CreateForm(TfrmMain, frmMain); 17 | Application.Run; 18 | end. 19 | -------------------------------------------------------------------------------- /OpenWeatherDemo.dproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | {A73C145A-0844-471D-BDE3-2DB682E2F9FD} 4 | 18.2 5 | FMX 6 | OpenWeatherDemo.dpr 7 | True 8 | Debug 9 | Win32 10 | 1119 11 | Application 12 | 13 | 14 | true 15 | 16 | 17 | true 18 | Base 19 | true 20 | 21 | 22 | true 23 | Base 24 | true 25 | 26 | 27 | true 28 | Base 29 | true 30 | 31 | 32 | true 33 | Base 34 | true 35 | 36 | 37 | true 38 | Base 39 | true 40 | 41 | 42 | true 43 | Base 44 | true 45 | 46 | 47 | true 48 | Base 49 | true 50 | 51 | 52 | true 53 | Base 54 | true 55 | 56 | 57 | true 58 | Cfg_1 59 | true 60 | true 61 | 62 | 63 | true 64 | Cfg_1 65 | true 66 | true 67 | 68 | 69 | true 70 | Base 71 | true 72 | 73 | 74 | true 75 | Cfg_2 76 | true 77 | true 78 | 79 | 80 | true 81 | Cfg_2 82 | true 83 | true 84 | 85 | 86 | .\$(Platform)\$(Config) 87 | .\$(Platform)\$(Config) 88 | false 89 | false 90 | false 91 | false 92 | false 93 | RESTComponents;emsclientfiredac;FireDACIBDriver;emsclient;FireDACCommon;RESTBackendComponents;soapserver;CloudService;FireDACCommonDriver;inet;FireDAC;FireDACSqliteDriver;soaprtl;soapmidas;$(DCC_UsePackage) 94 | System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) 95 | true 96 | true 97 | true 98 | true 99 | true 100 | true 101 | true 102 | true 103 | true 104 | true 105 | $(BDS)\bin\delphi_PROJECTICON.ico 106 | $(BDS)\bin\delphi_PROJECTICNS.icns 107 | OpenWeatherDemo 108 | 109 | 110 | DBXSqliteDriver;DBXInterBaseDriver;DataSnapFireDAC;tethering;bindcompfmx;fmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;DbxCommonDriver;xmlrtl;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage) 111 | package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= 112 | Debug 113 | true 114 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png 115 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png 116 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png 117 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png 118 | $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png 119 | $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png 120 | $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png 121 | $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png 122 | $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png 123 | android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar 124 | 125 | 126 | DBXSqliteDriver;DBXInterBaseDriver;DataSnapFireDAC;tethering;bindcompfmx;fmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;DbxCommonDriver;xmlrtl;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;fmxase;$(DCC_UsePackage) 127 | CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera 128 | iPhoneAndiPad 129 | true 130 | Debug 131 | $(MSBuildProjectName) 132 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_57x57.png 133 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png 134 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png 135 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_114x114.png 136 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png 137 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png 138 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_320x480.png 139 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_640x960.png 140 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_640x1136.png 141 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png 142 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png 143 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png 144 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_29x29.png 145 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png 146 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_58x58.png 147 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png 148 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_72x72.png 149 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png 150 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_144x144.png 151 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png 152 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1004.png 153 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png 154 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x748.png 155 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png 156 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2008.png 157 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png 158 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1496.png 159 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png 160 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png 161 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_50x50.png 162 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png 163 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_100x100.png 164 | $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_29x29.png 165 | $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png 166 | 167 | 168 | DBXSqliteDriver;DBXInterBaseDriver;DataSnapFireDAC;tethering;bindcompfmx;fmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;DbxCommonDriver;xmlrtl;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;fmxase;$(DCC_UsePackage) 169 | CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera 170 | iPhoneAndiPad 171 | true 172 | Debug 173 | $(MSBuildProjectName) 174 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_57x57.png 175 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png 176 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png 177 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_114x114.png 178 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png 179 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png 180 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_320x480.png 181 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_640x960.png 182 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_640x1136.png 183 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png 184 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png 185 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png 186 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_29x29.png 187 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png 188 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_58x58.png 189 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png 190 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_72x72.png 191 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png 192 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_144x144.png 193 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png 194 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1004.png 195 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png 196 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x748.png 197 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png 198 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2008.png 199 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png 200 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1496.png 201 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png 202 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png 203 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_50x50.png 204 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png 205 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_100x100.png 206 | $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_29x29.png 207 | $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png 208 | 209 | 210 | DBXSqliteDriver;DBXInterBaseDriver;DataSnapFireDAC;tethering;bindcompfmx;fmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;DbxCommonDriver;xmlrtl;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;fmxase;$(DCC_UsePackage) 211 | CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSCameraUsageDescription=The reason for accessing the camera 212 | iPhoneAndiPad 213 | true 214 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_57x57.png 215 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png 216 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png 217 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_114x114.png 218 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png 219 | $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png 220 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_320x480.png 221 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_640x960.png 222 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_640x1136.png 223 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png 224 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png 225 | $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png 226 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_29x29.png 227 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png 228 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_58x58.png 229 | $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png 230 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_72x72.png 231 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png 232 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_144x144.png 233 | $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png 234 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1004.png 235 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png 236 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x748.png 237 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png 238 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2008.png 239 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png 240 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1496.png 241 | $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png 242 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png 243 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_50x50.png 244 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png 245 | $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_100x100.png 246 | $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_29x29.png 247 | $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png 248 | 249 | 250 | DBXSqliteDriver;DataSnapServerMidas;DBXInterBaseDriver;DataSnapFireDAC;tethering;FireDACMSSQLDriver;bindcompfmx;DBXOracleDriver;inetdb;emsedge;fmx;fmxdae;FireDACDBXDriver;dbexpress;IndyCore;dsnap;DataSnapCommon;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;IndyIPServer;IndySystem;fmxFireDAC;emshosting;FireDACPgDriver;FireDACASADriver;FireDACTDataDriver;DbxCommonDriver;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;FireDACDSDriver;rtl;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;bindcomp;DBXInformixDriver;IndyIPClient;dbxcds;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage) 251 | CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts 252 | Debug 253 | true 254 | 255 | 256 | DBXSqliteDriver;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;DataSnapFireDAC;svnui;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;DBXOracleDriver;inetdb;emsedge;fmx;fmxdae;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;DataSnapConnectors;VCLRESTComponents;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;TMSEditControlsDXE11;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;emshosting;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;DbxCommonDriver;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage) 257 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) 258 | Debug 259 | true 260 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= 261 | 1033 262 | $(BDS)\bin\default_app.manifest 263 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png 264 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png 265 | 266 | 267 | DBXSqliteDriver;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;DataSnapFireDAC;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;DBXOracleDriver;inetdb;emsedge;fmx;fmxdae;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;DataSnapCommon;DataSnapConnectors;VCLRESTComponents;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;DataSnapClient;bindcompdbx;IndyIPCommon;vcl;DBXSybaseASEDriver;IndyIPServer;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;emshosting;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;DbxCommonDriver;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;IndyProtocols;fmxase;$(DCC_UsePackage) 268 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) 269 | Debug 270 | true 271 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= 272 | 1033 273 | $(BDS)\bin\default_app.manifest 274 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png 275 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png 276 | 277 | 278 | DEBUG;$(DCC_Define) 279 | true 280 | false 281 | true 282 | true 283 | true 284 | 285 | 286 | false 287 | true 288 | true 289 | 290 | 291 | true 292 | true 293 | 294 | 295 | false 296 | RELEASE;$(DCC_Define) 297 | 0 298 | 0 299 | 300 | 301 | true 302 | true 303 | 304 | 305 | true 306 | true 307 | 308 | 309 | 310 | MainSource 311 | 312 | 313 |
frmMain
314 | fmx 315 |
316 | 317 | 318 | 319 | 320 | 321 | Cfg_2 322 | Base 323 | 324 | 325 | Base 326 | 327 | 328 | Cfg_1 329 | Base 330 | 331 |
332 | 333 | Delphi.Personality.12 334 | Application 335 | 336 | 337 | 338 | OpenWeatherDemo.dpr 339 | 340 | 341 | 342 | 343 | 344 | Contents\Resources\StartUp\Documents\OpenWeatherDemo\Images 345 | 03.png 346 | true 347 | 348 | 349 | 350 | 351 | OpenWeatherDemo 352 | true 353 | 354 | 355 | 356 | 357 | .\assets\internal\Images 358 | 09.png 359 | true 360 | 361 | 362 | .\StartUp\Documents\Images 363 | 09.png 364 | true 365 | 366 | 367 | .\StartUp\Documents\Images 368 | 09.png 369 | true 370 | 371 | 372 | .\StartUp\Documents\Images 373 | 09.png 374 | true 375 | 376 | 377 | 378 | 379 | Default-568h@2x.png 380 | true 381 | 382 | 383 | 384 | 385 | true 386 | 387 | 388 | 389 | 390 | true 391 | 392 | 393 | 394 | 395 | splash_image.png 396 | true 397 | 398 | 399 | 400 | 401 | Default-667h@2x.png 402 | true 403 | 404 | 405 | 406 | 407 | true 408 | 409 | 410 | 411 | 412 | true 413 | 414 | 415 | 416 | 417 | Default@2x.png 418 | true 419 | 420 | 421 | 422 | 423 | Contents\Resources\StartUp\Documents\OpenWeatherDemo\Images 424 | 01.png 425 | true 426 | 427 | 428 | 429 | 430 | Default-Portrait@2x.png 431 | true 432 | 433 | 434 | 435 | 436 | OpenWeather.icns 437 | true 438 | 439 | 440 | 441 | 442 | true 443 | 444 | 445 | 446 | 447 | true 448 | 449 | 450 | 451 | 452 | Default.png 453 | true 454 | 455 | 456 | 457 | 458 | splash_image.png 459 | true 460 | 461 | 462 | 463 | 464 | true 465 | 466 | 467 | 468 | 469 | OpenWeather 470 | true 471 | 472 | 473 | 474 | 475 | Contents\Resources\StartUp\Documents\OpenWeatherDemo\Images 476 | 11.png 477 | true 478 | 479 | 480 | 481 | 482 | true 483 | 484 | 485 | 486 | 487 | OpenWeatherDemo 488 | true 489 | 490 | 491 | 492 | 493 | true 494 | 495 | 496 | 497 | 498 | ic_launcher.png 499 | true 500 | 501 | 502 | 503 | 504 | Default~ipad.png 505 | true 506 | 507 | 508 | 509 | 510 | true 511 | 512 | 513 | 514 | 515 | ic_launcher.png 516 | true 517 | 518 | 519 | 520 | 521 | splash_image.png 522 | true 523 | 524 | 525 | 526 | 527 | .\assets\internal\Images 528 | 10.png 529 | true 530 | 531 | 532 | .\StartUp\Documents\Images 533 | 10.png 534 | true 535 | 536 | 537 | .\StartUp\Documents\Images 538 | 10.png 539 | true 540 | 541 | 542 | .\StartUp\Documents\Images 543 | 10.png 544 | true 545 | 546 | 547 | 548 | 549 | splash_image.png 550 | true 551 | 552 | 553 | 554 | 555 | libOpenWeather.so 556 | true 557 | 558 | 559 | 560 | 561 | Contents\Resources\StartUp\Documents\OpenWeatherDemo\Images 562 | 01.png 563 | true 564 | 565 | 566 | 567 | 568 | true 569 | 570 | 571 | 572 | 573 | true 574 | 575 | 576 | 577 | 578 | Contents\Resources\StartUp\Documents\OpenWeatherDemo\Images 579 | 50.png 580 | true 581 | 582 | 583 | 584 | 585 | true 586 | 587 | 588 | 589 | 590 | ic_launcher.png 591 | true 592 | 593 | 594 | 595 | 596 | libOpenWeatherDemo.so 597 | true 598 | 599 | 600 | 601 | 602 | Info.plist 603 | true 604 | 605 | 606 | 607 | 608 | classes.dex 609 | true 610 | 611 | 612 | 613 | 614 | Contents\Resources\StartUp\Documents\OpenWeatherDemo\Images 615 | 50.png 616 | true 617 | 618 | 619 | 620 | 621 | true 622 | 623 | 624 | 625 | 626 | Default-736h@3x.png 627 | true 628 | 629 | 630 | 631 | 632 | true 633 | 634 | 635 | 636 | 637 | .\assets\internal\Images 638 | 03.png 639 | true 640 | 641 | 642 | .\StartUp\Documents\Images 643 | 03.png 644 | true 645 | 646 | 647 | .\StartUp\Documents\Images 648 | 03.png 649 | true 650 | 651 | 652 | .\StartUp\Documents\Images 653 | 03.png 654 | true 655 | 656 | 657 | 658 | 659 | ic_launcher.png 660 | true 661 | 662 | 663 | 664 | 665 | .\assets\internal\Images 666 | 13.png 667 | true 668 | 669 | 670 | .\Startup\Documents\Images 671 | 13.png 672 | true 673 | 674 | 675 | .\Startup\Documents\Images 676 | 13.png 677 | true 678 | 679 | 680 | .\Startup\Documents\Images 681 | 13.png 682 | true 683 | 684 | 685 | 686 | 687 | .\assets\internal\Images 688 | 04.png 689 | true 690 | 691 | 692 | .\StartUp\Documents\Images 693 | 04.png 694 | true 695 | 696 | 697 | .\StartUp\Documents\Images 698 | 04.png 699 | true 700 | 701 | 702 | .\StartUp\Documents\Images 703 | 04.png 704 | true 705 | 706 | 707 | 708 | 709 | true 710 | 711 | 712 | 713 | 714 | Contents\Resources\StartUp\Documents\OpenWeatherDemo\Images 715 | 04.png 716 | true 717 | 718 | 719 | 720 | 721 | splash_image.png 722 | true 723 | 724 | 725 | 726 | 727 | Contents\Resources\StartUp\Documents\OpenWeatherDemo\Images 728 | 13.png 729 | true 730 | 731 | 732 | 733 | 734 | Contents\Resources\StartUp\Documents\OpenWeatherDemo\Images 735 | 03.png 736 | true 737 | 738 | 739 | 740 | 741 | true 742 | 743 | 744 | 745 | 746 | Info.plist 747 | true 748 | 749 | 750 | 751 | 752 | ic_launcher.png 753 | true 754 | 755 | 756 | 757 | 758 | Contents\Resources\StartUp\Documents\OpenWeatherDemo\Images 759 | 09.png 760 | true 761 | 762 | 763 | 764 | 765 | .\assets\internal\Images 766 | 11.png 767 | true 768 | 769 | 770 | .\StartUp\Documents\Images 771 | 11.png 772 | true 773 | 774 | 775 | .\StartUp\Documents\Images 776 | 11.png 777 | true 778 | 779 | 780 | .\StartUp\Documents\Images 781 | 11.png 782 | true 783 | 784 | 785 | 786 | 787 | true 788 | 789 | 790 | 791 | 792 | .\assets\internal\Images 793 | 01.png 794 | true 795 | 796 | 797 | .\StartUp\Documents\Images 798 | 01.png 799 | true 800 | 801 | 802 | .\StartUp\Documents\Images 803 | 01.png 804 | true 805 | 806 | 807 | .\StartUp\Documents\Images 808 | 01.png 809 | true 810 | 811 | 812 | 813 | 814 | Contents\Resources\StartUp\Documents\OpenWeatherDemo\Images 815 | 13.png 816 | true 817 | 818 | 819 | 820 | 821 | .\assets\internal\Images 822 | 02.png 823 | true 824 | 825 | 826 | .\StartUp\Documents\Images 827 | 02.png 828 | true 829 | 830 | 831 | .\StartUp\Documents\Images 832 | 02.png 833 | true 834 | 835 | 836 | .\StartUp\Documents\Images 837 | 02.png 838 | true 839 | 840 | 841 | 842 | 843 | ic_launcher.png 844 | true 845 | 846 | 847 | 848 | 849 | true 850 | 851 | 852 | 853 | 854 | Contents\Resources\StartUp\Documents\OpenWeatherDemo\Images 855 | 04.png 856 | true 857 | 858 | 859 | 860 | 861 | .\assets\internal\Images 862 | 03.png 863 | true 864 | 865 | 866 | .\StartUp\Documents\Images 867 | 03.png 868 | true 869 | 870 | 871 | .\StartUp\Documents\Images 872 | 03.png 873 | true 874 | 875 | 876 | .\StartUp\Documents\Images 877 | 03.png 878 | true 879 | 880 | 881 | 882 | 883 | true 884 | 885 | 886 | 887 | 888 | Contents\Resources\StartUp\Documents\OpenWeatherDemo\Images 889 | 02.png 890 | true 891 | 892 | 893 | 894 | 895 | .\assets\internal\Images 896 | 04.png 897 | true 898 | 899 | 900 | .\StartUp\Documents\Images 901 | 04.png 902 | true 903 | 904 | 905 | .\StartUp\Documents\Images 906 | 04.png 907 | true 908 | 909 | 910 | .\StartUp\Documents\Images 911 | 04.png 912 | true 913 | 914 | 915 | 916 | 917 | true 918 | 919 | 920 | 921 | 922 | libOpenWeather.so 923 | true 924 | 925 | 926 | 927 | 928 | true 929 | 930 | 931 | 932 | 933 | Contents\Resources\StartUp\Documents\OpenWeatherDemo\Images 934 | 10.png 935 | true 936 | 937 | 938 | 939 | 940 | true 941 | 942 | 943 | 944 | 945 | true 946 | 947 | 948 | 949 | 950 | libOpenWeather.so 951 | true 952 | 953 | 954 | 955 | 956 | ic_launcher.png 957 | true 958 | 959 | 960 | 961 | 962 | libOpenWeather.so 963 | true 964 | 965 | 966 | 967 | 968 | Contents\Resources\StartUp\Documents\OpenWeatherDemo\Images 969 | 11.png 970 | true 971 | 972 | 973 | 974 | 975 | true 976 | 977 | 978 | 979 | 980 | ic_launcher.png 981 | true 982 | 983 | 984 | 985 | 986 | Default-Portrait@2x~ipad.png 987 | true 988 | 989 | 990 | 991 | 992 | Default-Landscape@2x.png 993 | true 994 | 995 | 996 | 997 | 998 | true 999 | 1000 | 1001 | 1002 | 1003 | true 1004 | 1005 | 1006 | 1007 | 1008 | classes.dex 1009 | true 1010 | 1011 | 1012 | 1013 | 1014 | splash_image.png 1015 | true 1016 | 1017 | 1018 | 1019 | 1020 | Default-Portrait~ipad.png 1021 | true 1022 | 1023 | 1024 | 1025 | 1026 | .\assets\internal\Images 1027 | 02.png 1028 | true 1029 | 1030 | 1031 | .\StartUp\Documents\Images 1032 | 02.png 1033 | true 1034 | 1035 | 1036 | .\StartUp\Documents\Images 1037 | 02.png 1038 | true 1039 | 1040 | 1041 | .\StartUp\Documents\Images 1042 | 02.png 1043 | true 1044 | 1045 | 1046 | 1047 | 1048 | splash_image.png 1049 | true 1050 | 1051 | 1052 | 1053 | 1054 | ic_launcher.png 1055 | true 1056 | 1057 | 1058 | 1059 | 1060 | true 1061 | 1062 | 1063 | 1064 | 1065 | .\assets\internal\Images 1066 | 01.png 1067 | true 1068 | 1069 | 1070 | .\StartUp\Documents\Images 1071 | 01.png 1072 | true 1073 | 1074 | 1075 | .\StartUp\Documents\Images 1076 | 01.png 1077 | true 1078 | 1079 | 1080 | .\StartUp\Documents\Images 1081 | 01.png 1082 | true 1083 | 1084 | 1085 | 1086 | 1087 | true 1088 | 1089 | 1090 | 1091 | 1092 | true 1093 | 1094 | 1095 | 1096 | 1097 | Default-Landscape-736h@3x.png 1098 | true 1099 | 1100 | 1101 | 1102 | 1103 | true 1104 | 1105 | 1106 | 1107 | 1108 | .\assets\internal\Images 1109 | 50.png 1110 | true 1111 | 1112 | 1113 | .\StartUp\Documents\Images 1114 | 50.png 1115 | true 1116 | 1117 | 1118 | .\StartUp\Documents\Images 1119 | 50.png 1120 | true 1121 | 1122 | 1123 | .\StartUp\Documents\Images 1124 | 50.png 1125 | true 1126 | 1127 | 1128 | 1129 | 1130 | .\assets\internal\Images 1131 | 10.png 1132 | true 1133 | 1134 | 1135 | .\StartUp\Documents\Images 1136 | 10.png 1137 | true 1138 | 1139 | 1140 | .\StartUp\Documents\Images 1141 | 10.png 1142 | true 1143 | 1144 | 1145 | .\StartUp\Documents\Images 1146 | 10.png 1147 | true 1148 | 1149 | 1150 | 1151 | 1152 | .\assets\internal\Images 1153 | 50.png 1154 | true 1155 | 1156 | 1157 | .\StartUp\Documents\Images 1158 | 50.png 1159 | true 1160 | 1161 | 1162 | .\StartUp\Documents\Images 1163 | 50.png 1164 | true 1165 | 1166 | 1167 | .\StartUp\Documents\Images 1168 | 50.png 1169 | true 1170 | 1171 | 1172 | 1173 | 1174 | OpenWeatherDemo.exe 1175 | true 1176 | 1177 | 1178 | 1179 | 1180 | ic_launcher.png 1181 | true 1182 | 1183 | 1184 | 1185 | 1186 | .\assets\internal\Images 1187 | 09.png 1188 | true 1189 | 1190 | 1191 | .\StartUp\Documents\Images 1192 | 09.png 1193 | true 1194 | 1195 | 1196 | .\StartUp\Documents\Images 1197 | 09.png 1198 | true 1199 | 1200 | 1201 | .\StartUp\Documents\Images 1202 | 09.png 1203 | true 1204 | 1205 | 1206 | 1207 | 1208 | Contents\Resources\StartUp\Documents\OpenWeatherDemo\Images 1209 | 10.png 1210 | true 1211 | 1212 | 1213 | 1214 | 1215 | splash_image.png 1216 | true 1217 | 1218 | 1219 | 1220 | 1221 | libOpenWeatherDemo.so 1222 | true 1223 | 1224 | 1225 | 1226 | 1227 | .\assets\internal\Images 1228 | 11.png 1229 | true 1230 | 1231 | 1232 | .\StartUp\Documents\Images 1233 | 11.png 1234 | true 1235 | 1236 | 1237 | .\StartUp\Documents\Images 1238 | 11.png 1239 | true 1240 | 1241 | 1242 | .\StartUp\Documents\Images 1243 | 11.png 1244 | true 1245 | 1246 | 1247 | 1248 | 1249 | Default-Landscape.png 1250 | true 1251 | 1252 | 1253 | 1254 | 1255 | true 1256 | 1257 | 1258 | 1259 | 1260 | true 1261 | 1262 | 1263 | 1264 | 1265 | true 1266 | 1267 | 1268 | 1269 | 1270 | ResourceRules.plist 1271 | true 1272 | 1273 | 1274 | 1275 | 1276 | Default-Landscape@2x~ipad.png 1277 | true 1278 | 1279 | 1280 | 1281 | 1282 | .\assets\internal\Images 1283 | 13.png 1284 | true 1285 | 1286 | 1287 | .\Startup\Documents\Images 1288 | 13.png 1289 | true 1290 | 1291 | 1292 | .\Startup\Documents\Images 1293 | 13.png 1294 | true 1295 | 1296 | 1297 | .\Startup\Documents\Images 1298 | 13.png 1299 | true 1300 | 1301 | 1302 | 1303 | 1304 | Default-Landscape~ipad.png 1305 | true 1306 | 1307 | 1308 | 1309 | 1310 | Contents\Resources\StartUp\Documents\OpenWeatherDemo\Images 1311 | 02.png 1312 | true 1313 | 1314 | 1315 | 1316 | 1317 | Contents\Resources\StartUp\Documents\OpenWeatherDemo\Images 1318 | 09.png 1319 | true 1320 | 1321 | 1322 | 1323 | 1324 | 1 1325 | 1326 | 1327 | Contents\MacOS 1328 | 1 1329 | 1330 | 1331 | Contents\MacOS 1332 | 0 1333 | 1334 | 1335 | 1336 | 1337 | classes 1338 | 1 1339 | 1340 | 1341 | 1342 | 1343 | library\lib\armeabi-v7a 1344 | 1 1345 | 1346 | 1347 | 1348 | 1349 | library\lib\armeabi 1350 | 1 1351 | 1352 | 1353 | 1354 | 1355 | library\lib\mips 1356 | 1 1357 | 1358 | 1359 | 1360 | 1361 | library\lib\armeabi-v7a 1362 | 1 1363 | 1364 | 1365 | 1366 | 1367 | res\drawable 1368 | 1 1369 | 1370 | 1371 | 1372 | 1373 | res\values 1374 | 1 1375 | 1376 | 1377 | 1378 | 1379 | res\drawable 1380 | 1 1381 | 1382 | 1383 | 1384 | 1385 | res\drawable-xxhdpi 1386 | 1 1387 | 1388 | 1389 | 1390 | 1391 | res\drawable-ldpi 1392 | 1 1393 | 1394 | 1395 | 1396 | 1397 | res\drawable-mdpi 1398 | 1 1399 | 1400 | 1401 | 1402 | 1403 | res\drawable-hdpi 1404 | 1 1405 | 1406 | 1407 | 1408 | 1409 | res\drawable-xhdpi 1410 | 1 1411 | 1412 | 1413 | 1414 | 1415 | res\drawable-small 1416 | 1 1417 | 1418 | 1419 | 1420 | 1421 | res\drawable-normal 1422 | 1 1423 | 1424 | 1425 | 1426 | 1427 | res\drawable-large 1428 | 1 1429 | 1430 | 1431 | 1432 | 1433 | res\drawable-xlarge 1434 | 1 1435 | 1436 | 1437 | 1438 | 1439 | 1 1440 | 1441 | 1442 | Contents\MacOS 1443 | 1 1444 | 1445 | 1446 | 0 1447 | 1448 | 1449 | 1450 | 1451 | Contents\MacOS 1452 | 1 1453 | .framework 1454 | 1455 | 1456 | 0 1457 | 1458 | 1459 | 1460 | 1461 | 1 1462 | .dylib 1463 | 1464 | 1465 | 1 1466 | .dylib 1467 | 1468 | 1469 | 1 1470 | .dylib 1471 | 1472 | 1473 | Contents\MacOS 1474 | 1 1475 | .dylib 1476 | 1477 | 1478 | 0 1479 | .dll;.bpl 1480 | 1481 | 1482 | 1483 | 1484 | 1 1485 | .dylib 1486 | 1487 | 1488 | 1 1489 | .dylib 1490 | 1491 | 1492 | 1 1493 | .dylib 1494 | 1495 | 1496 | Contents\MacOS 1497 | 1 1498 | .dylib 1499 | 1500 | 1501 | 0 1502 | .bpl 1503 | 1504 | 1505 | 1506 | 1507 | 0 1508 | 1509 | 1510 | 0 1511 | 1512 | 1513 | 0 1514 | 1515 | 1516 | 0 1517 | 1518 | 1519 | Contents\Resources\StartUp\ 1520 | 0 1521 | 1522 | 1523 | 0 1524 | 1525 | 1526 | 1527 | 1528 | 1 1529 | 1530 | 1531 | 1 1532 | 1533 | 1534 | 1 1535 | 1536 | 1537 | 1538 | 1539 | 1 1540 | 1541 | 1542 | 1 1543 | 1544 | 1545 | 1 1546 | 1547 | 1548 | 1549 | 1550 | 1 1551 | 1552 | 1553 | 1 1554 | 1555 | 1556 | 1 1557 | 1558 | 1559 | 1560 | 1561 | 1 1562 | 1563 | 1564 | 1 1565 | 1566 | 1567 | 1 1568 | 1569 | 1570 | 1571 | 1572 | 1 1573 | 1574 | 1575 | 1 1576 | 1577 | 1578 | 1 1579 | 1580 | 1581 | 1582 | 1583 | 1 1584 | 1585 | 1586 | 1 1587 | 1588 | 1589 | 1 1590 | 1591 | 1592 | 1593 | 1594 | 1 1595 | 1596 | 1597 | 1 1598 | 1599 | 1600 | 1 1601 | 1602 | 1603 | 1604 | 1605 | 1 1606 | 1607 | 1608 | 1609 | 1610 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 1611 | 1 1612 | 1613 | 1614 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 1615 | 1 1616 | 1617 | 1618 | 1619 | 1620 | 1 1621 | 1622 | 1623 | 1 1624 | 1625 | 1626 | 1627 | 1628 | ..\ 1629 | 1 1630 | 1631 | 1632 | ..\ 1633 | 1 1634 | 1635 | 1636 | 1637 | 1638 | 1 1639 | 1640 | 1641 | 1 1642 | 1643 | 1644 | 1 1645 | 1646 | 1647 | 1648 | 1649 | 1 1650 | 1651 | 1652 | 1 1653 | 1654 | 1655 | 1 1656 | 1657 | 1658 | 1659 | 1660 | ..\ 1661 | 1 1662 | 1663 | 1664 | 1665 | 1666 | Contents 1667 | 1 1668 | 1669 | 1670 | 1671 | 1672 | Contents\Resources 1673 | 1 1674 | 1675 | 1676 | 1677 | 1678 | library\lib\armeabi-v7a 1679 | 1 1680 | 1681 | 1682 | 1 1683 | 1684 | 1685 | 1 1686 | 1687 | 1688 | 1 1689 | 1690 | 1691 | 1 1692 | 1693 | 1694 | Contents\MacOS 1695 | 1 1696 | 1697 | 1698 | 0 1699 | 1700 | 1701 | 1702 | 1703 | 1 1704 | 1705 | 1706 | 1 1707 | 1708 | 1709 | 1710 | 1711 | Assets 1712 | 1 1713 | 1714 | 1715 | Assets 1716 | 1 1717 | 1718 | 1719 | 1720 | 1721 | Assets 1722 | 1 1723 | 1724 | 1725 | Assets 1726 | 1 1727 | 1728 | 1729 | 1730 | 1731 | 1732 | 1733 | 1734 | 1735 | 1736 | 1737 | 1738 | 1739 | True 1740 | True 1741 | True 1742 | True 1743 | True 1744 | True 1745 | True 1746 | 1747 | 1748 | 12 1749 | 1750 | 1751 | 1752 | 1753 |
1754 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # OpenWeatherDemo 2 | 3 | Demo app for the article as published on Delphi Worlds: 4 | 5 | http://www.delphiworlds.com 6 | 7 | Blog article: 8 | 9 | http://delphiworlds.com/2017/05/cross-platform-delphi-easy/ 10 | 11 | -------------------------------------------------------------------------------- /info.plist.TemplateOSX.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | <%VersionInfoPListKeys%> 6 | <%ExtraInfoPListKeys%> 7 | 8 | 9 | -------------------------------------------------------------------------------- /info.plist.TemplateiOS.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | <%VersionInfoPListKeys%> 6 | <%ExtraInfoPListKeys%> 7 | 8 | 9 | --------------------------------------------------------------------------------