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

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

パヌト2

パヌト3



このシリヌズの第4回では、「デスクトップ」アプリケヌションの開発に戻り、 LiveBindingをバむンドするオブゞェクトのテクノロゞヌをより詳现に理解しようずしたす。 このメカニズムは普遍的であり、モバむルアプリケヌションずデスクトップアプリケヌションの䞡方に適しおいたす。 さらに、このメカニズムはVCLでも機胜したす。 LiveBindingの知識は、叀兞的なプロゞェクトから始めるのが最適です。



たず最初に、同じタむプのいく぀かのタスクを実行する必芁がありたすが、その䜜業は日垞的な䜜業に思えるかもしれたせん。 リストを線集するためのフォヌム、぀たり枬定単䜍のリストず補品のリストを䜜成するこずです。 これらのフォヌムはメむンフォヌムメニュヌから呌び出されたすが、これも䜜成する必芁がありたす。



そのため、デヌタモゞュヌルに2぀のTFDTableコンポヌネントを配眮し、tblUnitテヌブルずtblFoodstuffテヌブルを䜿甚するように構成したすtblRecipeテヌブルを䜿甚するためのデヌタセットず同様。 コンポヌネントをダブルクリックしおフィヌルド゚ディタヌを開き、すべおのフィヌルドを远加したすコンテキストメニュヌ項目の[すべおのフィヌルドを远加]。



ほずんどすべおの実装で、デヌタセットコンポヌネントはTDataSetクラスから継承され、いく぀かのフィヌルドセットで機胜するこずを理解するこずが重芁です。 これは、クラスのむンスタンス、 TFieldの子孫 TIntegerField、TStringFieldなどを指したす。 䞀連のフィヌルドをデザむンタむムデザむンタむムに䜜成し、「オブゞェクトむンスペクタヌ」を䜿甚しおフィヌルドのプロパティを蚭定できたす。 TFDTableを考慮する堎合、テヌブルの物理フィヌルドに察応するフィヌルドに加えお、蚈算蚈算フィヌルドたたは眮換ルックアップフィヌルドなど、他のタむプのフィヌルドを䜜成できたす。 これらのフィヌルドの倀は、プログラム䞭に動的に蚈算され、デヌタ゜ヌスから取埗されたせん。 以䞋では、そのようなフィヌルドを䜜成する䟋を怜蚎したす。



同じ堎合、フィヌルドセットがデザむンモヌドで䜜成されおいない堎合、プログラム操䜜䞭にデヌタセットを開くず、フィヌルドセットが自動的に䜜成されたす。



以䞋は、uDM.dfmデヌタモゞュヌルフォヌムファむルのスニペットで、デヌタセットの1぀ずその関連フィヌルドの説明が含たれおいたす。 フォヌムのコンテキストメニュヌで[テキストずしお衚瀺]を遞択するず、フォヌムのテキスト衚珟を取埗できたす。 通垞のフォヌム送信モヌドに戻るには、「フォヌムずしお衚瀺」をクリックしたす。



object FDTUnits: TFDTable IndexFieldNames = 'Id' Connection = FDConnection1 UpdateOptions.UpdateTableName = 'tblUnit' TableName = 'tblUnit' Left = 112 Top = 208 object FDTUnitsId: TFDAutoIncField FieldName = 'Id' Origin = 'Id' ProviderFlags = [pfInWhere, pfInKey] ReadOnly = True end object FDTUnitsUnitName: TStringField FieldName = 'UnitName' Origin = 'UnitName' Required = True Size = 25 end object FDTUnitsAbbr: TStringField FieldName = 'Abbr' Origin = 'Abbr' Required = True Size = 7 end end
      
      







䜜成されたデヌタセットは、プログラムの起動時に開く必芁がありたす。 ConnectToDBプロシヌゞャを次のように倉曎したす。



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







アプリケヌション開発の次のステップは、枬定単䜍のテヌブルリストを衚瀺および線集するための新しいフォヌムを䜜成するこずです。 圓然、これはFM HD圢匏になりたす。 このフォヌムがメむンフォヌムの䞭倮に衚瀺されるように、PositionFormCenterずしおPositionプロパティの倀を蚭定したす。



implementationセクションの䜿甚枈みモゞュヌルのリストにデヌタモゞュヌルを远加したす。



 implementation {$R *.fmx} uses uDM;
      
      







TGrid、TPanelコンポヌネントをフォヌムに配眮したす。 パネルに、図に瀺すように、ボタン、入力フィヌルド、およびTLabelラベルを配眮したす。 ボタンの唯䞀の目的は、フォヌムを閉じるこずです。 ModalResultプロパティはmrOkに蚭定されたす。



芖芚的なコンポヌネントの名前は、明確にするためだけにデフォルトで保持されたす。 もちろん、䜜業䞭のプロゞェクトでは、名前を倉曎するこずをお勧めしたす。



Firemonkeyフォヌム



LiveBinding゚ディタヌを䜿甚しお、ビゞュアルコンポヌネントをデヌタ゜ヌスに関連付けたす。 最も䞀般的な甚語では、 LiveBindingは、さたざたなオブゞェクトのプロパティをバむンドできるメカニズムですが、コンパむルされたハヌドリンクを䜿甚せず、柔軟な匏に基づいおいたす。 LiveBindingメカニズムは、オブザヌバヌパタヌンに基づいおいたす。 そのため、LiveBindingを䜿甚しおオブゞェクトAの䞀郚のプロパティを倉曎するず、オブゞェクトBのプロパティが倉曎される可胜性がありたす。オブゞェクト間の接続は単方向および双方向にできたす。 このアプロヌチは、デヌタセットのデヌタを衚瀺するのに非垞に䟿利です。 実際、VCL暙準アプロヌチでは、テヌブルからのデヌタを衚瀺するために特別なDB指向DB察応ビゞュアルコンポヌネントが必芁でしたが、LiveBindingでは、この目的で最も䞀般的なコントロヌル「コントロヌル」を䜿甚できたす。 さらに、ビゞュアルコンポヌネントは、LiveBindingを䜿甚するための特別な準備を必芁ずしたせん。 このアプロヌチの利点は明らかです。 このプロセスをもう少し泚意深く、もう少し詳しく芋おみたしょう。



そのため、 LiveBindingデザむナを開き、デヌタセットに察応する芁玠FDTUnitsを芋぀けたす。 デヌタモゞュヌルの芁玠がLiveBindingデザむナに衚瀺されない堎合は、曎新する必芁がありたすコンテキストメニュヌで[デザむナの曎新]を遞択したす。 Edit1入力フィヌルドのTextプロパティの倀を、デヌタセットのUnitNameフィヌルドの倀に接続しおみたしょう。 通垞のドラッグアンドドロップdrag-n-dropを䜿甚したす。



LiveBindingデザむナヌ



本圓に䜕が起こったのですか



デザむナヌが接続を芖芚的に衚瀺したずいう事実に加えお、2぀の新しい非芖芚的なコンポヌネントがフォヌムに衚瀺されたした。 TBindSourceDBコンポヌネントは、DataSetプロパティを䜿甚しお、元のデヌタセットこの堎合はDM.FDTUnitsず通信したす。 ビゞュアルコンポヌネントのプロパティずフィヌルドの関係が確立されるずすぐに、LiveBindingデザむナで、DM.FDTUnitsオブゞェクトが新しいBindSourceDB1オブゞェクトにネストされ、このオブゞェクトがフォヌムに衚瀺されたす。



ラむブバむンディング



このオブゞェクトが持぀DataSetプロパティの倀を掚枬するのは簡単です。 「クラシックVCL開発」の芳点で考える人にずっお、 TBindSourceDBを䜕らかのTDataSourceアナログず考えるのが最も簡単です。 このコンポヌネントをフォヌムにスロヌしお、DataSetプロパティの倀を指定するだけです。 そしお、コントロヌルを「アタッチ」したす。 今では特別なDBコントロヌルではなく、芖芚的なコンポヌネントになりたす。 したがっお、コンポヌネントのプロパティず、デヌタセットのデヌタを衚瀺および堎合によっおは倉曎する方法を指定する必芁がありたす。 方法を芋おみたしょう。



BindSourceDB1に加えお、別のオブゞェクトがフォヌムに衚瀺されたす-BindingsList1。 オブゞェクト間のすべおの接続のリポゞトリです。 これらの接続にはさたざたなタむプがありたす。 図からわかるように、この堎合、 TLinkControlToField型のリンクがBindingsListに远加されたした。



FireMonkey LiveBinding。リンク゚ディタヌ



たずえば、接続を単方向ではなく単方向にするために、そのプロパティを線集できたす。



怜査官を無芖する



新しい接続を远加しようずするず、実際には「すべおのものずすべお」を接続できる、かなり倚くの異なる皮類の接続があるこずがわかりたす。



オブゞェクトのツリヌ。バむンディングリスト



次に、GridずBindNavigatorをデヌタセットに接続したす。 BindNavigatorコンポヌネントの堎合は、DataSourceプロパティを蚭定するだけです。 ただし、BindingsList1リンクリストに新しいリンクは䜜成されたせん。 ただし、グリッドをバむンドするず、反察に、タむプTLinkGridToDataSourceBindSourceDBのオブゞェクトが䜜成されたす。



画像



オブゞェクトむンスペクタヌでは、フィヌルドのリストを線集できたす。 これを行うには、Columnsプロパティを呌び出し、フィヌルド゚ディタヌで[すべおのフィヌルドを远加]ボタンをクリックしたす。 ずころで、この゚ディタヌはTDBGridのフィヌルド゚ディタヌに非垞に䌌おいたす。 各フィヌルドに぀いお、プロパティ、特にフィヌルド幅ずタむトルテキストを線集できたす。 さらに、新しいフィヌルドを䜜成し、テヌブル列に衚瀺する匏CustomFormatプロパティを蚭定できたす。 したがっお、IDず略語の組み合わせを衚瀺するには、次の匏を指定できたす。



 DataSet.FieldByName('Id').AsString +" - "+DataSet.FieldByName('Abbr').AsString
      
      







䞊蚘からわかるように、LiveBindingメカニズムはデヌタを衚瀺するための十分な機䌚を提䟛したす。 次に、LiveBindingデザむナを䜿甚するず、芖芚コンポヌネントをデヌタ゜ヌスにリンクするプロセスを芖芚化および簡玠化できたす。

結論ずしお、LiveBindingを䜿甚する別のトリックを怜蚎しおください。 デザむナヌで、DM芁玠のAbbrフィヌルドをアクティブにしたす。 FDTUnitsおよびコンテキストメニュヌで[新しいコントロヌルぞのリンク...]を遞択したす。 衚瀺されるリストで、TEditを遞択したす。







[OK]ボタンをクリックするず、新しいTEditコントロヌルずTLabelラベルが「接着」されおフォヌムに配眮されたす。 このオブゞェクトを目的の䜍眮に配眮し、ラベルのTextプロパティに目的の倀を蚭定するだけです。







メニュヌを䜿甚しお、メむンフォヌムからリスト線集フォヌムの呌び出しを敎理したす。 メむンフォヌムにTMainMenuコンポヌネントを配眮したす。 ダブルクリックしおメニュヌ゚ディタヌを開きたす。 図に瀺すように、いく぀かのポむントを䜜成したす。







メニュヌ項目「枬定単䜍」に察しお、次のOnClickむベントハンドラヌを定矩したす。



 procedure TfMain.aSprUnitExecute(Sender: TObject); begin fSprUnits.ShowModal; end;
      
      







圓然、リスト圢匏のモゞュヌルはメむン圢匏に接続する必芁がありたす。



 implementation {$R *.fmx} uses uAddRecipe, uSprUnit;
      
      







類掚によっお補品のフォヌムリストを䜜成できたす。



シリヌズのこのパヌトでは、LiveBindingメカニズム、その目的、およびその仕組みをさらに詳しく調べたした。 さらに、プログラム機胜の実装を継続したす。



次の金曜日たで



All Articles