0

TListBox に TSearchBox を追加した Delphi XE8 に firemonkey マルチデバイス プロジェクトがあります。Android でのみ、SearchBox は TListBoxItems の前に配置されます。Windows と iOS では、すべてのリスボックス項目の上に検索ボックスが表示され、下にスクロールしても常に一番上に表示されます。

Android 5.1.1 を搭載した Nexus 7 を使用しています

下の画像では、一番上のリストボックス項目の前に検索ボックスが表示されています。 fmx に追加された検索ボックス

Androidでこれを取得するにはどうすればよいですか?

アップデート

TListBox の上にツールバーを作成し、実行時に searchBox を追加しました。このように、検索ボックスは常にアイテムの上にありますが、リストボックスで検索できません。ListBoxItems のテキストをチェックするように設定するにはどうすればよいですか?

更新 2

新しいテスト プロジェクトを作成しましたが、そのプロジェクトでは正しく動作しているようです。今、私が使用しているカスタムスタイルで少しテストしましたが、それが問題のようです. 唯一の問題は、Stylebook を使用してプロジェクトのすべてのスタイルを設定していて、ListBox とその項目をこれから除外する方法がわからないことです。

更新 3

StyleBook で使用している .style ファイルから listbox および listboxitem スタイルを削除しました。これで問題は解決しました。私が今持っている唯一の問題は、TListBoxItem テキストが表示されることです。下の図に示すように、ラベルを付けてカスタムリストボックスアイテムを作成して、必要な方法で整列させます。しかし、アイテムを検索できるようにするには、アイテムのテキストを設定する必要があります。そのため、アイテムに設定したラベルの上にテキストが表示されます。

listboxitem テキストを非表示に設定する方法はありますか? すでに色を背景と同じ色に変更しようとしましたが、これは機能せず、フォント サイズを 0 に設定しても機能しません。

4

3 に答える 3

1

再現できません。Windows と Android (5.0.2) ではすべて同じように見えます。Delphi XE7 Update 1 でコンパイルされています。

私のpasファイル:

procedure TForm1.FormCreate(Sender: TObject);
var
  X: TSearchBox;
  I: Integer;
begin
  x := TSearchBox.Create(ListBox1);
  x.Parent := ListBox1;

  for I := 1 to 100 do
    ListBox1.Items.Add('line xxxxxx  yyy');
end;

ここに画像の説明を入力

ここに画像の説明を入力

于 2015-06-18T12:16:36.703 に答える
1

listBoxItems を検索するための独自の検索メソッドを作成しました。

最初に、listBoxItems に、検索できるようにするテキストを含む tagString プロパティを指定しました。表示されないため、tagString を使用します。

次に、TListBox の上に検索ボックスを追加しました。次に、keyUp イベントを searchBox に追加します。これは、検索ボックスからの文字列テキストのみを必要とするカスタム検索メソッドを呼び出します。

以下のコードは、私のカスタム検索方法です。

procedure TfrmNocoreDKS.SearchList(text: String);
var
  listItem: TListBoxItem;
  i: Integer;
begin
  CreateList;//Creates all the items in the TListBox
  if not text.isempty then
  begin
    with myListBox do
    begin
      for i := -1 + myListBox.Count downto 0 do
      begin
        listItem := myListBox.ListItems[i];
        if not listItem.TagString.Contains(text) then
        begin
          Items.Delete(i);
        end;
      end;
    end;
  end;
end;
于 2015-07-22T09:38:46.360 に答える