TCheckBoxの2次元表示

解決


こういち  2003-05-16 08:56:04  No: 3546

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


こういち  2003-05-16 08:59:17  No: 3547

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


kazu  2003-05-16 09:29:02  No: 3548

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

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

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

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


にしの  2003-05-16 17:26:47  No: 3550

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

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

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


こういち  2003-05-16 18:53:17  No: 3551

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加