いつも大変お世話になっています。
マルチデバイスを開発(Android)をしています。
複数行のデータ(カラム数3)をLsitViewに表示させたいのですが
Windowsアプリでは以下のようなコードで表示できていたのですが
マルチデバイスではできませんでした。
色々と試しているのですが、出来ません。
アドバイスいただけませんでしょうか。
よろしくお願いいたします。
Windowsアプリコード
*************************
with DataSource1.DataSet do
begin
if RecordCount > 0 then
begin
ListView1.Clear;
First;
while (not Eof) do
begin
item := ListView1.Items.Add;
item.Caption := Fields[0].AsString;
item.SubItems.Add(Fields[3].AsString);
item.SubItems.Add(Fields[11].AsString);
Next;
end;
end
else
begin
ShowMessage('当該データは存在しません!');
Exit;
end;
end;
Delphi Berlin Enterprise
Windows 10 PRO 64bit
同じ名前のビジュアルコンポーネントでも、VCLとFMXでは互換性がないケースが多いような・・
igyさんお返事ありがとうございます。
3日間、色々やってみたのですが、
FireMonkeyのListViewはカラム数を2つ以上にできませんでした。
その他のコンポーネントでできるかなと調べていたところ
StringGridで複数のカラムをセットできました。
しかし、選択行の取得ができず、
VCLではOnClikイベントでStringGrid.Rowから選択行が取得できるのですが
FireMonkeyではOnClikイベントがなく
OnSelectCellイベントでStringGrid.Rowで確認したのですが
なんか変な値になっており使えませんでした。
選択行の情報を得る方法がなく
とん挫してしまいました。
FireMonkeyは難しいです。
何かいい方法はないでしょうか。
> OnSelectCellイベントでStringGrid.Rowで確認したのですが
> なんか変な値になっており使えませんでした。
別の方の質問の
TEditでTABキーを押してもフォーカスが移動しません
https://www.petitmonte.com/bbs/answers?question_id=29796
で、HFUKUSHIさんが、
> 上にも書きましたけど、FMXで最新版を使わない理由はない(VCLなら古いバージョンもありですが)ので、
> 可能であれば最新版(10.3.3とか10.4.1)に移行してしまうのがよいと思います。
と書かれていますし、
(別のPCとかお持ちであれば)試しにCommunity Editionで動作を確認してみるとかは、いかがですか?
igyさん、いつもありがとうございます。
残念ですが。断念しました。
VCLで出来てFMXではできないことが沢山あり
戸惑っています。
また、しばらく悩む日々が続きそうです。
今後ともよろしくお願いいたします。
たとえばデータベースの各フィールドの内容をfmxのlistview上にdbgridの様に表示したいのでしょうか?
はくちゃんさん、お返事ありがとうございます。
おっしゃる通りFMXでListViewのカラムに
指定のフィールドを配置して、
ユーザーがクリックした
レコードにあるフィールド情報を取得したいのですが。
以下を先にお試しいただけますか?(こちらはdelphi 10.3.3 community edition 環境です!他のバージョンでの動作は確認していません!!)
1.新規作成->マルチディバイスアプリ->空のアプリケーション
2.Android32ビット, ビューはターゲットスマートフォンのサイズ にセット
3.パレットからTLISTVIEWを選択貼り付け。 Align は "Client"を選択
4.[構造]ビューから、listview1->Itemappearance->item へと展開
5."Item" を右クリック ”デザインモードの切り替え" を選択
6.オブジェクトインスペクターのappearanceをListItemからDynamicAppearanceへ変更
7.item下位のText1をクリック、上位itemを再度クリック
8.オブジェクトインスペクターの ”新規追加 > "をクリックして ”TTextbjectAppearance”を選択。 ビューに項目が追加されるはずですので
いくつか追加してみてください。各itemのサイズや位置はマウスでレイアウト変更可能です。
以上ですが、
すでにご確認済みでしたら無視してください。
はくちゃんさん、アドバイスありがとうございます。
書き込みしてくださっていたのを
気づきませんでした。
「項目Text」の追加は出来たのですが
追加した項目に任意のテキストを
表示するコードがわかりませんでした。
今までは
ListView1.Item.Add.Text := '項目1' ;
というように表示したい文字をコーディングして
いたのですが、これでは駄目なのでしょうか。
私はInterbaseのレコードをListviewで定義した各項目(Item)に表示させています。
例えば以下の通りです。(ポイント部分のみ書いてます)
---------------------------------------------
Var
LItem: TListViewItem;
Begin
LItem := ListView1.Items.Add;
LItem.Data['Text1']:=FDTable1.Fields[1].AsString;
--------------------------------------------------------------
尚、Listviewの各項目内容を変数に保存するには
Temp := LItem.Data['Text1'].AsString;
で可能です。
お試しください。
はくちゃんさんアドバイスありがとうございます。
お陰様でListViewに各項目を表示することができました。
ただ、表示した項目の任意のレコードをタップした時の
Text1、Text2、Text3を取り出すことが出来ずに悩んでいます。
VCLのListViewでは
****************************
with ListView1 do
begin
if Selected <> nil then
begin
Edit1.Text := Selected.Caption;
Edit2.Text := Selected.SubItems[0]);
Edit3.Text := Selected.SubItems[1]);
end;
end;
******************************************
という感じでクリックしたListViewのレコードの情報を取得していました。
何でもお聞きして申し訳ありませんが
ご存知でしたら教えて頂ければ助かります。
よろしくお願いいたします。
TlistviewイベントのListView1ItemClickで
取得できます。
Listviewの行をタップすることで動作します。
procedure TForm1.ListView1ItemClick(const Sender: TObject
const AItem: TListViewItem);
begin
Edit1.text:= AItem.Data['Text1'].AsString;
Edit2.text:=AItem.Data['Text2'].AsString;
Edit3.text:=AItem.Data['Text3'].AsString;
End;
お試しください。
タップしてデーターの取り出しできましたでしょうか?
はくちゃんさん、ご連絡遅れまして申し訳ありません。
ご指摘通りListViewのデータを取得できました。
本当にありがとうございます。
FMXが理解できなく、色々なところで戸惑い
行き詰り、ご迷惑おかけしてすみません。
今後ともよろしくお願いいたします。
ツイート | ![]() |