[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 04/09 17:28 / Filesize : 190 KB / Number-of Response : 833
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++Builder相談室 Part18



1 名前:デフォルトの名無しさん [2007/09/01(土) 09:41:22 ]
C++Builderに関する質問・回答や議論等を行う相談室スレッド。

【前スレ】
C++Builder相談室 Part17
pc11.2ch.net/test/read.cgi/tech/1162918887/

過去スレ・関連サイトは>>2-7あたり。


※Borland C++ Compiler 5.5.1についての質問は以下のスレへ
タダで使えるBorland C++ Part5
pc11.2ch.net/test/read.cgi/tech/1135127048/
※BDS(Borland Developer Studio)の総合スレはこちら
Borland Developer Studio 2006 No.13
pc11.2ch.net/test/read.cgi/tech/1175861395/
※CodeGear(Borland)関連はこちら
【Borland】CodeGearオッチャ その5【(ノ∀`)アチャー】
pc11.2ch.net/test/read.cgi/tech/1186333161/


321 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 16:02:46 ]
>Tagにポインタをぶち込むのも考えてましたが・・・

たしかに、これではクラス派生のOOPにならないから良くない。

316の場合、綺麗にファイル単位でクラスを分けれて作成&メンテしやすいお。

322 名前:デフォルトの名無しさん [2008/01/23(水) 16:09:46 ]
>>321
えーっと>>316さんの策はとりあえずフォームに
Imageを貼り付ける場所にPanelを貼り付けて
んで実行時にPanelをコンテナとしてその上にTImageを継承したクラスを
のっけるってことでいいですか?

323 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 16:18:38 ]
>>322
その通りです。
コンストラクタでのっけてます。
deleteはしなくてもおk。

TImageクラスとかの名前を、
TImage_(用途).cpp とか T(用途)Image.cpp
にしてまつ。

324 名前:316 mailto:sage [2008/01/23(水) 16:19:57 ]
>コンストラクタでのっけてます。

の場合もありますし、
何度もデータを入れ替えしたい場合は、
キッチリ削除したいので、

Form::init メソッドでのせる場合おあるかな。

325 名前:デフォルトの名無しさん [2008/01/23(水) 16:33:05 ]
>>323
なるほどなるほど。
しかしこの場合はイベントハンドらはどうしていますか?
予めダミーっぽいTImageでClickとか設計時に作っちゃってから
TImageExのnewしてからわりあててますか?

326 名前:316 mailto:sage [2008/01/23(水) 16:57:30 ]
>>325
そうそう、目が効いてますね。
イベントハンドラがちょっぴりテクニックです。

TForm1に、
>void __fastcall Event_OnClick(TObject *Sender);
みたいな感じで手書きでイベントハンドラ作っておきます。
そうしてTImageExをnewしたあとに、イベントハンドラを外からセットします。

ちょっと読むと、え”ーという感じかもしれませんが、意外にこれに利点があります。


1.イベントハンドラの無い派生クラスなので、複数画面で共有しても全く弊害無し
2.Form1のイベントハンドラとして書くので、TImageExと他の例えばTGridExと
 それらのオブジェクトが連携するように記述できる上、
 それらのオブジェクトが互いに参照しない

327 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 17:02:03 ]
派生クラス作るんなら派生クラス内にイベント書いてコンストラクタで入れちゃえばいいんじゃないん?

class TxxImage : public TImage
{
public:
TxxImage() : TImage() { OnClick = TxxImageClick; }
private:
TxxImageClick(TObject* Sender) { ... }
};

328 名前:316 mailto:sage [2008/01/23(水) 17:04:56 ]
>>327
いや、やっぱ、イベントハンドラはForm1のものとして書いたほうが、色んなオブジェクトにアクセスできるお。

逆にTxxImageに色んなオブジェクトアクセス参照用にプロパティ付けようもんなら、
TxxImageが依存するものが増えちゃう。

329 名前:デフォルトの名無しさん [2008/01/23(水) 17:08:48 ]
>>326
なるほろ。イベントハンドらの指定はわかりました
利点についてはまだ納得できるレベルに到達していないので精進致します

>>327
それならイベントからフォームをアクセスしたい場合に困ったりしないですか?




330 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 17:11:07 ]
あー、イベントから他のコントロールへのアクセスは考えてなかったわ/ ,' 3  `ヽーっ

331 名前:316 mailto:sage [2008/01/23(水) 17:13:40 ]
氏ぬんじゃない

332 名前:デフォルトの名無しさん [2008/01/23(水) 17:18:43 ]
しかし皆さん色々とうまい方法を持っていますよね
久々に良い勉強になりますた(;´Д`)

333 名前:デフォルトの名無しさん [2008/01/23(水) 18:23:00 ]
BCB5で起動直後メインウィンド以外のフォームをShowModalで表示するとき
一番いいと思われる方法はどんなものがありますか?
おしえてエロい人!


334 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 18:27:55 ]
起動直後に、

Form2->ShowModal();


335 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 18:31:40 ]
>>334
ありがとうエロい人!
Application->Run();の直前あたりに書くの?
そうするとメインウィンドは表示されるの?


336 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 18:36:18 ]
マルチスレッドじゃないんだから、Runの前じゃそこでダイアログが表示されるだけだろ

フォームにタイマーでも入れて、最初の1回目でやればいいじゃない

337 名前:デフォルトの名無しさん [2008/01/23(水) 19:01:25 ]
Idle

338 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 09:12:55 ]
OnCreateでメッセージ投げるとか

339 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:39:40 ]
>333はきっとスプラッシュウィンドウを出したいんじゃないかな、と勝手に考えてみたり。
Delphiならそのフォームをinitialization部でCreate/Show/Updateして、そのフォームの
OnDeactivateイベントでReleaseとするのが定石なんだが。C++Builderだと
initialization部にあたるのはどこなんだろう?



340 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 08:42:09 ]
スプラッシュなら、それこそ何時でも好きなタイミングで表示してくれって感じだが。

341 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 09:58:47 ]
initialization部相当は
クラスのインスタンスをグローバル領域で定義して、そのコンストラクタでやるとか

342 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 19:25:47 ]
>>339

WinMain関数のApplication->Initialize();の後ろ辺りでnew/Show/Update。
表示後にメインフォームとか作ってApplication->Run();の前辺りでClose


343 名前:デフォルトの名無しさん [2008/01/29(火) 20:02:10 ]
だからcloseはIdleでやるつってるだろ!!このばかちんが!

344 名前:デフォルトの名無しさん [2008/01/29(火) 21:02:43 ]
C++Builder 6を使っているのですが。
TPageControlで最後のページを削除した後、
先頭のページがアクティブになってしまいます。
そうでなくて、削除したページの一個前をアクティブに
したいのですが、どうすれば良いでしょうか。
以下のコードだと、一瞬変な表示になってしまいます。
ちなみに最後のページ以外は、普通にdeleteすれば
そのような現象はおきません。

//最後のページを削除
TTabSheet *pLastPage = PageControl1->Pages[PageControl1->PageCount -1];
delete pLastPage;
//先頭のページがアクティブになってしまうので、
//最後のページがアクティブになるように選択
PageControl1->ActivePageIndex = PageControl1->PageCount -1;


345 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 03:38:47 ]
一個前のページをアクティブにしてから削除してもダメ?

346 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 08:40:05 ]
スプラッシュウィンドウごとき、そんなに凝ったり議論したりするものでない。

出て消えれば、おk。

347 名前:デフォルトの名無しさん [2008/01/30(水) 10:01:09 ]
>>345
344です。
一個前をアクティブにしても、結局先頭がアクティブになってしまいます。
C++BuilderのIDE自体は何気に出来てるのに、そのコンポーネントで出来ないとは、
いやな感じだ。

348 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 10:13:34 ]
TPageControl::RemovePage()をオーバーライドしないと無理っぽい

349 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 10:22:34 ]
delete pLastPageの前に、pLastPage->PageIndex = pLastPage->PageIndex - 1 を入れれば?



350 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 10:36:25 ]
>>349
VCLのソース見るとタブ削除時にページ切り替え動作やってるから駄目だと思うお

351 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 10:37:23 ]
いや。ソース見た上で言ってるよ。

352 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 10:45:53 ]
ああ、削除前に最後のページを後ろから2番目に移動させるのか。

353 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 10:50:09 ]
削除前にタブの順番が変わるけど即時描画じゃないから、入れ替え動作は全く見えないはず。

354 名前:デフォルトの名無しさん [2008/01/30(水) 14:39:38 ]
役に立たない答えばっかりですね・・・

355 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 14:44:27 ]
君が役に立つ答えを言ってもいいんだよ

356 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 14:53:09 ]
349ので何か不満あんのか

357 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 14:54:52 ]
>>356
それでいけるはず。
C++Builder6って結構モッサリした仕様のコンポーネント多いよなぁ。

358 名前:デフォルトの名無しさん [2008/01/30(水) 16:09:43 ]
344です

//最後のページを削除
TTabSheet *pLastPage = PageControl1->Pages[PageControl1->PageCount -1];
pLastPage->PageIndex = pLastPage->PageIndex - 1
delete pLastPage;

>>349のやり方ですが、大体の場合はうまく行くのですが、
タブをたくさん作って、最後のタブをユーザの操作などで何回も消していくと
タブが表示されなくなり、その状態でタブ表示のスクロール見たいのを
操作すると、中途半端にタブが描画されてしまいます。
Refresh()やInvalidate()などを使っても描画されません。
やはり、最後のタブを消したときに、先頭がアクティブになるのは、
この辺がうまく行かないから、そうしたのではないと考えてしまいます。


359 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:45:16 ]
そういえばIDEのエディタのタブもそうなるな



360 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 17:00:29 ]
最後のタブ消した時だけ PageControl1->ScrollTabs(1) とか

361 名前:デフォルトの名無しさん [2008/01/31(木) 20:25:56 ]
344です
>>360 の内容を参考にして見てソースを修正したところ、
一瞬表示がびくつくのと、右端で最後のタブの表示が半分隠れる
場合があるのですが、描画の不具合などがなくなりました。
もう少し、きれいに動作すればいいのですが。
ScrollTabsの引数は -1 の方が良いみたいです。

//最後のページを削除
TTabSheet *pLastPage = PageControl1->Pages[PageControl1->PageCount -1];
pLastPage->PageIndex = pLastPage->PageIndex - 1
PageControl1->ScrollTabs(-1);
delete pLastPage;


362 名前:デフォルトの名無しさん [2008/02/02(土) 21:10:47 ]
ビルダー落としたんだが
各サイトの説明が詐欺でできません。
XPのコントロールパネルからのシステムなんて項目ありませんが
どうするん?

363 名前:デフォルトの名無しさん [2008/02/02(土) 21:30:01 ]
もういいやめたクソが
シネよ

364 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 21:33:18 ]
>>362
PC初心者
pc11.2ch.net/pcqa/

365 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 23:23:26 ]
春かと思った

366 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 23:26:50 ]
うちの大学は春休みだよ

367 名前:デフォルトの名無しさん [2008/02/03(日) 10:56:49 ]
まったく初心者に回答すらやらないなんてお前ら醜態をさらしているのか?
俺が醜態を晒しているんじゃない、答える側はお前らだからな。
器の小ささを披露している書き込みが二つだな、恥ずかしい。


368 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 10:59:29 ]
そのコピペいただき

369 名前:デフォルトの名無しさん [2008/02/03(日) 11:02:45 ]
コピペじゃねぇよ
お前がいただくならお前がコピペすんだろ?
まったく、上の奴は相談室で回答しないならここに来るなよ



370 名前:デフォルトの名無しさん [2008/02/03(日) 11:03:26 ]
上の奴ってのは>>367とかだよ

371 名前:デフォルトの名無しさん [2008/02/03(日) 11:04:33 ]
>>366だよ

372 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 11:06:50 ]
おっと知的障害の方でしたか
失礼しました

373 名前:デフォルトの名無しさん [2008/02/03(日) 11:10:04 ]
>>372
はい身障者差別発言、
まったくどこまで・・・

374 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 11:11:06 ]
いや文盲か

375 名前:デフォルトの名無しさん [2008/02/03(日) 11:12:40 ]
他所でやれ

376 名前:デフォルトの名無しさん [2008/02/03(日) 11:16:35 ]
相談室に俺相談者、俺は場違いじゃないけど、チャチャ入れは場違いだ
普通の初心者レベルの質問に春だとか言う場違いな人は荒らしだな

377 名前:デフォルトの名無しさん [2008/02/03(日) 11:20:23 ]
他所でやれ

378 名前:デフォルトの名無しさん [2008/02/03(日) 11:22:31 ]
もう自演で言い返すのはやめろ、また醜態さらしか。
見ててくだらなすぎる。もともとお前は場違いなんだから、
もう言い返しに必死になってないで去れよ

379 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 11:26:39 ]
Windowsのコントロールパネルの話ならPC初心者板の範疇だろ。常識的に考えて。



380 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 11:27:03 ]
暇なの?俺も暇。

381 名前:デフォルトの名無しさん [2008/02/03(日) 11:33:30 ]
まだ突っかかってくる辺りがもう・・・
もう最後な、回答してやるのは。
>>379
そんなもん書き方だろ、ボーランドの初期設定からのコントロールパネルの話だし、何言っちゃってるの?
>>380
公言して相手に見せるために言っている辺りがもう・・・

はいここでもうお前らみたいなのとの会話終了、
二度と来るな、書き込みしても放置する

382 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 11:36:29 ]
(・∀・)

383 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 11:38:07 ]
ここまで俺の自演

384 名前:デフォルトの名無しさん [2008/02/03(日) 11:43:34 ]
ああ、最後にもう一つだけ言っとく。
先に突っかかってきたのはお前らだ。
俺は質問しただけだから、いい迷惑だ。
お前らは醜態から始めちゃったわけだ。
自分で招いておきながらそれに言い返したりして、まったくアホか。

385 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 11:52:14 ]
362 名前:デフォルトの名無しさん[] 投稿日:2008/02/02(土) 21:10:47
ビルダー落としたんだが
各サイトの説明が詐欺でできません。
XPのコントロールパネルからのシステムなんて項目ありませんが
どうするん?

363 名前:デフォルトの名無しさん[] 投稿日:2008/02/02(土) 21:30:01
もういいやめたクソが
シネよ

364 名前:デフォルトの名無しさん[sage] 投稿日:2008/02/02(土) 21:33:18
>>362
PC初心者
pc11.2ch.net/pcqa/

-----------------------------
これで完結してるやん

386 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 12:29:09 ]
>362とか書いてあることがマジ理解不能なんだけど、俺の日本語能力はここまで落ちてしまったのか?

387 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 12:41:14 ]
>>386
少しはエスパー能力を磨いてみては?

388 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 13:06:41 ]
春かと思った

389 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 13:13:06 ]
ほいで、誰か質問の意味がわかったのか?



390 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 13:28:53 ]
>>389
WindowsXPのコントロールパネル内のシステムのアイコンが見つけられません><

じゃないん?

391 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 13:32:37 ]
あ、それでいいのか。ボーランドのどうこうって言うからまた別物かと思ってた。

392 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 22:05:28 ]
開発環境はTurboC++Builderで、
DirectXを使うのにお勧めな環境やライブラリを教えてください

393 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 22:25:42 ]
Direct3Dとかでゲーム開発するならVisualStudioがおすすめかな>環境
あくまでもBCBでやりたいならとりあえず↓あたり
ttp://www.clootie.ru/cbuilder/index.html

394 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 22:33:00 ]
>>393
ありがとう 調べてみます

395 名前:初心者 [2008/02/05(火) 21:00:06 ]
Button に Color プロパティがありませんぞ。
どうやって色を設定するのでしょうか。

396 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 21:47:38 ]
TButtonをOwnerDrawするかTGraphicControlを派生して自作

397 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 21:48:32 ]
TButtonをOwnerDrawする方法はぐぐればDelphiのソースが簡単に見つかる

398 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:47:16 ]
>395
まぁそういうことなのだが、Microsoft的にはそういうことをしてほしくないらしい。
VisualStyleを適用するとOwnerDrawもうまくいかないような。

399 名前:デフォルトの名無しさん [2008/02/06(水) 12:00:36 ]
TImageListで設計時にイメージを追加するとイメージがTImageListのWidthやHeightより
大きい場合縮小して格納とかできますが
これをコードで追加する場合はどうすればいいですか?



400 名前:デフォルトの名無しさん [2008/02/08(金) 10:32:26 ]
エクスプローラのフォルダツリーのようにTListViewにフォルダツリーを作ったのですが
そこで指定したパスのノードを開く方法を教えてください

401 名前:395 [2008/02/09(土) 14:14:51 ]
いろいろありがと。>396 >397 >398
visual studio だと簡単にできるのになぁ。
XMLだとか
ドラッグアンドドロップだとかも
簡単にはできないのはちょっと不満。


402 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 14:36:48 ]
Visual StudioってかC#だろう?簡単に出来るのは。

403 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 14:38:31 ]
C# つか.NETか。

404 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 14:48:49 ]
>>401
VSでVC++とMFCでそのセリフを吐いてみろ
自分がどれだけラクチンにC++を書いてるのかわかる

405 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 14:59:18 ]
ダイアログベースならよゆーっすよw

406 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 15:19:56 ]
配置が楽なだけじゃん

407 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 16:31:18 ]
いや、でも、VCLより確実に楽

408 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 16:39:25 ]
色ボタンなんてコンポ拾って張りゃいいじゃん

409 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 16:45:52 ]
それかえって手間だと思う。
コンポーネントの管理がやりづらいからなぁ。



410 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 16:53:30 ]
一回登録するだけじゃん。てかそんな事のためにVC使うとか自体あほらしいけど。

411 名前:401 [2008/02/09(土) 17:18:45 ]
>>404
それそれ。
MFCのウワサは聞いてるから
最初から手を出してない。だから C++ は
C++ builder に手を出した。
でも C# はホント、楽だよ。


412 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 17:43:42 ]
日本語より英語は楽、とかいっても意味はないね

413 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 17:55:33 ]
( ゚д゚ ) マアマア

414 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:08:35 ]
言語仕様にライブリラリを含めた総合的な生産性で判断して楽とか
言ってんじゃないの?
何、その日本語より英語は楽とかとう例え。頭悪そう。


415 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:13:11 ]
楽とかとう ( ゚д゚ ) マアマア

416 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 19:49:34 ]
>>411
.NET系の生産効率の高さは周知だよ
C#に限らずVBでもC++/CLIでもね
WinForm使う限りGUIはラクチン
CGもついてるし
なんだけどね……

初学者がいきなりVC+MFCは敷居高すぎるのは確か
BCBなんかでC/C++に慣れてから
MFC+Win32APIの海へ漕ぎ出した方がいい

417 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 20:44:03 ]
コンポーネントを1回登録するだけ
マジでそれが理想だけど色々と面倒だよね、あるプロジェクトだけで使えるコンポーネント
とか簡単に指定できればいいのに

418 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 21:31:36 ]
色々ってナニよ。1回登録したら再インストールするまで何もしてないぞ。

419 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 22:00:36 ]
ぜーんぶまとめて1つのパッケージに入れちゃう人もいるみたいだねぇ。



420 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 01:06:34 ]
BCBを再インスコしてコンポーネントを入れてたときに作ったコンポーネントを使ってないプロジェクトを開くとエラーになる

421 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 02:52:19 ]
名前ぶつかったり、コンポーネントは厳選しないとろくなことがないよ。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<190KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef