はじめまして、プログラムについては全くの初心者で
この度Delphi6Personalを初めて手にし、コンポーネントを色々使ってみているのですが、大変くだらない質問ですが、TCheckBoxの外観を変更することができず困っております。
TCheckBoxの外観を単なる ☐ 即ち、2次元表示させたいのですが
Helpを参照したところ、Ctl3DプロパティをFalseに設定するだけのように
書かれておりますが、実際そのように設定してプログラムを実行しても
Ctl3D プロパティがTrueの状態である、3次元(3D)表示のものと変わって
いないのですが、どのようにしたらよろしいでしょうか?
どなたか、ご指導よろしくお願い致します。
質問中5行目に、四角形('しかく'を変換)を書いたら ☐ と
表示されてしまいました。
OSが書かれてませんが、Ctl3Dプロパティは下位互換性保持のために
残されているプロパティです。NT系では変わりません。
詳しくはヘルプを参照してください。
質問の件ですが、チェックマークの表示部分をフラット表示にしたいと
いうことでしょうか?
それでしたら無理だと思われます。
自分で作成するか、面倒なら「Additional」の「TCheckListBox」を使って
実現できます。
FlatはTrue、Colorを背景の色に変更、BorderStyleをbsNoneにする。
Height, Widthは適当に。
Itemsプロパティに表示文字を書き込めば使用できます。
ただし、TCheckBoxとはチェックされてるかを見るプロパティが違うので
注意してください。
TCheckBox → Checked
TCheckListBox → Checked[Index]
となっています。詳しくはヘルプを見てください。
チェックボックスのフラット化ですか…。
たしか、海外製のコンポーネントで、そういうのがあったような気もします。
さらに、VBではプロパティひとつでフラット表示にできるようなので、
恐らくウィンドウメッセージか何か、あるんじゃないかなと思いますけど、
VBのプロパティは、XPのビジュアルスタイル下では無効でしたね。
kazuさんの言うとおり、TCheckListBoxで済ませるか、
このさいですから、そういうコンポーネントを作ってしまうのもいいかもしれませんね。
WinControlを継承して作れば、かなり思い通りのものが作れるんじゃないでしょうか?
(GraphicControlを継承すると、フォーカスは受け取れないものの、同じようなものが作れます)
要するに、クリックされたらCheckedプロパティを切り替えればいいんですよね。
(まあ、実際にはそれ以外もありますけど^^;)
ここでひし形のチェックボックスコンポーネントが配布されてますから、
それのソースでも見てみると、参考になるかもしれませんね。
海外のコンポーネントであったのは、Motifライクなボタンだったと思います。
# FlatCheckboxで検索して見つけました。
> 恐らくウィンドウメッセージか何か、あるんじゃないかなと思いますけど、
WindowClassにはありそうですよね。
Ctl3Dを設定するとRecreateWndしているのですが、Ctl3Dを使っていません。CreateWndをオーバーライドしてやればできそうな気もします。
# 未確認です
あとSetWindowLongあたりでしょうか。これは、RecreateされたときにバグがでそうなのでVCLには使いたくないですね。
最悪でも、DrawFrameControlを使えば、フラットなチェックボックスを描画できます。
kasuさん、たかみちえさん、にしのさん
ご指導ありがとうございました。
参考にさせて頂いてがんばってみます。
ツイート | ![]() |