Delphiでのクロスプラットフォヌムモバむルアプリケヌション開発2

Delphi for Android



パヌト1



シリヌズの前のパヌトでは、新しいRAD Studio XE5の䞻な機胜を確認したした。 今日は、緎習に移りたしょう。 たず、タスクを決定したしょう。



問題の声明




アカデミックなタスクがいく぀かありたすが、䟋ずしおクックブックを遞択したした。 たた、開発したアプリケヌションに独創性を持たせるために、いく぀かの远加機胜を䜿甚しお、このようなプログラムの通垞の機胜を拡匵しようずしたす。



必芁な補品の量の再蚈算。


通垞、レシピは䜿甚される補品の正確な量を瀺したす。 しかし、サヌビングの数を倉曎したい堎合は、それに応じお、補品の数を再カりントする必芁がありたす。 料理を準備する過皋で、これは必ずしも䟿利ではありたせん。



タむマヌ


料理に慣れおいない堎合は、特定の操䜜の時間を明確に瀺すレシピを䜿甚する必芁がありたす。 たた、タブレット、電話、たたはネットブックのタむマヌは、キッチンタむマヌの䟿利な代替品になりたす。

倚くの堎合、耇数の操䜜が䞊行しお実行されたす。 各操䜜には独自の「タむマヌ」を蚭定できたす。

同時に、アプリケヌションの「デスクトップ」ずモバむル実装の䞡方に関心がありたす。 モバむルアプリケヌションは、レシピを芖芚化し、準備プロセスに付随するツヌルずしお䜿甚されたす。 デスクトップバヌゞョンは、新しいレシピの䜜成など、より高床な機胜で䜿甚できたす。




原則ずしお、プログラミングの本のような料理の本は、読者の準備のさたざたなレベルに合わせお蚭蚈できるこずに泚意しおください。 私たちの堎合、「ダミヌのレシピ」、぀たり補品の正確な数ず特定のアクションの正確な時間を瀺すものに぀いお話しおいたす。



このアプリケヌションをWindowsおよびAndroid向けに実装しおいたす。 次に、単䞀の゜ヌスコヌドベヌスに基づいお、アプリケヌションをMacOSおよびiOSに移怍できたす。



開発ツヌルの遞択




開発に盎接進む前に、ツヌルを決定したしょう。 もちろん、アプリケヌションで䜿甚されるデヌタは、最も適切にはデヌタベヌスに保存されたす。



実隓の玔床のために、 SQLiteをDBMSずしお䜿甚したす。 このDBMSには、速床、䜿いやすさ、リ゜ヌスに関する費甚察効果など、倚くの利点がありたす。 単玔なタスクに最適であり、さらにAndroidにはSQLiteサポヌトが組み蟌たれおいたす。



将来的には、 InterBase DBMSを䜿甚しおアプリケヌションを移行する方法を怜蚎し、Embarcaderoの「ネむティブ」゜リュヌションのすべおの利点を瀺したす。



アプリケヌションずずもに、個別に䜜成された既補のDBMSを配垃したす。 このアプロヌチは、タスクの詳现によるものです。



もちろん、 Delphi XE5が必芁です 。 Windowsアプリケヌションを䜜成するには、原則ずしお、 Professional゚ディションに制限するこずができたす。 しかし、いわゆる モバむル開発では、少なくずもEnterprise゚ディションの補品が必芁です。 たたは、 Delphi XE5 Professionalのモバむルアドオンパックを䜿甚したす。



WindowsでSQLiteを䜿甚するには、公匏Webサむトからsqlite-dll-win32-x86-3080100.zipラむブラリをダりンロヌドする必芁がありたす。 このラむブラリをシステムフォルダの1぀たずえば、Windows / SYSTEM32に配眮する最も簡単な方法。

珟圚、非垞に倚くの無料のSQLiteデヌタベヌス管理ツヌルがありたす。 そのうちの1぀を䜿甚するこずもできたす。



FireDACラむブラリを䜿甚しお、アプリケヌションからデヌタベヌスにアクセスしたす。



FireDACは、さたざたなデヌタベヌスに接続するアプリケヌションを開発するために蚭蚈されたナニバヌサルデヌタアクセスラむブラリです。 FireDACを䜿甚するず、VCLずFireMonkeyアプリケヌションの䞡方を開発できたす。 このラむブラリは、 InterBase 、 SQLite 、 MySQL 、 SQL Server 、 Oracle 、 PostgreSQL 、 DB2 、 SQL Anywhere 、 Advantage DB 、 Firebird 、 Access 、 Informixの DBMSをサポヌトしおいたす。 ただし、この段階では、 FireDACを䜿甚する「盎接」DataSnapテクノロゞヌを䜿甚しないモバむルアプリケヌションでは、 SQLiteずInterBaseにのみ接続できたす。



デヌタベヌス䜜成




デヌタベヌス構造を䜜成しお、開発プロセスを開始したす。 その論理モデルを図に瀺したす。

Embarcadero ER / Studioを䜿甚しお䜜成したした論理デヌタベヌスモデル



このチャヌトは、Embarcadero Technologies- ER / Studioの別のツヌルを䜿甚しお取埗されたした。 この補品のDeveloper Editionは、 RAD Studio Architectのナヌザヌが利甚できたす。 この出版物の枠組みでは、 ER / Studioの説明に぀いおは觊れたせん。 この匷力なツヌルは、別個の玠材を䜿甚する䟡倀がありたす。




デヌタベヌス構造を䜜成するずき、論理モデルの各゚ンティティには物理テヌブルがありたす。 結果のテヌブルの目的を簡単に怜蚎しおください。



tblFoodstuffテヌブルでは、可胜なすべおの補品のリストを保持したす。 tblUnitテヌブルで、枬定単䜍グラム、スプヌン、グラスなどのリスト。 tblRecipeテヌブルには、レシピのリストが含たれおいたす。 テヌブルtblIngredientesおよびtblActionには、それぞれ成分 qtyフィヌルドの数量を瀺すずアクション時間ず説明を瀺すのリストが含たれおいたす。



SQLiteデヌタベヌスを䜜成するには、次のスクリプトを䜿甚するだけです。



CREATE TABLE [tblAction] ( [Id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, [IdRc] INTEGER NOT NULL, [Sec] INTEGER NULL, [DescriptionShort] VARCHAR(128) NOT NULL, [DescriptionExtendent] TEXT NOT NULL ); CREATE TABLE [tblFoodstuff] ( [Id] INTEGER PRIMARY KEY AUTOINCREMENT NULL, [Abbr] VARCHAR(10) NULL, [Title] VARCHAR(50) NULL ); CREATE TABLE [tblIngredientes] ( [Id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, [IdCB] INTEGER NOT NULL, [IdFS] INTEGER NOT NULL, [IdUnit] INTEGER NOT NULL, [qty] INTEGER NULL ); CREATE TABLE [tblRecipe] ( [Id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, [Title] VARCHAR(150) NOT NULL ); CREATE TABLE [tblUnit] ( [Id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, [UnitName] VARCHAR(25) NOT NULL, [Abbr] VARCHAR(7) NOT NULL ); CREATE INDEX [IDX_TBLACTION_Recipe] ON [tblAction]( [IdRc] ASC ); CREATE INDEX [IDX_TBLINGREDIENTES_] ON [tblIngredientes]( [IdCB] ASC ); CREATE INDEX [idxFoodStuff] ON [tblIngredientes]( [IdFS] ASC ); CREATE INDEX [idxRecipe] ON [tblIngredientes]( [IdCB] ASC ); CREATE INDEX [idxUnit] ON [tblIngredientes]( [IdUnit] ASC );
      
      







Windowsアプリケヌションの䜜成




アプリケヌション開発プロセスを次のように線成したす。 たず、Windows甚のアプリケヌションの基本バヌゞョンを䜜成し、それをAndroidプラットフォヌムに移怍したす。 次に、䞡方のアプリケヌションの機胜を䞊行しお拡匵したす。 MacOSおよびiOSバヌゞョンのアプリケヌションが最終段階になりたす。 既補のWindowsおよびAndroidバヌゞョンができたら、䜜成を開始したす。



Delphi IDEは、いく぀かの新しいアプリケヌションテンプレヌトを提䟛したす。 この堎合、 FireMonkey Desktop Applicationに関心がありたす 。



Delphiで新しいFMアプリケヌションを䜜成する



適切なメニュヌ項目を遞択するず、远加のダむアログが画面に衚瀺され、新しいFireMonkeyアプリケヌションの皮類HDHigh Definitionたたは3Dを遞択するように求められたす。



画像



アプリケヌションのメむンフォヌムの名前を倉曎しオブゞェクトむンスペクタヌでNameプロパティを倉曎したす、新しく䜜成したプロゞェクトを保存したす。 プロゞェクトに新しいデヌタモゞュヌルを远加しDelphiファむルブランチの[ファむル] | [その他]メニュヌ、名前を倉曎しお保存したす。



Delphiで新しデデタモゞュヌルを䜜成する



したがっお、新しいプロゞェクトを䜜成し、開発のために盎接準備したした。



FireDAC接続を構成する


habrahabr.ru/topic/edit/200490/#

最初に行う必芁があるのは、デヌタベヌス接続のセットアップです。 FireMonkeyでは、この手順はVCLず倧きな違いはありたせん。

コンポヌネントTFDConnection 、 TFDGUIxWaitCursorおよびTFDPhysSQLiteDriverLinkをDataModuleに配眮したす。 オブゞェクトむンスペクタヌで、TFDConnectionコンポヌネントのLoginPromptプロパティの倀を倉曎したす。



LoginPrompt = False



フォヌム䞊のコンポヌネントをダブルクリックするず、接続蚭定ダむアログが衚瀺されたす。



Firedac。



この堎合、ドラむバヌIDずしおSQLiteを指定し、Databaseパラメヌタヌの倀ずしおデヌタベヌスファむルぞのパスも指定したす。 [テスト]ボタンを䜿甚しお蚭定を確認できたす。



実行時にデヌタベヌスに接続する機胜をすぐに䜜成したす。



 function TDM.ConnectToDB: Boolean; begin try FDConnection1.Connected := True; except end; Result:= FDConnection1.Connected; end;
      
      







この関数をメむンモゞュヌルから呌び出すために、パブリックセクションにそのタむトルを配眮したす。



䞻な申請曞




アプリケヌションのメむンフォヌムで、コンポヌネントTGroupBox 、 TTabControl 、およびTSplitterを順番に配眮したす。 それらのそれぞれにAlignプロパティを蚭定したすそれぞれ、alLeft、alLeft、およびalClient。 巊パネルにTListBoxずTBindNavigatorの2぀のコンポヌネントを配眮したす。 図に瀺すように配眮したす。 ダブルクリックしおTTabControlコンポヌネントのポむントデザむナヌを呌び出し、2぀のポむントを䜜成したす。

䞻な申請曞

レシピのリストがアプリケヌションの巊偎に衚瀺されたす。 右偎のタブには、料理の材料のリスト量を瀺すず、盎接、レシピの特定のアクションのリストからなるリストがありたす。



デヌタ接続




既に述べたように、FireMonkeyには特別なデヌタ衚瀺コンポヌネントはありたせん。 代わりに、 LiveBindingバむンディングメカニズムが䜿甚されたす。 仕組みを芋おみたしょう。 レシピのリストをメむンフォヌムのTListBoxコンポヌネントに接続したす。 たず、レシピのリストを操䜜するためのデヌタセットを䜜成する必芁がありたす。 デヌタモゞュヌルでは、 TFDTableコンポヌネントを䜿甚したす。 プロパティを次のように蚭定したす。

デヌタセットのセットアップ



ConnectToDB関数のコヌドで、デヌタセットを開くメ゜ッドぞの呌び出しを远加したす。



 FDTRecipe.Open;
      
      







ランタむムモヌドでデヌタベヌスぞの接続を確立するには、ConnectToDB関数ぞの呌び出しを远加する必芁がありたす。 デヌタモゞュヌルのOnCreateむベントにバむンドできたす。



 procedure TDM.DataModuleCreate(Sender: TObject); begin DM.ConnectToDB; end;
      
      







アプリケヌション開発の初期段階では、接続䞭に発生する可胜性のある䟋倖を凊理したせんが、これは将来行う必芁がありたす。



TRecipeテヌブルからのデヌタの出力をメむンフォヌムのリストに敎理したす。 これを行うには、たず、プログラムのメむンフォヌムのモゞュヌルのUsesセクションにデヌタモゞュヌルを远加したす。

 interface uses uDM, System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      
      







フォヌム゚ディタヌで、コンテキストメニュヌを呌び出し、[芖芚的にバむンド]アむテムを遞択したす。 画面の䞋郚で、 LiveBindingデザむナが開きたす。 その䞭に、ダむアグラム芁玠の圢匏で、オブゞェクトずその基本プロパティが衚瀺されたす。 ドラッグアンドドロップするだけで、図に瀺すように3぀のオブゞェクトのプロパティを接続したす。



ビゞュヌルバルデング



実際には、これがレシピテヌブル぀たり、レシピ名のリストからのデヌタを衚瀺するために必芁なすべおです。 ここでプログラムを実行するず、リストが衚瀺されたすが、空であるため、レシピを远加する方法に泚意する必芁がありたす。



新しいFireMonkey HDフォヌムを䜜成したす。 プロパティを次のように蚭定したす。



Name = fAddRecipe

BorderStyle = bsToolWindow

Position = poMainFormCenter









デヌタモゞュヌルを接続し、TEditコンポヌネントず2぀のボタンをフォヌムに配眮したす。 LiveBindingデザむナで、TEditコンポヌネントのTextプロパティをデヌタセットのTitleフィヌルドに関連付けたす。



レシピ線集フォヌム



新しいフォヌラムを保存し、自動䜜成されたフォヌムのリストから削陀したす[プロゞェクト] | [オプション]メニュヌの[フォヌム]タブ。



アプリケヌションのメむンフォヌムの堎合、メ゜ッドを䜜成したす。

 procedure TfMain.RecipeAfterInsert(DataSet: TDataSet); var fAddRecipe: TfAddRecipe; begin try fAddRecipe:= TfAddRecipe.Create(Application); fAddRecipe.ShowModal; if fAddRecipe.ModalResult = mrOk then begin if DataSet.State in [dsInsert, dsEdit] then DataSet.Post; end else begin if DataSet.State in [dsInsert, dsEdit] then DataSet.Cancel; end; finally FreeAndNil(fAddRecipe); end; end;
      
      







プログラムが起動したら、レシピデヌタセットのAfterInsertむベントを定矩したす。



 procedure TfMain.FormShow(Sender: TObject); begin DM.FDTRecipe.AfterInsert:= RecipeAfterInsert; end;
      
      







ここで、アプリケヌションを起動するこずにより、ナビゲヌタヌを䜿甚しお倉曎できるレシピのリストを取埗したす。 新しいレシピを远加するず、入力フィヌルドのあるフォヌムが画面に衚瀺されたす。



シリヌズのこのパヌトでは、Windows甚の最も単玔なFireMonkeyアプリケヌションを䜜成したした。 FireDACパッケヌゞを䜿甚しおデヌタベヌスに接続する方法を孊び、 LiveBindingを䜿甚する最も簡単な䟋を芋おみたした 。



次の、おそらく最も興味深い、サむクルの䞀郚では、 最初のAndroidアプリケヌションを䜜成したす 。



私たちず䞀緒に...



パヌト3



All Articles