TCheckBoxの2次元表示

解決


こういち  2003-05-16 08:56:04  No: 3546  IP: [192.*.*.*]

はじめまして、プログラムについては全くの初心者で
この度Delphi6Personalを初めて手にし、コンポーネントを色々使ってみているのですが、大変くだらない質問ですが、TCheckBoxの外観を変更することができず困っております。
TCheckBoxの外観を単なる  ☐  即ち、2次元表示させたいのですが
Helpを参照したところ、Ctl3DプロパティをFalseに設定するだけのように
書かれておりますが、実際そのように設定してプログラムを実行しても
Ctl3D プロパティがTrueの状態である、3次元(3D)表示のものと変わって
いないのですが、どのようにしたらよろしいでしょうか?
どなたか、ご指導よろしくお願い致します。

編集    削除
こういち  2003-05-16 08:59:17  No: 3547  IP: [192.*.*.*]

質問中5行目に、四角形('しかく'を変換)を書いたら  ☐  と
表示されてしまいました。

編集    削除
kazu  2003-05-16 09:29:02  No: 3548  IP: [192.*.*.*]

OSが書かれてませんが、Ctl3Dプロパティは下位互換性保持のために
残されているプロパティです。NT系では変わりません。
詳しくはヘルプを参照してください。

質問の件ですが、チェックマークの表示部分をフラット表示にしたいと
いうことでしょうか?
それでしたら無理だと思われます。
自分で作成するか、面倒なら「Additional」の「TCheckListBox」を使って
実現できます。
FlatはTrue、Colorを背景の色に変更、BorderStyleをbsNoneにする。
Height, Widthは適当に。
Itemsプロパティに表示文字を書き込めば使用できます。

ただし、TCheckBoxとはチェックされてるかを見るプロパティが違うので
注意してください。

TCheckBox →  Checked
TCheckListBox  →  Checked[Index]

となっています。詳しくはヘルプを見てください。

編集    削除
たかみちえ  URL  2003-05-16 15:59:47  No: 3549  IP: [192.*.*.*]

チェックボックスのフラット化ですか…。  
たしか、海外製のコンポーネントで、そういうのがあったような気もします。
さらに、VBではプロパティひとつでフラット表示にできるようなので、
恐らくウィンドウメッセージか何か、あるんじゃないかなと思いますけど、
VBのプロパティは、XPのビジュアルスタイル下では無効でしたね。

  kazuさんの言うとおり、TCheckListBoxで済ませるか、
このさいですから、そういうコンポーネントを作ってしまうのもいいかもしれませんね。
  WinControlを継承して作れば、かなり思い通りのものが作れるんじゃないでしょうか?
(GraphicControlを継承すると、フォーカスは受け取れないものの、同じようなものが作れます)
  要するに、クリックされたらCheckedプロパティを切り替えればいいんですよね。
(まあ、実際にはそれ以外もありますけど^^;)

  ここでひし形のチェックボックスコンポーネントが配布されてますから、
それのソースでも見てみると、参考になるかもしれませんね。

編集    削除
にしの  2003-05-16 17:26:47  No: 3550  IP: [192.*.*.*]

海外のコンポーネントであったのは、Motifライクなボタンだったと思います。
# FlatCheckboxで検索して見つけました。

> 恐らくウィンドウメッセージか何か、あるんじゃないかなと思いますけど、
WindowClassにはありそうですよね。
Ctl3Dを設定するとRecreateWndしているのですが、Ctl3Dを使っていません。CreateWndをオーバーライドしてやればできそうな気もします。
# 未確認です
あとSetWindowLongあたりでしょうか。これは、RecreateされたときにバグがでそうなのでVCLには使いたくないですね。

最悪でも、DrawFrameControlを使えば、フラットなチェックボックスを描画できます。

編集    削除
こういち  2003-05-16 18:53:17  No: 3551  IP: [192.*.*.*]

kasuさん、たかみちえさん、にしのさん
ご指導ありがとうございました。
参考にさせて頂いてがんばってみます。

編集    削除