ChinaCock UIコンポーネント解説 - CCNavigateTitle

まずは実際のプロジェクトでの動作イメージを確認してください。ブランドのナビゲーションバーを通じて、各ブランド对应的商品リストが表示されます。

この機能は、ChinaCockコントロールパックのCCNavigateTitleコンポーネントのみで実装されています。ビジュアルコントロールなので、フォームにドラッグ&ドロップし、以下の設定を行うだけで使用可能です:

object CCNavigateTitle1: TCCNavigateTitle
  Align = Top
  Appearence.IndicatorFill.Color := claCadetblue
  Appearence.IndicatorStroke.Color := claCadetblue
  Appearence.NomalItemTextSettings.FontColor := claCadetblue
  Appearence.NomalItemTextSettings.HorzAlign := Center
  Appearence.SelectedItemTextSettings.FontColor := claWhite
  Appearence.SelectedItemTextSettings.HorzAlign := Center
end

上記のように配置をTopに設定し、外観プロパティでスタイルを調整することで、アプリケーションの全体的なデザインに自然に調和させることができます。

次に、ブランドデータセットの内容をCCNavigateTitle1に設定します:

procedure TProductListForm.LoadBrandNavigation;
begin
  CCNavigateTitle1.OnActiveItemChanged := nil;
  CCNavigateTitle1.BeginUpdate;
  try
    CCNavigateTitle1.Items.Clear;
    FBrandDataSet.First;
    while not FBrandDataSet.Eof do
    begin
      with CCNavigateTitle1.Items.Add do
      begin
        ID := FBrandDataSet.FieldByName('BrandCode').AsString;
        Text := FBrandDataSet.FieldByName('BrandName').AsString;
      end;
      FBrandDataSet.Next;
    end;
  finally
    CCNavigateTitle1.EndUpdate;
    CCNavigateTitle1.ActiveItemIndex := 0;
    CCNavigateTitle1.OnActiveItemChanged := OnBrandSelectionChanged;
  end;
end;

上記のコードは、データセットをループしながら各レコードをブランドとしてCCNavigateTitleに追加しています。ユーザーがブランドを選択したタイミングで対応する商品データを表示するには、以下のイベントハンドラを実装します:

procedure TProductListForm.OnBrandSelectionChanged(Sender: TObject;
  PreviousItem, CurrentItem: TCCNavigateTitleItem);
begin
  inherited;
  if not Assigned(PreviousItem) then Exit;

  FBrandDataSet.Locate('BrandCode', CurrentItem.ID, []);
  LoadProductsByBrand(CurrentItem.ID);
end;

実装時に注意が必要な点として、LoadBrandNavigationの呼び出し時にOnActiveItemChangedイベントが発生しないようにする必要があります。しかし、アニメーションの遅延により意図せずイベントが発火する場合があるため、以下のチェック処理を入れています:

if not Assigned(PreviousItem) then Exit;

上述の実装では実行時にナビゲーション内容を動的にロードしていますが、CCNavigateTitleにはItemsプロパティも用意されており、IDE上で直接ナビゲーション項目を設定することも可能です。

このコンポーネントを使用するべきシナリオについて:

ナビゲーション項目が画面幅を超える場合に最適です。

その理由は、CCNavigateTitleがスワイプ操作をサポートしており、ユーザーが左右にスワイプすることで隠れた項目を表示できるためです。

上方にあるのはこのコンポーネントのプロパティパネルです。主要なプロパティを赤でマークしてあります。非常にシンプルな設定でありながら、プロフェッショナルな外観を実現できます。試してみればその効果がわかります!

タグ: Delphi FireMonkey UIコンポーネント ナビゲーション モバイル開発

6月1日 16:50 投稿