├── LICENSE.md ├── .gitattributes ├── DzTalkApp.dcr ├── DzTalkApp.res ├── .gitignore ├── Demo ├── App1 │ ├── App1.res │ ├── App1.dpr │ ├── UFrmMain.pas │ ├── UFrmMain.dfm │ └── App1.dproj └── App2 │ ├── App2.res │ ├── App2.dpr │ ├── UFrmStream.pas │ ├── UFrmStream.dfm │ ├── UFrmMain.dfm │ ├── UFrmMain.pas │ └── App2.dproj ├── images └── demo_screen.png ├── CompInstall.ini ├── DzTalkApp.dpk ├── DzTalkApp.pas ├── README.md └── DzTalkApp.dproj /LICENSE.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digao-dalpiaz/DzTalkApp/HEAD/LICENSE.md -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /DzTalkApp.dcr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digao-dalpiaz/DzTalkApp/HEAD/DzTalkApp.dcr -------------------------------------------------------------------------------- /DzTalkApp.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digao-dalpiaz/DzTalkApp/HEAD/DzTalkApp.res -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.identcache 2 | *.local 3 | *.stat 4 | /Win32 5 | /Win64 6 | /Design 7 | Win32/ 8 | -------------------------------------------------------------------------------- /Demo/App1/App1.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digao-dalpiaz/DzTalkApp/HEAD/Demo/App1/App1.res -------------------------------------------------------------------------------- /Demo/App2/App2.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digao-dalpiaz/DzTalkApp/HEAD/Demo/App2/App2.res -------------------------------------------------------------------------------- /images/demo_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/digao-dalpiaz/DzTalkApp/HEAD/images/demo_screen.png -------------------------------------------------------------------------------- /Demo/App1/App1.dpr: -------------------------------------------------------------------------------- 1 | program App1; 2 | 3 | uses 4 | Vcl.Forms, 5 | UFrmMain in 'UFrmMain.pas' {FrmMain}; 6 | 7 | {$R *.res} 8 | 9 | begin 10 | Application.Initialize; 11 | Application.MainFormOnTaskbar := True; 12 | Application.CreateForm(TFrmMain, FrmMain); 13 | Application.Run; 14 | end. 15 | -------------------------------------------------------------------------------- /CompInstall.ini: -------------------------------------------------------------------------------- 1 | [General] 2 | Name=Digao Dalpiaz - DzTalkApp component 3 | Version=1.9 4 | DelphiVersions=XE3;XE4;XE5;XE6;XE7;XE8;10;10.1;10.2;10.3;10.4;11 5 | Packages=DzTalkApp 6 | AddLibrary=1 7 | 8 | [P_DzTalkApp] 9 | Allow64bit=1 10 | Install=1 11 | 12 | [GitHub] 13 | Repository=digao-dalpiaz/DzTalkApp 14 | -------------------------------------------------------------------------------- /Demo/App2/App2.dpr: -------------------------------------------------------------------------------- 1 | program App2; 2 | 3 | uses 4 | Vcl.Forms, 5 | UFrmMain in 'UFrmMain.pas' {Form1}, 6 | UFrmStream in 'UFrmStream.pas' {FrmStream}; 7 | 8 | {$R *.res} 9 | 10 | begin 11 | Application.Initialize; 12 | Application.MainFormOnTaskbar := True; 13 | Application.CreateForm(TForm1, Form1); 14 | Application.CreateForm(TFrmStream, FrmStream); 15 | Application.Run; 16 | end. 17 | -------------------------------------------------------------------------------- /Demo/App2/UFrmStream.pas: -------------------------------------------------------------------------------- 1 | unit UFrmStream; 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, Vcl.ExtCtrls; 8 | 9 | type 10 | TFrmStream = class(TForm) 11 | Img: TImage; 12 | private 13 | { Private declarations } 14 | public 15 | { Public declarations } 16 | end; 17 | 18 | var 19 | FrmStream: TFrmStream; 20 | 21 | implementation 22 | 23 | {$R *.dfm} 24 | 25 | end. 26 | -------------------------------------------------------------------------------- /Demo/App2/UFrmStream.dfm: -------------------------------------------------------------------------------- 1 | object FrmStream: TFrmStream 2 | Left = 0 3 | Top = 0 4 | Caption = 'Stream received' 5 | ClientHeight = 331 6 | ClientWidth = 471 7 | Color = clBtnFace 8 | Font.Charset = DEFAULT_CHARSET 9 | Font.Color = clWindowText 10 | Font.Height = -11 11 | Font.Name = 'Tahoma' 12 | Font.Style = [] 13 | OldCreateOrder = False 14 | PixelsPerInch = 96 15 | TextHeight = 13 16 | object Img: TImage 17 | Left = 0 18 | Top = 0 19 | Width = 471 20 | Height = 331 21 | Align = alClient 22 | ExplicitWidth = 105 23 | ExplicitHeight = 105 24 | end 25 | end 26 | -------------------------------------------------------------------------------- /Demo/App2/UFrmMain.dfm: -------------------------------------------------------------------------------- 1 | object Form1: TForm1 2 | Left = 0 3 | Top = 0 4 | Caption = 'App2' 5 | ClientHeight = 264 6 | ClientWidth = 449 7 | Color = clBtnFace 8 | Font.Charset = DEFAULT_CHARSET 9 | Font.Color = clWindowText 10 | Font.Height = -11 11 | Font.Name = 'Tahoma' 12 | Font.Style = [] 13 | OldCreateOrder = False 14 | PixelsPerInch = 96 15 | TextHeight = 13 16 | object M: TMemo 17 | Left = 8 18 | Top = 8 19 | Width = 433 20 | Height = 249 21 | ScrollBars = ssBoth 22 | TabOrder = 0 23 | end 24 | object TA: TDzTalkApp 25 | AutoActivate = True 26 | AutoFind = True 27 | MyWindowName = 'WND_APP2' 28 | DestWindowName = 'WND_APP1' 29 | Synchronous = True 30 | OnMessage = TAMessage 31 | Left = 224 32 | Top = 64 33 | end 34 | end 35 | -------------------------------------------------------------------------------- /DzTalkApp.dpk: -------------------------------------------------------------------------------- 1 | package DzTalkApp; 2 | 3 | {$R *.res} 4 | {$R 'DzTalkApp.dcr'} 5 | {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} 6 | {$ALIGN 8} 7 | {$ASSERTIONS ON} 8 | {$BOOLEVAL OFF} 9 | {$DEBUGINFO OFF} 10 | {$EXTENDEDSYNTAX ON} 11 | {$IMPORTEDDATA ON} 12 | {$IOCHECKS ON} 13 | {$LOCALSYMBOLS OFF} 14 | {$LONGSTRINGS ON} 15 | {$OPENSTRINGS ON} 16 | {$OPTIMIZATION ON} 17 | {$OVERFLOWCHECKS OFF} 18 | {$RANGECHECKS OFF} 19 | {$REFERENCEINFO OFF} 20 | {$SAFEDIVIDE OFF} 21 | {$STACKFRAMES OFF} 22 | {$TYPEDADDRESS OFF} 23 | {$VARSTRINGCHECKS ON} 24 | {$WRITEABLECONST OFF} 25 | {$MINENUMSIZE 1} 26 | {$IMAGEBASE $400000} 27 | {$DEFINE RELEASE} 28 | {$ENDIF IMPLICITBUILDING} 29 | {$DESCRIPTION 'Digao Dalpiaz - DzTalkApp component'} 30 | {$IMPLICITBUILD ON} 31 | 32 | requires 33 | rtl, 34 | vcl; 35 | 36 | contains 37 | DzTalkApp in 'DzTalkApp.pas'; 38 | 39 | end. 40 | -------------------------------------------------------------------------------- /Demo/App2/UFrmMain.pas: -------------------------------------------------------------------------------- 1 | unit UFrmMain; 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, DzTalkApp, Vcl.StdCtrls; 8 | 9 | type 10 | TForm1 = class(TForm) 11 | TA: TDzTalkApp; 12 | M: TMemo; 13 | procedure TAMessage(Sender: TObject; From: HWND; ID: Word; P: Pointer; 14 | Size: Cardinal; var Result: Integer); 15 | private 16 | { Private declarations } 17 | public 18 | { Public declarations } 19 | end; 20 | 21 | var 22 | Form1: TForm1; 23 | 24 | implementation 25 | 26 | {$R *.dfm} 27 | 28 | uses System.StrUtils, UFrmStream; 29 | 30 | type 31 | TRecordData = packed record 32 | Number: Integer; 33 | Text: ShortString; 34 | Flag: Boolean; 35 | end; 36 | 37 | procedure TForm1.TAMessage(Sender: TObject; From: HWND; ID: Word; P: Pointer; 38 | Size: Cardinal; var Result: Integer); 39 | var R: TRecordData; 40 | S: TMemoryStream; 41 | B: Vcl.Graphics.TBitmap; 42 | begin 43 | if ID<=1000 then 44 | begin 45 | M.Lines.Add('Command received: '+IntToStr(ID)); 46 | end else 47 | case ID of 48 | 1001: M.Lines.Add('Integer received: '+IntToStr(TA.AsInteger)); 49 | 1002: M.Lines.Add('String received: '+TA.AsString); 50 | 1003: M.Lines.Add('Double received: '+FloatToStr(Double(P^))); 51 | 1004: 52 | begin 53 | R := TRecordData(P^); 54 | 55 | M.Lines.Add(Format('Record received: Number=%d / Text=%s / Flag=%s', 56 | [R.Number, R.Text, IfThen(R.Flag, 'TRUE', 'FALSE')])); 57 | end; 58 | 59 | 1005: //receive stream (screen shot) 60 | begin 61 | B := Vcl.Graphics.TBitmap.Create; 62 | try 63 | S := TMemoryStream.Create; 64 | try 65 | TA.AsStream(S); 66 | S.Position := 0; 67 | B.LoadFromStream(S); 68 | finally 69 | S.Free; 70 | end; 71 | FrmStream.Img.Picture.Assign(B); 72 | FrmStream.Show; 73 | finally 74 | B.Free; 75 | end; 76 | 77 | Result := 9999; 78 | end; 79 | 80 | else M.Lines.Add(Format('Unknown command ID: %d', [ID])); 81 | end; 82 | end; 83 | 84 | end. 85 | -------------------------------------------------------------------------------- /Demo/App1/UFrmMain.pas: -------------------------------------------------------------------------------- 1 | unit UFrmMain; 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, DzTalkApp, Vcl.StdCtrls; 8 | 9 | type 10 | TFrmMain = class(TForm) 11 | TA: TDzTalkApp; 12 | BtnSendCmd: TButton; 13 | EdID: TEdit; 14 | Label1: TLabel; 15 | BtnSendInteger: TButton; 16 | Label2: TLabel; 17 | EdInteger: TEdit; 18 | BtnSendString: TButton; 19 | Label3: TLabel; 20 | EdString: TEdit; 21 | BtnSendDouble: TButton; 22 | Label4: TLabel; 23 | EdDouble: TEdit; 24 | BtnSendRecord: TButton; 25 | Label5: TLabel; 26 | EdRecNumber: TEdit; 27 | Label6: TLabel; 28 | EdRecText: TEdit; 29 | CkRecFlag: TCheckBox; 30 | BtnSendStream: TButton; 31 | Label7: TLabel; 32 | LbResult: TLabel; 33 | procedure BtnSendCmdClick(Sender: TObject); 34 | procedure BtnSendIntegerClick(Sender: TObject); 35 | procedure BtnSendStringClick(Sender: TObject); 36 | procedure BtnSendDoubleClick(Sender: TObject); 37 | procedure BtnSendRecordClick(Sender: TObject); 38 | procedure BtnSendStreamClick(Sender: TObject); 39 | private 40 | { Private declarations } 41 | public 42 | { Public declarations } 43 | end; 44 | 45 | var 46 | FrmMain: TFrmMain; 47 | 48 | implementation 49 | 50 | {$R *.dfm} 51 | 52 | type 53 | TRecordData = packed record 54 | Number: Integer; 55 | Text: ShortString; 56 | Flag: Boolean; 57 | end; 58 | 59 | procedure TFrmMain.BtnSendCmdClick(Sender: TObject); 60 | var ID: Word; 61 | begin 62 | ID := StrToInt(EdID.Text); 63 | if ID>1000 then 64 | raise Exception.Create('ID bigger than 1000 not allowed on this demo app'); 65 | 66 | TA.Send(ID); 67 | end; 68 | 69 | procedure TFrmMain.BtnSendIntegerClick(Sender: TObject); 70 | begin 71 | TA.Send(1001, StrToInt( EdInteger.Text ) ); 72 | end; 73 | 74 | procedure TFrmMain.BtnSendStringClick(Sender: TObject); 75 | begin 76 | TA.Send(1002, EdString.Text); 77 | end; 78 | 79 | procedure TFrmMain.BtnSendDoubleClick(Sender: TObject); 80 | var D: Double; 81 | begin 82 | D := StrToFloat(EdDouble.Text); 83 | 84 | TA.Send(1003, @D, SizeOf(D)); 85 | end; 86 | 87 | procedure TFrmMain.BtnSendRecordClick(Sender: TObject); 88 | var R: TRecordData; 89 | begin 90 | R.Number := StrToInt(EdRecNumber.Text); 91 | R.Text := ShortString(EdRecText.Text); 92 | R.Flag := CkRecFlag.Checked; 93 | 94 | TA.Send(1004, @R, SizeOf(R)); 95 | end; 96 | 97 | procedure TFrmMain.BtnSendStreamClick(Sender: TObject); 98 | 99 | procedure GetPrintScreen(var B: Vcl.Graphics.TBitmap); 100 | var DC: HDC; 101 | R: TRect; 102 | begin 103 | DC := GetDC(0); 104 | try 105 | Winapi.Windows.GetClientRect(WindowFromDC(DC), R); 106 | B.SetSize(R.Width, R.Height); 107 | 108 | BitBlt(B.Canvas.Handle, 0, 0, B.Width, B.Height, DC, 0, 0, SRCCOPY); 109 | finally 110 | ReleaseDC(0, DC); 111 | end; 112 | end; 113 | 114 | var M: TMemoryStream; 115 | B: Vcl.Graphics.TBitmap; 116 | begin 117 | M := TMemoryStream.Create; 118 | try 119 | B := TBitmap.Create; 120 | try 121 | GetPrintScreen(B); 122 | B.SaveToStream(M); 123 | finally 124 | B.Free; 125 | end; 126 | 127 | TA.Send(1005, M); 128 | finally 129 | M.Free; 130 | end; 131 | 132 | LbResult.Caption := IntToStr(TA.GetResult); 133 | end; 134 | 135 | end. 136 | -------------------------------------------------------------------------------- /Demo/App1/UFrmMain.dfm: -------------------------------------------------------------------------------- 1 | object FrmMain: TFrmMain 2 | Left = 0 3 | Top = 0 4 | Caption = 'App1' 5 | ClientHeight = 297 6 | ClientWidth = 447 7 | Color = clBtnFace 8 | Font.Charset = DEFAULT_CHARSET 9 | Font.Color = clWindowText 10 | Font.Height = -11 11 | Font.Name = 'Tahoma' 12 | Font.Style = [] 13 | OldCreateOrder = False 14 | PixelsPerInch = 96 15 | TextHeight = 13 16 | object Label1: TLabel 17 | Left = 144 18 | Top = 8 19 | Width = 61 20 | Height = 13 21 | Caption = 'Command ID' 22 | end 23 | object Label2: TLabel 24 | Left = 144 25 | Top = 56 26 | Width = 65 27 | Height = 13 28 | Caption = 'Integer Value' 29 | end 30 | object Label3: TLabel 31 | Left = 144 32 | Top = 104 33 | Width = 51 34 | Height = 13 35 | Caption = 'String text' 36 | end 37 | object Label4: TLabel 38 | Left = 144 39 | Top = 152 40 | Width = 62 41 | Height = 13 42 | Caption = 'Double value' 43 | end 44 | object Label5: TLabel 45 | Left = 144 46 | Top = 200 47 | Width = 37 48 | Height = 13 49 | Caption = 'Number' 50 | end 51 | object Label6: TLabel 52 | Left = 200 53 | Top = 200 54 | Width = 22 55 | Height = 13 56 | Caption = 'Text' 57 | end 58 | object Label7: TLabel 59 | Left = 144 60 | Top = 264 61 | Width = 34 62 | Height = 13 63 | Caption = 'Result:' 64 | end 65 | object LbResult: TLabel 66 | Left = 192 67 | Top = 264 68 | Width = 12 69 | Height = 13 70 | Caption = '---' 71 | end 72 | object BtnSendCmd: TButton 73 | Left = 8 74 | Top = 8 75 | Width = 121 76 | Height = 41 77 | Caption = 'Send Command' 78 | TabOrder = 0 79 | OnClick = BtnSendCmdClick 80 | end 81 | object EdID: TEdit 82 | Left = 144 83 | Top = 24 84 | Width = 121 85 | Height = 21 86 | NumbersOnly = True 87 | TabOrder = 1 88 | Text = '1' 89 | end 90 | object BtnSendInteger: TButton 91 | Left = 8 92 | Top = 56 93 | Width = 121 94 | Height = 41 95 | Caption = 'Send Integer Value' 96 | TabOrder = 2 97 | OnClick = BtnSendIntegerClick 98 | end 99 | object EdInteger: TEdit 100 | Left = 144 101 | Top = 72 102 | Width = 121 103 | Height = 21 104 | NumbersOnly = True 105 | TabOrder = 3 106 | Text = '123456' 107 | end 108 | object BtnSendString: TButton 109 | Left = 8 110 | Top = 104 111 | Width = 121 112 | Height = 41 113 | Caption = 'Send String' 114 | TabOrder = 4 115 | OnClick = BtnSendStringClick 116 | end 117 | object EdString: TEdit 118 | Left = 144 119 | Top = 120 120 | Width = 121 121 | Height = 21 122 | TabOrder = 5 123 | Text = 'TEST STRING' 124 | end 125 | object BtnSendDouble: TButton 126 | Left = 8 127 | Top = 152 128 | Width = 121 129 | Height = 41 130 | Caption = 'Send Double' 131 | TabOrder = 6 132 | OnClick = BtnSendDoubleClick 133 | end 134 | object EdDouble: TEdit 135 | Left = 144 136 | Top = 168 137 | Width = 121 138 | Height = 21 139 | TabOrder = 7 140 | Text = '15.49' 141 | end 142 | object BtnSendRecord: TButton 143 | Left = 8 144 | Top = 200 145 | Width = 121 146 | Height = 41 147 | Caption = 'Send Record' 148 | TabOrder = 8 149 | OnClick = BtnSendRecordClick 150 | end 151 | object EdRecNumber: TEdit 152 | Left = 144 153 | Top = 216 154 | Width = 49 155 | Height = 21 156 | TabOrder = 9 157 | Text = '123' 158 | end 159 | object EdRecText: TEdit 160 | Left = 200 161 | Top = 216 162 | Width = 89 163 | Height = 21 164 | TabOrder = 10 165 | Text = 'RECORD TEXT' 166 | end 167 | object CkRecFlag: TCheckBox 168 | Left = 304 169 | Top = 216 170 | Width = 89 171 | Height = 17 172 | Caption = 'Boolean Flag' 173 | Checked = True 174 | State = cbChecked 175 | TabOrder = 11 176 | end 177 | object BtnSendStream: TButton 178 | Left = 8 179 | Top = 248 180 | Width = 121 181 | Height = 41 182 | Caption = 'Send Stream' 183 | TabOrder = 12 184 | OnClick = BtnSendStreamClick 185 | end 186 | object TA: TDzTalkApp 187 | AutoActivate = True 188 | AutoFind = True 189 | MyWindowName = 'WND_APP1' 190 | DestWindowName = 'WND_APP2' 191 | Synchronous = True 192 | Left = 328 193 | Top = 48 194 | end 195 | end 196 | -------------------------------------------------------------------------------- /DzTalkApp.pas: -------------------------------------------------------------------------------- 1 | {------------------------------------------------------------------------------ 2 | TDzTalkApp component 3 | Developed by Rodrigo Depine Dalpiaz (digao dalpiaz) 4 | Non visual component to communicate between applications 5 | 6 | https://github.com/digao-dalpiaz/DzTalkApp 7 | 8 | Please, read the documentation at GitHub link. 9 | ------------------------------------------------------------------------------} 10 | 11 | {Send Record: 12 | > DzTalkApp.Send(ID, @Record, SizeOf(Record)); 13 | 14 | Receive Record (OnMessage): 15 | > Record := TRecord(P^); 16 | 17 | Warning: always use "packed record" !!! 18 | 19 | // ------------------------------------------- 20 | 21 | Send Double: 22 | > DzTalkApp.Send(ID, @Dbl, SizeOf(Dbl)); 23 | 24 | Receive Double (OnMessage): 25 | > Dbl := Double(P^); 26 | } 27 | 28 | unit DzTalkApp; 29 | 30 | interface 31 | 32 | uses System.Classes, Winapi.Windows, Winapi.Messages, System.SysUtils; 33 | 34 | type 35 | TOnMessage = procedure(Sender: TObject; From: HWND; ID: Word; P: Pointer; Size: Cardinal; 36 | var Result: Integer) of object; 37 | 38 | TDzTalkApp = class(TComponent) 39 | private 40 | WinHandle: HWND; //Handle of VIRTUAL Window created by component 41 | 42 | FAbout: string; 43 | 44 | FAutoActivate: Boolean; //auto-activate on component Loaded 45 | FAutoFind: Boolean; //auto-find destination Window on Send 46 | FMyWindowName: string; 47 | FDestWindowName: string; 48 | FSynchronous: Boolean; //stay locked until other app release OnMessage event 49 | 50 | FActive: Boolean; 51 | FToHandle: HWND; //Destination Window Handle 52 | 53 | FOnMessage: TOnMessage; 54 | 55 | LastFrom: HWND; //last received handle 56 | LastData: Pointer; //last data pointer 57 | LastSize: Cardinal; //last size of data 58 | LastResult: Integer; 59 | 60 | procedure WndProc(var Msg: TMessage); 61 | procedure Msg_CopyData(var D: TWMCopyData); 62 | 63 | procedure IntEnv(ID: Word; P: Pointer; Size: Cardinal); 64 | procedure SetMyWindowName(const Value: string); 65 | protected 66 | procedure Loaded; override; 67 | public 68 | constructor Create(AOwner: TComponent); override; 69 | destructor Destroy; override; 70 | 71 | procedure Enable; 72 | procedure Disable; 73 | 74 | procedure FindDestWindow; 75 | 76 | procedure Send(ID: Word); overload; 77 | procedure Send(ID: Word; N: Integer); overload; 78 | procedure Send(ID: Word; const A: string); overload; 79 | procedure Send(ID: Word; P: Pointer; Size: Cardinal); overload; 80 | procedure Send(ID: Word; S: TMemoryStream); overload; 81 | 82 | function AsString: string; //read received message as string 83 | function AsInteger: Integer; //read received message as Integer 84 | procedure AsStream(Stm: TStream); //read received message as Stream 85 | 86 | property Active: Boolean read FActive; 87 | property ToHandle: HWND read FToHandle write FToHandle; 88 | 89 | function GetResult: Integer; 90 | published 91 | property About: string read FAbout; 92 | 93 | property AutoActivate: Boolean read FAutoActivate write FAutoActivate default False; 94 | property AutoFind: Boolean read FAutoFind write FAutoFind default False; 95 | property MyWindowName: string read FMyWindowName write SetMyWindowName; 96 | property DestWindowName: string read FDestWindowName write FDestWindowName; 97 | property Synchronous: Boolean read FSynchronous write FSynchronous default False; 98 | 99 | property OnMessage: TOnMessage read FOnMessage write FOnMessage; 100 | end; 101 | 102 | EDzTalkAppWndNotFound = class(Exception); 103 | 104 | procedure Register; 105 | 106 | implementation 107 | 108 | const STR_VERSION = '1.9'; 109 | 110 | procedure Register; 111 | begin 112 | RegisterComponents('Digao', [TDzTalkApp]); 113 | end; 114 | 115 | const CONST_WM = WM_COPYDATA; {!} 116 | 117 | constructor TDzTalkApp.Create(AOwner: TComponent); 118 | begin 119 | inherited; 120 | 121 | FAbout := 'Digao Dalpiaz / Version '+STR_VERSION; 122 | 123 | FActive := False; 124 | end; 125 | 126 | destructor TDzTalkApp.Destroy; 127 | begin 128 | if FActive then Disable; 129 | 130 | inherited; 131 | end; 132 | 133 | procedure TDzTalkApp.Loaded; 134 | begin 135 | inherited; 136 | 137 | if not (csDesigning in ComponentState) then 138 | if FAutoActivate then Enable; 139 | end; 140 | 141 | procedure TDzTalkApp.Enable; 142 | begin 143 | if FActive then 144 | raise Exception.Create('TalkApp already active'); 145 | 146 | if FMyWindowName=string.Empty then 147 | raise Exception.Create('Window name is blank'); 148 | 149 | WinHandle := AllocateHWND(WndProc); 150 | SetWindowText(WinHandle, PChar(FMyWindowName)); 151 | 152 | FActive := True; 153 | end; 154 | 155 | procedure TDzTalkApp.Disable; 156 | begin 157 | if not FActive then 158 | raise Exception.Create('TalkApp is not active'); 159 | 160 | DeallocateHWnd(WinHandle); 161 | 162 | FActive := False; 163 | end; 164 | 165 | procedure TDzTalkApp.SetMyWindowName(const Value: string); 166 | begin 167 | if Value<>FMyWindowName then 168 | begin 169 | if FActive then 170 | raise Exception.Create('Can''t change window name while handle is active'); 171 | 172 | FMyWindowName := Value; 173 | end; 174 | end; 175 | 176 | procedure TDzTalkApp.WndProc(var Msg: TMessage); 177 | begin 178 | if Msg.Msg = CONST_WM then //CopyData message 179 | begin 180 | if not FSynchronous then 181 | ReplyMessage(Msg.Result); 182 | 183 | Msg_CopyData( TWMCopyData(Msg) ); 184 | end 185 | else 186 | Msg.Result := DefWindowProc(WinHandle, Msg.Msg, Msg.WParam, Msg.LParam); 187 | end; 188 | 189 | procedure TDzTalkApp.Msg_CopyData(var D: TWMCopyData); 190 | var Res: Integer; 191 | begin 192 | LastFrom := D.From; 193 | LastData := D.CopyDataStruct.lpData; 194 | LastSize := D.CopyDataStruct.cbData; 195 | 196 | Res := 0; 197 | if Assigned(FOnMessage) then 198 | FOnMessage(Self, D.From, 199 | D.CopyDataStruct.dwData, D.CopyDataStruct.lpData, D.CopyDataStruct.cbData, Res); 200 | 201 | D.Result := Res; 202 | end; 203 | 204 | procedure TDzTalkApp.IntEnv(ID: Word; P: Pointer; Size: Cardinal); 205 | var D: TCopyDataStruct; 206 | begin 207 | D.dwData := ID; 208 | D.cbData := Size; 209 | D.lpData := P; 210 | 211 | LastResult := 212 | SendMessage(FToHandle, CONST_WM, WinHandle, Integer(@D)); 213 | end; 214 | 215 | procedure TDzTalkApp.Send(ID: Word); 216 | begin 217 | Send(ID, nil, 0); 218 | end; 219 | 220 | procedure TDzTalkApp.Send(ID: Word; N: Integer); 221 | begin 222 | Send(ID, @N, SizeOf(N)); 223 | end; 224 | 225 | procedure TDzTalkApp.Send(ID: Word; const A: string); 226 | var S: TStringStream; 227 | begin 228 | S := TStringStream.Create(A, TEncoding.Unicode); 229 | try 230 | Send(ID, S); 231 | finally 232 | S.Free; 233 | end; 234 | end; 235 | 236 | procedure TDzTalkApp.Send(ID: Word; S: TMemoryStream); 237 | begin 238 | Send(ID, S.Memory, S.Size); 239 | end; 240 | 241 | procedure TDzTalkApp.Send(ID: Word; P: Pointer; Size: Cardinal); 242 | begin 243 | if not FActive then 244 | raise Exception.Create('TalkApp is not active to send'); 245 | 246 | if FAutoFind then FindDestWindow; 247 | 248 | IntEnv(ID, P, Size); 249 | end; 250 | 251 | procedure TDzTalkApp.FindDestWindow; 252 | var H: HWND; 253 | begin 254 | if FDestWindowName=string.Empty then 255 | raise Exception.Create('Destination window name is blank'); 256 | 257 | H := FindWindow(nil, PChar(FDestWindowName)); 258 | 259 | if H<>0 then 260 | FToHandle := H 261 | else 262 | raise EDzTalkAppWndNotFound.Create('Destination app window not found'); 263 | end; 264 | 265 | function TDzTalkApp.AsString: string; 266 | var S: TStringStream; 267 | begin 268 | S := TStringStream.Create(string.Empty, TEncoding.Unicode); 269 | try 270 | S.WriteData(LastData, LastSize); 271 | Result := S.DataString; 272 | finally 273 | S.Free; 274 | end; 275 | end; 276 | 277 | function TDzTalkApp.AsInteger: Integer; 278 | begin 279 | Result := Integer(LastData^); 280 | end; 281 | 282 | procedure TDzTalkApp.AsStream(Stm: TStream); 283 | begin 284 | Stm.WriteData(LastData, LastSize); 285 | end; 286 | 287 | function TDzTalkApp.GetResult: Integer; 288 | begin 289 | Result := LastResult; 290 | end; 291 | 292 | end. 293 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DzTalkApp 2 | 3 | ## Delphi non-visual component to communicate between applications 4 | 5 | ![Delphi Supported Versions](https://img.shields.io/badge/Delphi%20Supported%20Versions-XE3..11-blue.svg) 6 | ![Platforms](https://img.shields.io/badge/Platforms-Win32%20and%20Win64-red.svg) 7 | ![Auto Install](https://img.shields.io/badge/-Auto%20Install%20App-orange.svg) 8 | ![VCL and FMX](https://img.shields.io/badge/-VCL%20and%20FMX-lightgrey.svg) 9 | 10 | [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/C0C53LVFN) 11 | 12 | - [What's New](#whats-new) 13 | - [Component Description](#component-description) 14 | - [Installing](#installing) 15 | - [How to use](#how-to-use) 16 | - [Properties](#properties) 17 | - [Methods](#methods) 18 | - [Events](#events) 19 | - [How to send and read custom types](#how-to-send-and-read-custom-types) 20 | 21 | ![Demo Screen](images/demo_screen.png) 22 | 23 | ## What's New 24 | 25 | - 09/12/2021 (Version 1.9) 26 | 27 | - Delphi 11 auto-install support. 28 | 29 |
30 | Click here to view the entire changelog 31 | 32 | - 03/13/2021 (Version 1.8) 33 | 34 | - Removed CompInstall.exe from component sources due to AV false positive warning (now you can get it directly from CompInstall repository). 35 | 36 | - 02/01/2021 (Version 1.7) 37 | 38 | - Removed Delphi XE2 from the list of environments as it was never possible to compile in this version. 39 | 40 | - 12/18/2020 (Version 1.6) 41 | 42 | - Updated Component Installer app (Fixed call to rsvars.bat when Delphi is installed in a path containing spaces characters). 43 | 44 | - 11/28/2020 (Version 1.5) 45 | 46 | - FMX support. 47 | 48 | - 11/01/2020 (Version 1.4) 49 | 50 | - Implemented Unicode string send method support. 51 | 52 | - 10/31/2020 (Version 1.3) 53 | 54 | - Included Delphi 10.4 auto-install support. 55 | 56 | - 10/27/2020 (Version 1.2) 57 | 58 | - Fixed previous Delphi versions (at least on XE2, XE3, XE4 and XE5) package tag. It was causing package compilation error. 59 | 60 | - 10/26/2020 (Version 1.1) 61 | 62 | - Updated CompInstall to version 2.0 (now supports GitHub auto-update) 63 | 64 | - 05/03/2020 65 | 66 | - Updated CompInstall to version 1.2 67 | 68 | - 03/11/2019 69 | 70 | - Add Result Code possibility. 71 | - Add method to send Stream data. 72 | - OnMessage event declaration changed. :warning: 73 | 74 |
75 | 76 | ## Component Description 77 | 78 | DzTalkApp allows you to send data between distinct applications. You can send simple data type like Integer or String, and even complex data, like a record. 79 | 80 | ## Installing 81 | 82 | ### Auto install 83 | 84 | 1. Download Component Installer from: https://github.com/digao-dalpiaz/CompInstall/releases/latest 85 | 2. Put **CompInstall.exe** into the component repository sources folder. 86 | 3. Close Delphi IDE and run **CompInstall.exe** app. 87 | 88 | ### Manual install 89 | 90 | 1. Open **DzTalkApp** package in Delphi. 91 | 2. Ensure **Win32** Platform and **Release** config are selected. 92 | 3. Then **Build** and **Install**. 93 | 4. If you want to use Win64 platform, select this platform and Build again. 94 | 5. Add sub-path Win32\Release to the Library paths at Tools\Options using 32-bit option, and if you have compiled to 64 bit platform, add sub-path Win64\Release using 64-bit option. 95 | 96 | Supports Delphi XE3..Delphi 11 97 | 98 | ## How to use 99 | 100 | Drop a TDzTalkApp in the source and destination applications. 101 | 102 | You just need to set the window name in the component, and the communication will occur between window handles. 103 | 104 | In the destination application, just set the OnMessage event to receive and read data. 105 | 106 | ## Properties 107 | 108 | `AutoActivate: Boolean` = Auto-enable the handle on component loaded. This will only works when you set other properties in design-time mode. 109 | 110 | `AutoFind: Boolean` = When AutoFind is enabled, on each Send command, the component will find the destination window handle. 111 | 112 | `MyWindowName: String` = Specify the source handle name. This property is only needed if this app will receive communication. Otherwise you only need to set the destination window name. 113 | 114 | `DestWindowName: String` = Specify the destination window name. This property is only needed if this app will send communication, otherwise you only need to set the source window handle name. 115 | 116 | `Synchronous: Boolean` = If this property is enabled, when you send a command to other app, the execution pointer will be released only after the destination app method `OnMessage` ends. If this property is disabled, when the destination receive the message, immediately the execution pointer is released in the source application. 117 | 118 | `Active: Boolean` (public read-only) = Indicates if the component is enabled or disabled (see `Enable` and `Disable` methods). 119 | 120 | `ToHandle: HWND` (public) = Stores the last destination window handle. You can set this property manually if needed, but I recommend you to use `FindDestWindow` method instead. 121 | 122 | ## Methods 123 | 124 | ```delphi 125 | procedure Enable; 126 | ``` 127 | 128 | Enables the window handle to send and receive messages. You need to specify the name of window handle before use this method. 129 | 130 | ```delphi 131 | procedure Disable; 132 | ``` 133 | 134 | Disables the window handle. 135 | 136 | ```delphi 137 | procedure FindDestWindow; 138 | ``` 139 | 140 | Find and set destination window handle by the name defined in `DestWindowName` property. If the destination window is not found, an error is raised, using class `EDzTalkAppWndNotFound`. 141 | 142 | ```delphi 143 | procedure Send(ID: Word); overload; 144 | procedure Send(ID: Word; N: Integer); overload; 145 | procedure Send(ID: Word; const A: string); overload; 146 | procedure Send(ID: Word; P: Pointer; Size: Cardinal); overload; 147 | procedure Send(ID: Word; S: TMemoryStream); overload; 148 | ``` 149 | 150 | Use **Send** methods to send a message to destination application. To send messages, the component needs to be enabled (use `Enable` method) and needs a destination window name defined (use `DestWindowName` property). 151 | 152 | The overloads methods allows you to send: 153 | 154 | - Only a command, using `ID` parameter 155 | 156 | - A command with an Integer parameter, using `N` parameter 157 | 158 | - A command with a String parameter, using `A` parameter 159 | 160 | - A command with any kind of data parameter, using `P` parameter and specifying the size of data parameter. 161 | 162 | - A command with a memory data stream, using `S` parameter. 163 | 164 | ```delphi 165 | function AsString: string; 166 | ``` 167 | 168 | Use this function inside the OnMessage event to get a message data as String type. 169 | 170 | ```delphi 171 | function AsInteger: Integer; 172 | ``` 173 | 174 | Use this function inside the OnMessage event to get a message data as Integer type. 175 | 176 | ```delphi 177 | procedure AsStream(Stm: TStream); 178 | ``` 179 | 180 | Use this procedure inside the OnMessage event to get a message data as TStream type (the object need to be created before call this method). 181 | 182 | ```delphi 183 | function GetResult: Integer; 184 | ``` 185 | 186 | You can use this function right after call `Send` method to get the result code of the message received by the destination app. You can set this result in **OnMessage** event at destination application. *Please see description of OnMessage event.* 187 | 188 | ## Events 189 | 190 | ```delphi 191 | procedure OnMessage(Sender: TObject; From: HWND; ID: Word; P: Pointer; Size: Cardinal; var Result: Integer); 192 | ``` 193 | 194 | This method will occur in the destination app when a message is received. The `From` parameter indicates the handle of the source window. The `ID` parameter indicates the code of the message used in the `Send` method at the source app. The `P` parameter has the pointer of the message data. The `Size` parameter allows you to know the size of the data received. 195 | 196 | The `Result` parameter allows you to set a result code to return to the sender application (the sender application should use `GetResult` function right after use `Send` method to read this result code). 197 | 198 | You can use the `AsString`, `AsInteger` or `AsStream` methods to get message data content as specific type. 199 | 200 | ## How to send and read custom types 201 | 202 | ### Record types: 203 | 204 | You can send record structure. To do this, ensure you are always using `packed record`, because this kind of record will use a fixed size structure. 205 | 206 | **To send a record, use:** 207 | 208 | ```delphi 209 | type 210 | TData = packed record 211 | Number: Integer; 212 | Text: ShortString; 213 | Flag: Boolean; 214 | end; 215 | 216 | var R: TData; 217 | begin 218 | R.Number := 100; 219 | R.Text := 'TEST'; 220 | R.Flag := True; 221 | 222 | DzTalkApp.Send(1, @R, SizeOf(R)); 223 | end; 224 | ``` 225 | 226 | **To receive this record using OnMessage event:** 227 | 228 | ```delphi 229 | var R: TData; 230 | begin 231 | R := TData(P^); 232 | end; 233 | ``` 234 | 235 | > Of course, the packed record on destination application must have the same structure as the record used in the sender application. 236 | 237 | ### Simple types: 238 | 239 | **To send a Double type:** 240 | 241 | ```delphi 242 | var D: Double; 243 | begin 244 | DzTalkApp.Send(1, @D, SizeOf(D)); 245 | end; 246 | ``` 247 | 248 | **To receive a Double type (OnMessage event):** 249 | 250 | ```delphi 251 | var D: Double; 252 | begin 253 | D := Double(P^); 254 | end; 255 | ``` 256 | -------------------------------------------------------------------------------- /DzTalkApp.dproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | {45120C4C-2880-42D0-A28A-BA38C2D2A50E} 4 | DzTalkApp.dpk 5 | 18.8 6 | VCL 7 | True 8 | Release 9 | Win32 10 | 1 11 | Package 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 | Cfg_1 29 | true 30 | true 31 | 32 | 33 | true 34 | Base 35 | true 36 | 37 | 38 | true 39 | Cfg_2 40 | true 41 | true 42 | 43 | 44 | .\$(Platform)\$(Config) 45 | .\$(Platform)\$(Config) 46 | false 47 | false 48 | false 49 | false 50 | false 51 | true 52 | true 53 | System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) 54 | 1046 55 | DzTalkApp 56 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= 57 | Digao Dalpiaz - TalkApp Component 58 | 59 | 60 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) 61 | Debug 62 | true 63 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= 64 | 1033 65 | vcl;rtl;$(DCC_UsePackage) 66 | 67 | 68 | DEBUG;$(DCC_Define) 69 | true 70 | false 71 | true 72 | true 73 | true 74 | 75 | 76 | false 77 | 78 | 79 | false 80 | RELEASE;$(DCC_Define) 81 | 0 82 | 83 | 84 | true 85 | 1033 86 | Digao Dalpiaz - DzTalkApp component 87 | 88 | 89 | 90 | MainSource 91 | 92 | 93 | 94 | 95 | 96 | 97 | Cfg_2 98 | Base 99 | 100 | 101 | Base 102 | 103 | 104 | Cfg_1 105 | Base 106 | 107 | 108 | 109 | Delphi.Personality.12 110 | Package 111 | 112 | 113 | 114 | DzTalkApp.dpk 115 | 116 | 117 | Microsoft Office 2000 Sample Automation Server Wrapper Components 118 | Microsoft Office XP Sample Automation Server Wrapper Components 119 | 120 | 121 | 122 | 123 | 124 | true 125 | 126 | 127 | 128 | 129 | true 130 | 131 | 132 | 133 | 134 | true 135 | 136 | 137 | 138 | 139 | true 140 | 141 | 142 | 143 | 144 | true 145 | 146 | 147 | 148 | 149 | DzTalkApp.bpl 150 | true 151 | 152 | 153 | 154 | 155 | 1 156 | 157 | 158 | 0 159 | 160 | 161 | 162 | 163 | classes 164 | 1 165 | 166 | 167 | classes 168 | 1 169 | 170 | 171 | 172 | 173 | res\xml 174 | 1 175 | 176 | 177 | res\xml 178 | 1 179 | 180 | 181 | 182 | 183 | library\lib\armeabi-v7a 184 | 1 185 | 186 | 187 | 188 | 189 | library\lib\armeabi 190 | 1 191 | 192 | 193 | library\lib\armeabi 194 | 1 195 | 196 | 197 | 198 | 199 | library\lib\armeabi-v7a 200 | 1 201 | 202 | 203 | 204 | 205 | library\lib\mips 206 | 1 207 | 208 | 209 | library\lib\mips 210 | 1 211 | 212 | 213 | 214 | 215 | library\lib\armeabi-v7a 216 | 1 217 | 218 | 219 | library\lib\arm64-v8a 220 | 1 221 | 222 | 223 | 224 | 225 | library\lib\armeabi-v7a 226 | 1 227 | 228 | 229 | 230 | 231 | res\drawable 232 | 1 233 | 234 | 235 | res\drawable 236 | 1 237 | 238 | 239 | 240 | 241 | res\values 242 | 1 243 | 244 | 245 | res\values 246 | 1 247 | 248 | 249 | 250 | 251 | res\values-v21 252 | 1 253 | 254 | 255 | res\values-v21 256 | 1 257 | 258 | 259 | 260 | 261 | res\values 262 | 1 263 | 264 | 265 | res\values 266 | 1 267 | 268 | 269 | 270 | 271 | res\drawable 272 | 1 273 | 274 | 275 | res\drawable 276 | 1 277 | 278 | 279 | 280 | 281 | res\drawable-xxhdpi 282 | 1 283 | 284 | 285 | res\drawable-xxhdpi 286 | 1 287 | 288 | 289 | 290 | 291 | res\drawable-ldpi 292 | 1 293 | 294 | 295 | res\drawable-ldpi 296 | 1 297 | 298 | 299 | 300 | 301 | res\drawable-mdpi 302 | 1 303 | 304 | 305 | res\drawable-mdpi 306 | 1 307 | 308 | 309 | 310 | 311 | res\drawable-hdpi 312 | 1 313 | 314 | 315 | res\drawable-hdpi 316 | 1 317 | 318 | 319 | 320 | 321 | res\drawable-xhdpi 322 | 1 323 | 324 | 325 | res\drawable-xhdpi 326 | 1 327 | 328 | 329 | 330 | 331 | res\drawable-mdpi 332 | 1 333 | 334 | 335 | res\drawable-mdpi 336 | 1 337 | 338 | 339 | 340 | 341 | res\drawable-hdpi 342 | 1 343 | 344 | 345 | res\drawable-hdpi 346 | 1 347 | 348 | 349 | 350 | 351 | res\drawable-xhdpi 352 | 1 353 | 354 | 355 | res\drawable-xhdpi 356 | 1 357 | 358 | 359 | 360 | 361 | res\drawable-xxhdpi 362 | 1 363 | 364 | 365 | res\drawable-xxhdpi 366 | 1 367 | 368 | 369 | 370 | 371 | res\drawable-xxxhdpi 372 | 1 373 | 374 | 375 | res\drawable-xxxhdpi 376 | 1 377 | 378 | 379 | 380 | 381 | res\drawable-small 382 | 1 383 | 384 | 385 | res\drawable-small 386 | 1 387 | 388 | 389 | 390 | 391 | res\drawable-normal 392 | 1 393 | 394 | 395 | res\drawable-normal 396 | 1 397 | 398 | 399 | 400 | 401 | res\drawable-large 402 | 1 403 | 404 | 405 | res\drawable-large 406 | 1 407 | 408 | 409 | 410 | 411 | res\drawable-xlarge 412 | 1 413 | 414 | 415 | res\drawable-xlarge 416 | 1 417 | 418 | 419 | 420 | 421 | res\values 422 | 1 423 | 424 | 425 | res\values 426 | 1 427 | 428 | 429 | 430 | 431 | 1 432 | 433 | 434 | 1 435 | 436 | 437 | 0 438 | 439 | 440 | 441 | 442 | 1 443 | .framework 444 | 445 | 446 | 1 447 | .framework 448 | 449 | 450 | 0 451 | 452 | 453 | 454 | 455 | 1 456 | .dylib 457 | 458 | 459 | 1 460 | .dylib 461 | 462 | 463 | 0 464 | .dll;.bpl 465 | 466 | 467 | 468 | 469 | 1 470 | .dylib 471 | 472 | 473 | 1 474 | .dylib 475 | 476 | 477 | 1 478 | .dylib 479 | 480 | 481 | 1 482 | .dylib 483 | 484 | 485 | 1 486 | .dylib 487 | 488 | 489 | 0 490 | .bpl 491 | 492 | 493 | 494 | 495 | 0 496 | 497 | 498 | 0 499 | 500 | 501 | 0 502 | 503 | 504 | 0 505 | 506 | 507 | 0 508 | 509 | 510 | 0 511 | 512 | 513 | 0 514 | 515 | 516 | 0 517 | 518 | 519 | 520 | 521 | 1 522 | 523 | 524 | 1 525 | 526 | 527 | 1 528 | 529 | 530 | 531 | 532 | 1 533 | 534 | 535 | 1 536 | 537 | 538 | 1 539 | 540 | 541 | 542 | 543 | 1 544 | 545 | 546 | 1 547 | 548 | 549 | 1 550 | 551 | 552 | 553 | 554 | 1 555 | 556 | 557 | 1 558 | 559 | 560 | 1 561 | 562 | 563 | 564 | 565 | 1 566 | 567 | 568 | 1 569 | 570 | 571 | 1 572 | 573 | 574 | 575 | 576 | 1 577 | 578 | 579 | 1 580 | 581 | 582 | 1 583 | 584 | 585 | 586 | 587 | 1 588 | 589 | 590 | 1 591 | 592 | 593 | 1 594 | 595 | 596 | 597 | 598 | 1 599 | 600 | 601 | 1 602 | 603 | 604 | 1 605 | 606 | 607 | 608 | 609 | 1 610 | 611 | 612 | 1 613 | 614 | 615 | 1 616 | 617 | 618 | 619 | 620 | 1 621 | 622 | 623 | 1 624 | 625 | 626 | 1 627 | 628 | 629 | 630 | 631 | 1 632 | 633 | 634 | 1 635 | 636 | 637 | 1 638 | 639 | 640 | 641 | 642 | 1 643 | 644 | 645 | 1 646 | 647 | 648 | 1 649 | 650 | 651 | 652 | 653 | 1 654 | 655 | 656 | 1 657 | 658 | 659 | 1 660 | 661 | 662 | 663 | 664 | 1 665 | 666 | 667 | 1 668 | 669 | 670 | 1 671 | 672 | 673 | 674 | 675 | 1 676 | 677 | 678 | 1 679 | 680 | 681 | 1 682 | 683 | 684 | 685 | 686 | 1 687 | 688 | 689 | 1 690 | 691 | 692 | 1 693 | 694 | 695 | 696 | 697 | 1 698 | 699 | 700 | 1 701 | 702 | 703 | 1 704 | 705 | 706 | 707 | 708 | 1 709 | 710 | 711 | 1 712 | 713 | 714 | 1 715 | 716 | 717 | 718 | 719 | 1 720 | 721 | 722 | 1 723 | 724 | 725 | 1 726 | 727 | 728 | 729 | 730 | 1 731 | 732 | 733 | 1 734 | 735 | 736 | 1 737 | 738 | 739 | 740 | 741 | 1 742 | 743 | 744 | 1 745 | 746 | 747 | 1 748 | 749 | 750 | 751 | 752 | 1 753 | 754 | 755 | 1 756 | 757 | 758 | 1 759 | 760 | 761 | 762 | 763 | 1 764 | 765 | 766 | 1 767 | 768 | 769 | 1 770 | 771 | 772 | 773 | 774 | 1 775 | 776 | 777 | 1 778 | 779 | 780 | 1 781 | 782 | 783 | 784 | 785 | 1 786 | 787 | 788 | 1 789 | 790 | 791 | 1 792 | 793 | 794 | 795 | 796 | 1 797 | 798 | 799 | 1 800 | 801 | 802 | 1 803 | 804 | 805 | 806 | 807 | 1 808 | 809 | 810 | 1 811 | 812 | 813 | 1 814 | 815 | 816 | 817 | 818 | 1 819 | 820 | 821 | 1 822 | 823 | 824 | 1 825 | 826 | 827 | 828 | 829 | 1 830 | 831 | 832 | 1 833 | 834 | 835 | 836 | 837 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 838 | 1 839 | 840 | 841 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 842 | 1 843 | 844 | 845 | 846 | 847 | 848 | 849 | 850 | 1 851 | 852 | 853 | 1 854 | 855 | 856 | 1 857 | 858 | 859 | 860 | 861 | 862 | 863 | 864 | Contents\Resources 865 | 1 866 | 867 | 868 | Contents\Resources 869 | 1 870 | 871 | 872 | 873 | 874 | library\lib\armeabi-v7a 875 | 1 876 | 877 | 878 | library\lib\arm64-v8a 879 | 1 880 | 881 | 882 | 1 883 | 884 | 885 | 1 886 | 887 | 888 | 1 889 | 890 | 891 | 1 892 | 893 | 894 | 1 895 | 896 | 897 | 1 898 | 899 | 900 | 0 901 | 902 | 903 | 904 | 905 | library\lib\armeabi-v7a 906 | 1 907 | 908 | 909 | 910 | 911 | 1 912 | 913 | 914 | 1 915 | 916 | 917 | 918 | 919 | Assets 920 | 1 921 | 922 | 923 | Assets 924 | 1 925 | 926 | 927 | 928 | 929 | Assets 930 | 1 931 | 932 | 933 | Assets 934 | 1 935 | 936 | 937 | 938 | 939 | 940 | 941 | 942 | 943 | 944 | 945 | 946 | 947 | 948 | 949 | True 950 | 951 | 952 | 12 953 | 954 | 955 | 956 | 957 | 958 | -------------------------------------------------------------------------------- /Demo/App1/App1.dproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | {535B749B-3E39-476B-9FF5-373AC1198CD0} 4 | 18.8 5 | VCL 6 | App1.dpr 7 | True 8 | Debug 9 | Win32 10 | 1 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 | Cfg_1 29 | true 30 | true 31 | 32 | 33 | true 34 | Base 35 | true 36 | 37 | 38 | true 39 | Cfg_2 40 | true 41 | true 42 | 43 | 44 | .\$(Platform)\$(Config) 45 | .\$(Platform)\$(Config) 46 | false 47 | false 48 | false 49 | false 50 | false 51 | System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) 52 | $(BDS)\bin\delphi_PROJECTICON.ico 53 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png 54 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png 55 | App1 56 | 57 | 58 | DBXSqliteDriver;IndyIPCommon;RESTComponents;bindcompdbx;DBXInterBaseDriver;vcl;IndyIPServer;vclactnband;vclFireDAC;IndySystem;tethering;svnui;dsnapcon;FireDACADSDriver;DzDirSeek;FireDACMSAccDriver;fmxFireDAC;vclimg;TeeDB;FireDAC;vcltouch;vcldb;bindcompfmx;svn;FireDACSqliteDriver;FireDACPgDriver;inetdb;DzMiniTable;FMXTee;soaprtl;DbxCommonDriver;FmxTeeUI;fmx;FireDACIBDriver;fmxdae;xmlrtl;soapmidas;Tee;fmxobj;vclwinx;rtl;DzTalkApp;DbxClientDriver;CustomIPTransport;vcldsnap;dbexpress;IndyCore;vclx;DzSocket;bindcomp;appanalytics;dsnap;FireDACCommon;IndyIPClient;bindcompvcl;SynEdit_R;RESTBackendComponents;TeeUI;VCLRESTComponents;soapserver;dbxcds;VclSmp;adortl;DzListHeader;vclie;DzHTMLText;bindengine;DBXMySQLDriver;CloudService;dsnapxml;FireDACMySQLDriver;dbrtl;IndyProtocols;inetdbxpress;DzNotepad;FireDACCommonODBC;FireDACCommonDriver;DamPackage;inet;fmxase;$(DCC_UsePackage) 59 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) 60 | Debug 61 | true 62 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= 63 | 1033 64 | $(BDS)\bin\default_app.manifest 65 | 66 | 67 | DEBUG;$(DCC_Define) 68 | true 69 | false 70 | true 71 | true 72 | true 73 | 74 | 75 | false 76 | true 77 | PerMonitorV2 78 | 79 | 80 | false 81 | RELEASE;$(DCC_Define) 82 | 0 83 | 0 84 | 85 | 86 | true 87 | PerMonitorV2 88 | 89 | 90 | 91 | MainSource 92 | 93 | 94 |
FrmMain
95 | dfm 96 |
97 | 98 | Cfg_2 99 | Base 100 | 101 | 102 | Base 103 | 104 | 105 | Cfg_1 106 | Base 107 | 108 |
109 | 110 | Delphi.Personality.12 111 | Application 112 | 113 | 114 | 115 | App1.dpr 116 | 117 | 118 | 119 | 120 | 121 | App1.exe 122 | true 123 | 124 | 125 | 126 | 127 | 1 128 | 129 | 130 | Contents\MacOS 131 | 1 132 | 133 | 134 | 0 135 | 136 | 137 | 138 | 139 | classes 140 | 1 141 | 142 | 143 | classes 144 | 1 145 | 146 | 147 | 148 | 149 | res\xml 150 | 1 151 | 152 | 153 | res\xml 154 | 1 155 | 156 | 157 | 158 | 159 | library\lib\armeabi-v7a 160 | 1 161 | 162 | 163 | 164 | 165 | library\lib\armeabi 166 | 1 167 | 168 | 169 | library\lib\armeabi 170 | 1 171 | 172 | 173 | 174 | 175 | library\lib\armeabi-v7a 176 | 1 177 | 178 | 179 | 180 | 181 | library\lib\mips 182 | 1 183 | 184 | 185 | library\lib\mips 186 | 1 187 | 188 | 189 | 190 | 191 | library\lib\armeabi-v7a 192 | 1 193 | 194 | 195 | library\lib\arm64-v8a 196 | 1 197 | 198 | 199 | 200 | 201 | library\lib\armeabi-v7a 202 | 1 203 | 204 | 205 | 206 | 207 | res\drawable 208 | 1 209 | 210 | 211 | res\drawable 212 | 1 213 | 214 | 215 | 216 | 217 | res\values 218 | 1 219 | 220 | 221 | res\values 222 | 1 223 | 224 | 225 | 226 | 227 | res\values-v21 228 | 1 229 | 230 | 231 | res\values-v21 232 | 1 233 | 234 | 235 | 236 | 237 | res\values 238 | 1 239 | 240 | 241 | res\values 242 | 1 243 | 244 | 245 | 246 | 247 | res\drawable 248 | 1 249 | 250 | 251 | res\drawable 252 | 1 253 | 254 | 255 | 256 | 257 | res\drawable-xxhdpi 258 | 1 259 | 260 | 261 | res\drawable-xxhdpi 262 | 1 263 | 264 | 265 | 266 | 267 | res\drawable-ldpi 268 | 1 269 | 270 | 271 | res\drawable-ldpi 272 | 1 273 | 274 | 275 | 276 | 277 | res\drawable-mdpi 278 | 1 279 | 280 | 281 | res\drawable-mdpi 282 | 1 283 | 284 | 285 | 286 | 287 | res\drawable-hdpi 288 | 1 289 | 290 | 291 | res\drawable-hdpi 292 | 1 293 | 294 | 295 | 296 | 297 | res\drawable-xhdpi 298 | 1 299 | 300 | 301 | res\drawable-xhdpi 302 | 1 303 | 304 | 305 | 306 | 307 | res\drawable-mdpi 308 | 1 309 | 310 | 311 | res\drawable-mdpi 312 | 1 313 | 314 | 315 | 316 | 317 | res\drawable-hdpi 318 | 1 319 | 320 | 321 | res\drawable-hdpi 322 | 1 323 | 324 | 325 | 326 | 327 | res\drawable-xhdpi 328 | 1 329 | 330 | 331 | res\drawable-xhdpi 332 | 1 333 | 334 | 335 | 336 | 337 | res\drawable-xxhdpi 338 | 1 339 | 340 | 341 | res\drawable-xxhdpi 342 | 1 343 | 344 | 345 | 346 | 347 | res\drawable-xxxhdpi 348 | 1 349 | 350 | 351 | res\drawable-xxxhdpi 352 | 1 353 | 354 | 355 | 356 | 357 | res\drawable-small 358 | 1 359 | 360 | 361 | res\drawable-small 362 | 1 363 | 364 | 365 | 366 | 367 | res\drawable-normal 368 | 1 369 | 370 | 371 | res\drawable-normal 372 | 1 373 | 374 | 375 | 376 | 377 | res\drawable-large 378 | 1 379 | 380 | 381 | res\drawable-large 382 | 1 383 | 384 | 385 | 386 | 387 | res\drawable-xlarge 388 | 1 389 | 390 | 391 | res\drawable-xlarge 392 | 1 393 | 394 | 395 | 396 | 397 | res\values 398 | 1 399 | 400 | 401 | res\values 402 | 1 403 | 404 | 405 | 406 | 407 | 1 408 | 409 | 410 | Contents\MacOS 411 | 1 412 | 413 | 414 | 0 415 | 416 | 417 | 418 | 419 | Contents\MacOS 420 | 1 421 | .framework 422 | 423 | 424 | Contents\MacOS 425 | 1 426 | .framework 427 | 428 | 429 | 0 430 | 431 | 432 | 433 | 434 | 1 435 | .dylib 436 | 437 | 438 | 1 439 | .dylib 440 | 441 | 442 | 1 443 | .dylib 444 | 445 | 446 | Contents\MacOS 447 | 1 448 | .dylib 449 | 450 | 451 | Contents\MacOS 452 | 1 453 | .dylib 454 | 455 | 456 | 0 457 | .dll;.bpl 458 | 459 | 460 | 461 | 462 | 1 463 | .dylib 464 | 465 | 466 | 1 467 | .dylib 468 | 469 | 470 | 1 471 | .dylib 472 | 473 | 474 | Contents\MacOS 475 | 1 476 | .dylib 477 | 478 | 479 | Contents\MacOS 480 | 1 481 | .dylib 482 | 483 | 484 | 0 485 | .bpl 486 | 487 | 488 | 489 | 490 | 0 491 | 492 | 493 | 0 494 | 495 | 496 | 0 497 | 498 | 499 | 0 500 | 501 | 502 | 0 503 | 504 | 505 | Contents\Resources\StartUp\ 506 | 0 507 | 508 | 509 | Contents\Resources\StartUp\ 510 | 0 511 | 512 | 513 | 0 514 | 515 | 516 | 517 | 518 | 1 519 | 520 | 521 | 1 522 | 523 | 524 | 1 525 | 526 | 527 | 528 | 529 | 1 530 | 531 | 532 | 1 533 | 534 | 535 | 1 536 | 537 | 538 | 539 | 540 | 1 541 | 542 | 543 | 1 544 | 545 | 546 | 1 547 | 548 | 549 | 550 | 551 | 1 552 | 553 | 554 | 1 555 | 556 | 557 | 1 558 | 559 | 560 | 561 | 562 | 1 563 | 564 | 565 | 1 566 | 567 | 568 | 1 569 | 570 | 571 | 572 | 573 | 1 574 | 575 | 576 | 1 577 | 578 | 579 | 1 580 | 581 | 582 | 583 | 584 | 1 585 | 586 | 587 | 1 588 | 589 | 590 | 1 591 | 592 | 593 | 594 | 595 | 1 596 | 597 | 598 | 1 599 | 600 | 601 | 1 602 | 603 | 604 | 605 | 606 | 1 607 | 608 | 609 | 1 610 | 611 | 612 | 1 613 | 614 | 615 | 616 | 617 | 1 618 | 619 | 620 | 1 621 | 622 | 623 | 1 624 | 625 | 626 | 627 | 628 | 1 629 | 630 | 631 | 1 632 | 633 | 634 | 1 635 | 636 | 637 | 638 | 639 | 1 640 | 641 | 642 | 1 643 | 644 | 645 | 1 646 | 647 | 648 | 649 | 650 | 1 651 | 652 | 653 | 1 654 | 655 | 656 | 1 657 | 658 | 659 | 660 | 661 | 1 662 | 663 | 664 | 1 665 | 666 | 667 | 1 668 | 669 | 670 | 671 | 672 | 1 673 | 674 | 675 | 1 676 | 677 | 678 | 1 679 | 680 | 681 | 682 | 683 | 1 684 | 685 | 686 | 1 687 | 688 | 689 | 1 690 | 691 | 692 | 693 | 694 | 1 695 | 696 | 697 | 1 698 | 699 | 700 | 1 701 | 702 | 703 | 704 | 705 | 1 706 | 707 | 708 | 1 709 | 710 | 711 | 1 712 | 713 | 714 | 715 | 716 | 1 717 | 718 | 719 | 1 720 | 721 | 722 | 1 723 | 724 | 725 | 726 | 727 | 1 728 | 729 | 730 | 1 731 | 732 | 733 | 1 734 | 735 | 736 | 737 | 738 | 1 739 | 740 | 741 | 1 742 | 743 | 744 | 1 745 | 746 | 747 | 748 | 749 | 1 750 | 751 | 752 | 1 753 | 754 | 755 | 1 756 | 757 | 758 | 759 | 760 | 1 761 | 762 | 763 | 1 764 | 765 | 766 | 1 767 | 768 | 769 | 770 | 771 | 1 772 | 773 | 774 | 1 775 | 776 | 777 | 1 778 | 779 | 780 | 781 | 782 | 1 783 | 784 | 785 | 1 786 | 787 | 788 | 1 789 | 790 | 791 | 792 | 793 | 1 794 | 795 | 796 | 1 797 | 798 | 799 | 1 800 | 801 | 802 | 803 | 804 | 1 805 | 806 | 807 | 1 808 | 809 | 810 | 1 811 | 812 | 813 | 814 | 815 | 1 816 | 817 | 818 | 1 819 | 820 | 821 | 1 822 | 823 | 824 | 825 | 826 | 1 827 | 828 | 829 | 1 830 | 831 | 832 | 833 | 834 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 835 | 1 836 | 837 | 838 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 839 | 1 840 | 841 | 842 | 843 | 844 | 1 845 | 846 | 847 | 1 848 | 849 | 850 | 851 | 852 | ..\ 853 | 1 854 | 855 | 856 | ..\ 857 | 1 858 | 859 | 860 | 861 | 862 | 1 863 | 864 | 865 | 1 866 | 867 | 868 | 1 869 | 870 | 871 | 872 | 873 | 1 874 | 875 | 876 | 1 877 | 878 | 879 | 1 880 | 881 | 882 | 883 | 884 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 885 | 1 886 | 887 | 888 | 889 | 890 | ..\ 891 | 1 892 | 893 | 894 | ..\ 895 | 1 896 | 897 | 898 | 899 | 900 | Contents 901 | 1 902 | 903 | 904 | Contents 905 | 1 906 | 907 | 908 | 909 | 910 | Contents\Resources 911 | 1 912 | 913 | 914 | Contents\Resources 915 | 1 916 | 917 | 918 | 919 | 920 | library\lib\armeabi-v7a 921 | 1 922 | 923 | 924 | library\lib\arm64-v8a 925 | 1 926 | 927 | 928 | 1 929 | 930 | 931 | 1 932 | 933 | 934 | 1 935 | 936 | 937 | 1 938 | 939 | 940 | Contents\MacOS 941 | 1 942 | 943 | 944 | Contents\MacOS 945 | 1 946 | 947 | 948 | 0 949 | 950 | 951 | 952 | 953 | library\lib\armeabi-v7a 954 | 1 955 | 956 | 957 | 958 | 959 | 1 960 | 961 | 962 | 1 963 | 964 | 965 | 966 | 967 | Assets 968 | 1 969 | 970 | 971 | Assets 972 | 1 973 | 974 | 975 | 976 | 977 | Assets 978 | 1 979 | 980 | 981 | Assets 982 | 1 983 | 984 | 985 | 986 | 987 | 988 | 989 | 990 | 991 | 992 | 993 | 994 | 995 | 996 | 997 | True 998 | 999 | 1000 | 12 1001 | 1002 | 1003 | 1004 | 1005 |
1006 | -------------------------------------------------------------------------------- /Demo/App2/App2.dproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | {1A312AE7-DC95-46A3-AF79-60F84C25241E} 4 | 18.8 5 | VCL 6 | App2.dpr 7 | True 8 | Debug 9 | Win32 10 | 1 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 | Cfg_1 29 | true 30 | true 31 | 32 | 33 | true 34 | Base 35 | true 36 | 37 | 38 | true 39 | Cfg_2 40 | true 41 | true 42 | 43 | 44 | .\$(Platform)\$(Config) 45 | .\$(Platform)\$(Config) 46 | false 47 | false 48 | false 49 | false 50 | false 51 | System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) 52 | $(BDS)\bin\delphi_PROJECTICON.ico 53 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png 54 | $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png 55 | App2 56 | 57 | 58 | DBXSqliteDriver;IndyIPCommon;RESTComponents;bindcompdbx;DBXInterBaseDriver;vcl;IndyIPServer;vclactnband;vclFireDAC;IndySystem;tethering;svnui;dsnapcon;FireDACADSDriver;DzDirSeek;FireDACMSAccDriver;fmxFireDAC;vclimg;TeeDB;FireDAC;vcltouch;vcldb;bindcompfmx;svn;FireDACSqliteDriver;FireDACPgDriver;inetdb;DzMiniTable;FMXTee;soaprtl;DbxCommonDriver;FmxTeeUI;fmx;FireDACIBDriver;fmxdae;xmlrtl;soapmidas;Tee;fmxobj;vclwinx;rtl;DzTalkApp;DbxClientDriver;CustomIPTransport;vcldsnap;dbexpress;IndyCore;vclx;DzSocket;bindcomp;appanalytics;dsnap;FireDACCommon;IndyIPClient;bindcompvcl;SynEdit_R;RESTBackendComponents;TeeUI;VCLRESTComponents;soapserver;dbxcds;VclSmp;adortl;DzListHeader;vclie;DzHTMLText;bindengine;DBXMySQLDriver;CloudService;dsnapxml;FireDACMySQLDriver;dbrtl;IndyProtocols;inetdbxpress;DzNotepad;FireDACCommonODBC;FireDACCommonDriver;DamPackage;inet;fmxase;$(DCC_UsePackage) 59 | Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) 60 | Debug 61 | true 62 | CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= 63 | 1033 64 | $(BDS)\bin\default_app.manifest 65 | 66 | 67 | DEBUG;$(DCC_Define) 68 | true 69 | false 70 | true 71 | true 72 | true 73 | 74 | 75 | false 76 | true 77 | PerMonitorV2 78 | 79 | 80 | false 81 | RELEASE;$(DCC_Define) 82 | 0 83 | 0 84 | 85 | 86 | true 87 | PerMonitorV2 88 | 89 | 90 | 91 | MainSource 92 | 93 | 94 |
Form1
95 | dfm 96 |
97 | 98 |
FrmStream
99 | dfm 100 |
101 | 102 | Cfg_2 103 | Base 104 | 105 | 106 | Base 107 | 108 | 109 | Cfg_1 110 | Base 111 | 112 |
113 | 114 | Delphi.Personality.12 115 | Application 116 | 117 | 118 | 119 | App2.dpr 120 | 121 | 122 | 123 | 124 | 125 | App2.exe 126 | true 127 | 128 | 129 | 130 | 131 | 1 132 | 133 | 134 | Contents\MacOS 135 | 1 136 | 137 | 138 | 0 139 | 140 | 141 | 142 | 143 | classes 144 | 1 145 | 146 | 147 | classes 148 | 1 149 | 150 | 151 | 152 | 153 | res\xml 154 | 1 155 | 156 | 157 | res\xml 158 | 1 159 | 160 | 161 | 162 | 163 | library\lib\armeabi-v7a 164 | 1 165 | 166 | 167 | 168 | 169 | library\lib\armeabi 170 | 1 171 | 172 | 173 | library\lib\armeabi 174 | 1 175 | 176 | 177 | 178 | 179 | library\lib\armeabi-v7a 180 | 1 181 | 182 | 183 | 184 | 185 | library\lib\mips 186 | 1 187 | 188 | 189 | library\lib\mips 190 | 1 191 | 192 | 193 | 194 | 195 | library\lib\armeabi-v7a 196 | 1 197 | 198 | 199 | library\lib\arm64-v8a 200 | 1 201 | 202 | 203 | 204 | 205 | library\lib\armeabi-v7a 206 | 1 207 | 208 | 209 | 210 | 211 | res\drawable 212 | 1 213 | 214 | 215 | res\drawable 216 | 1 217 | 218 | 219 | 220 | 221 | res\values 222 | 1 223 | 224 | 225 | res\values 226 | 1 227 | 228 | 229 | 230 | 231 | res\values-v21 232 | 1 233 | 234 | 235 | res\values-v21 236 | 1 237 | 238 | 239 | 240 | 241 | res\values 242 | 1 243 | 244 | 245 | res\values 246 | 1 247 | 248 | 249 | 250 | 251 | res\drawable 252 | 1 253 | 254 | 255 | res\drawable 256 | 1 257 | 258 | 259 | 260 | 261 | res\drawable-xxhdpi 262 | 1 263 | 264 | 265 | res\drawable-xxhdpi 266 | 1 267 | 268 | 269 | 270 | 271 | res\drawable-ldpi 272 | 1 273 | 274 | 275 | res\drawable-ldpi 276 | 1 277 | 278 | 279 | 280 | 281 | res\drawable-mdpi 282 | 1 283 | 284 | 285 | res\drawable-mdpi 286 | 1 287 | 288 | 289 | 290 | 291 | res\drawable-hdpi 292 | 1 293 | 294 | 295 | res\drawable-hdpi 296 | 1 297 | 298 | 299 | 300 | 301 | res\drawable-xhdpi 302 | 1 303 | 304 | 305 | res\drawable-xhdpi 306 | 1 307 | 308 | 309 | 310 | 311 | res\drawable-mdpi 312 | 1 313 | 314 | 315 | res\drawable-mdpi 316 | 1 317 | 318 | 319 | 320 | 321 | res\drawable-hdpi 322 | 1 323 | 324 | 325 | res\drawable-hdpi 326 | 1 327 | 328 | 329 | 330 | 331 | res\drawable-xhdpi 332 | 1 333 | 334 | 335 | res\drawable-xhdpi 336 | 1 337 | 338 | 339 | 340 | 341 | res\drawable-xxhdpi 342 | 1 343 | 344 | 345 | res\drawable-xxhdpi 346 | 1 347 | 348 | 349 | 350 | 351 | res\drawable-xxxhdpi 352 | 1 353 | 354 | 355 | res\drawable-xxxhdpi 356 | 1 357 | 358 | 359 | 360 | 361 | res\drawable-small 362 | 1 363 | 364 | 365 | res\drawable-small 366 | 1 367 | 368 | 369 | 370 | 371 | res\drawable-normal 372 | 1 373 | 374 | 375 | res\drawable-normal 376 | 1 377 | 378 | 379 | 380 | 381 | res\drawable-large 382 | 1 383 | 384 | 385 | res\drawable-large 386 | 1 387 | 388 | 389 | 390 | 391 | res\drawable-xlarge 392 | 1 393 | 394 | 395 | res\drawable-xlarge 396 | 1 397 | 398 | 399 | 400 | 401 | res\values 402 | 1 403 | 404 | 405 | res\values 406 | 1 407 | 408 | 409 | 410 | 411 | 1 412 | 413 | 414 | Contents\MacOS 415 | 1 416 | 417 | 418 | 0 419 | 420 | 421 | 422 | 423 | Contents\MacOS 424 | 1 425 | .framework 426 | 427 | 428 | Contents\MacOS 429 | 1 430 | .framework 431 | 432 | 433 | 0 434 | 435 | 436 | 437 | 438 | 1 439 | .dylib 440 | 441 | 442 | 1 443 | .dylib 444 | 445 | 446 | 1 447 | .dylib 448 | 449 | 450 | Contents\MacOS 451 | 1 452 | .dylib 453 | 454 | 455 | Contents\MacOS 456 | 1 457 | .dylib 458 | 459 | 460 | 0 461 | .dll;.bpl 462 | 463 | 464 | 465 | 466 | 1 467 | .dylib 468 | 469 | 470 | 1 471 | .dylib 472 | 473 | 474 | 1 475 | .dylib 476 | 477 | 478 | Contents\MacOS 479 | 1 480 | .dylib 481 | 482 | 483 | Contents\MacOS 484 | 1 485 | .dylib 486 | 487 | 488 | 0 489 | .bpl 490 | 491 | 492 | 493 | 494 | 0 495 | 496 | 497 | 0 498 | 499 | 500 | 0 501 | 502 | 503 | 0 504 | 505 | 506 | 0 507 | 508 | 509 | Contents\Resources\StartUp\ 510 | 0 511 | 512 | 513 | Contents\Resources\StartUp\ 514 | 0 515 | 516 | 517 | 0 518 | 519 | 520 | 521 | 522 | 1 523 | 524 | 525 | 1 526 | 527 | 528 | 1 529 | 530 | 531 | 532 | 533 | 1 534 | 535 | 536 | 1 537 | 538 | 539 | 1 540 | 541 | 542 | 543 | 544 | 1 545 | 546 | 547 | 1 548 | 549 | 550 | 1 551 | 552 | 553 | 554 | 555 | 1 556 | 557 | 558 | 1 559 | 560 | 561 | 1 562 | 563 | 564 | 565 | 566 | 1 567 | 568 | 569 | 1 570 | 571 | 572 | 1 573 | 574 | 575 | 576 | 577 | 1 578 | 579 | 580 | 1 581 | 582 | 583 | 1 584 | 585 | 586 | 587 | 588 | 1 589 | 590 | 591 | 1 592 | 593 | 594 | 1 595 | 596 | 597 | 598 | 599 | 1 600 | 601 | 602 | 1 603 | 604 | 605 | 1 606 | 607 | 608 | 609 | 610 | 1 611 | 612 | 613 | 1 614 | 615 | 616 | 1 617 | 618 | 619 | 620 | 621 | 1 622 | 623 | 624 | 1 625 | 626 | 627 | 1 628 | 629 | 630 | 631 | 632 | 1 633 | 634 | 635 | 1 636 | 637 | 638 | 1 639 | 640 | 641 | 642 | 643 | 1 644 | 645 | 646 | 1 647 | 648 | 649 | 1 650 | 651 | 652 | 653 | 654 | 1 655 | 656 | 657 | 1 658 | 659 | 660 | 1 661 | 662 | 663 | 664 | 665 | 1 666 | 667 | 668 | 1 669 | 670 | 671 | 1 672 | 673 | 674 | 675 | 676 | 1 677 | 678 | 679 | 1 680 | 681 | 682 | 1 683 | 684 | 685 | 686 | 687 | 1 688 | 689 | 690 | 1 691 | 692 | 693 | 1 694 | 695 | 696 | 697 | 698 | 1 699 | 700 | 701 | 1 702 | 703 | 704 | 1 705 | 706 | 707 | 708 | 709 | 1 710 | 711 | 712 | 1 713 | 714 | 715 | 1 716 | 717 | 718 | 719 | 720 | 1 721 | 722 | 723 | 1 724 | 725 | 726 | 1 727 | 728 | 729 | 730 | 731 | 1 732 | 733 | 734 | 1 735 | 736 | 737 | 1 738 | 739 | 740 | 741 | 742 | 1 743 | 744 | 745 | 1 746 | 747 | 748 | 1 749 | 750 | 751 | 752 | 753 | 1 754 | 755 | 756 | 1 757 | 758 | 759 | 1 760 | 761 | 762 | 763 | 764 | 1 765 | 766 | 767 | 1 768 | 769 | 770 | 1 771 | 772 | 773 | 774 | 775 | 1 776 | 777 | 778 | 1 779 | 780 | 781 | 1 782 | 783 | 784 | 785 | 786 | 1 787 | 788 | 789 | 1 790 | 791 | 792 | 1 793 | 794 | 795 | 796 | 797 | 1 798 | 799 | 800 | 1 801 | 802 | 803 | 1 804 | 805 | 806 | 807 | 808 | 1 809 | 810 | 811 | 1 812 | 813 | 814 | 1 815 | 816 | 817 | 818 | 819 | 1 820 | 821 | 822 | 1 823 | 824 | 825 | 1 826 | 827 | 828 | 829 | 830 | 1 831 | 832 | 833 | 1 834 | 835 | 836 | 837 | 838 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 839 | 1 840 | 841 | 842 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 843 | 1 844 | 845 | 846 | 847 | 848 | 1 849 | 850 | 851 | 1 852 | 853 | 854 | 855 | 856 | ..\ 857 | 1 858 | 859 | 860 | ..\ 861 | 1 862 | 863 | 864 | 865 | 866 | 1 867 | 868 | 869 | 1 870 | 871 | 872 | 1 873 | 874 | 875 | 876 | 877 | 1 878 | 879 | 880 | 1 881 | 882 | 883 | 1 884 | 885 | 886 | 887 | 888 | ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 889 | 1 890 | 891 | 892 | 893 | 894 | ..\ 895 | 1 896 | 897 | 898 | ..\ 899 | 1 900 | 901 | 902 | 903 | 904 | Contents 905 | 1 906 | 907 | 908 | Contents 909 | 1 910 | 911 | 912 | 913 | 914 | Contents\Resources 915 | 1 916 | 917 | 918 | Contents\Resources 919 | 1 920 | 921 | 922 | 923 | 924 | library\lib\armeabi-v7a 925 | 1 926 | 927 | 928 | library\lib\arm64-v8a 929 | 1 930 | 931 | 932 | 1 933 | 934 | 935 | 1 936 | 937 | 938 | 1 939 | 940 | 941 | 1 942 | 943 | 944 | Contents\MacOS 945 | 1 946 | 947 | 948 | Contents\MacOS 949 | 1 950 | 951 | 952 | 0 953 | 954 | 955 | 956 | 957 | library\lib\armeabi-v7a 958 | 1 959 | 960 | 961 | 962 | 963 | 1 964 | 965 | 966 | 1 967 | 968 | 969 | 970 | 971 | Assets 972 | 1 973 | 974 | 975 | Assets 976 | 1 977 | 978 | 979 | 980 | 981 | Assets 982 | 1 983 | 984 | 985 | Assets 986 | 1 987 | 988 | 989 | 990 | 991 | 992 | 993 | 994 | 995 | 996 | 997 | 998 | 999 | 1000 | 1001 | True 1002 | 1003 | 1004 | 12 1005 | 1006 | 1007 | 1008 | 1009 |
1010 | --------------------------------------------------------------------------------