みなさん初めまして。よろしくお願いします。
TCheckBoxにフォーカスをあてると、Captionの方に必ずあたります。
これを□の方(チェックが入るボックスの方)にあてることは可能でしょうか?
どうかご教授願います。よろしくお願いします。
チェックボックスのチェック部分にフォーカスが当たるということはありませんが…。
チェックボックスのボックス部分に点線が引かれることを目的としていると思いますが、それはありません。
チェックボックスは、ボックス部分に点線を引く代わりに、キャプションを点線で囲むことで、フォーカスがあるということを示しているだけです。
無理
そうでしたか・・。
ホームページなどでフォーカスがあたるのは、やはりまた違うものなのですね。
無知で申し訳ありません。勉強になりました。
たかみちえさん、ありがとうございました!!(^ ^)
また今後お世話になってしまうかもですが、その際はよろしくお願いします。
では。
Webページ上のチェックボックスでボックス部に点線が表示されてしまうのは、キャプションが設定されてないからです。
HTMLには<label>というタグがあり、それで文字列をキャプションとして設定するのですが、<label>タグでキャプションをつけるのを怠る人は多いのです。故にキャプションのない、ボックス上に枠線が引かれるチェックボックスが見られるのです。
(もちろんこれはHTMLの仕様からすると違反です。多くのブラウザはそれでも普通に表示できますが、ちゃんとラベル付けはしましょうね)
なお、このチェックボックスは、おそらく普通のソフトで表示されているチェックボックスとは違い、オーナードロー(OSに描画させないで、自分で描画すること)をしているものだと思います。
オーナードローすれば、たとえ"普通は表示されない枠線"であろうとも、表示させることができます。
(Delphiではチェックボックスの継承コンポーネントをつくり、Paintメソッドをオーバーライド、自分で描画することで可能です。意味はないとおもいますが)
>これを□の方(チェックが入るボックスの方)にあてることは可能でしょうか?
無理やりCheckBox1のBox部分にフォーカスを当ててみるにゃ。
にゃにゃし、
CheckBox1.Width := 15;
CheckBox1.Caption := '';
にしてにゃ。
もしCaptionも付けたければ Labelで代用するにゃ。
procedure Draw_FocusRect(Sender: TObject);
var
DC : HDC;
begin
with TControl(Sender) do begin
DC := GetDC(Parent.Handle);
DrawFocusRect(DC, Rect(Left-3, Top-1, Left+16, Top+18));
end;
end;
procedure TForm1.CheckBox1Enter(Sender: TObject);
begin
Draw_FocusRect(Sender);
end;
procedure TForm1.CheckBox1Exit(Sender: TObject);
begin
Draw_FocusRect(Sender);
end;
labelタグはぐーぐるが使ってますね
ツイート | ![]() |