お世話になります。
CheckListBoxの▲をクリックした時に、CheckListBoxの縦幅を狭めたいのですが、方法が分からず困っております。
たとえば、ComboBoxの▼をクリックしたときのように、
選択リストの幅が広がる、閉じるの動作をCheckListBoxで実現したいです。
(都合上、CheckListBoxの上に、Buttonは置きたくないです・・)
MouseMoveイベントで座標を取得して、幅を変更しようかと思いましたが
▲の上ではイベントが発生しませんでした・・
ご教授いただけましたら助かります。
よろしくお願いします。
環境:Delphi XE
OS: Win7 32bit
CheckListBoxの△とはなんですか?
スクロールバーの上に出てくるボタンですか。
>たとえば、ComboBoxの▼をクリックしたときのように、
>選択リストの幅が広がる、閉じるの動作
「幅が広がる」とは「横方向に大きくなる」という意味ですよね?
つまり、5文字しか表示できないものが10文字表示できるようになるとか。
あるいは普通に、選択肢が下方向にズルっと表示される
「ドロップダウン」のことを言ってるのかな?
あ様、Quest様、書き込みありがとうございます。
あ様
>CheckListBoxの△とはなんですか?
>スクロールバーの上に出てくるボタンですか。
質問が分かりにくくて申し訳ありません。
仰る通りです。スクロールバーの上のボタンです。
Quest様
>「幅が広がる」とは「横方向に大きくなる」という意味ですよね?
>つまり、5文字しか表示できないものが10文字表示できるようになるとか。
>あるいは普通に、選択肢が下方向にズルっと表示される
>「ドロップダウン」のことを言ってるのかな?
質問が分かりにくくて申し訳ありません。
ComBoBoxのようなドロップダウンをCheckListBoxで実装したいのですが。。。
よろしくお願いいたします。
CheckListBoxを使って何をしたいんだかぜんぜん見えてこないね。
ComBoBoxのようなドロップダウンを実装したいんなら、CheckListBoxじゃなくて、ComBoBoxを使えばいいんじゃないの?
CheckListBoxを使う理由は何?
書き込みありがとうございます。
表現が難しいのですが、
CheckListBoxを使いたい理由は選択肢を複数選択できるようにする為です。
かつ、フォームの見た目上はComboBoxのように、ドロップダウンしたいです。
ComboBoxで複数選択できれば一番良いのですが、方法がわかりません。
ご教授よろしくお願いいたします。
間違って解決としてしまいました。
失礼しました。
ご教授お願いいたします。
ボタンを付けたくないならスクロールバーにこだわらなくていいんでないかい
private
{ Private 宣言 }
procedure EnterCheckListBox;
procedure LeaveCheckListBox;
-------
procedure TForm1.CheckListBoxEnter(Sender: TObject);
begin
EnterCheckListBox;
end;
procedure TForm1.CheckListBoxExit(Sender: TObject);
begin
LeaveCheckListBox;
end;
procedure TForm1.CheckListBoxMouseLeave(Sender: TObject);
begin
LeaveCheckListBox;
end;
procedure TForm1.CheckListBoxMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
EnterCheckListBox;
end;
procedure TForm1.EnterCheckListBox;
begin
CheckListBox.Height:=CheckListBox.ItemHeight*5;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
for i:=0 to 9 do CheckListBox.Items.Add(IntToStr(i));
end;
procedure TForm1.LeaveCheckListBox;
begin
CheckListBox.Height:=CheckListBox.ItemHeight+4;//適当
end;
CheckBox のイメージを2個用意して
procedure TForm1.ComboBoxEx1Select(Sender: TObject);
begin
ComboBoxEx1.ItemsEx[ComboBoxEx1.ItemIndex].ImageIndex := (ComboBoxEx1.ItemsEx[ComboBoxEx1.ItemIndex].ImageIndex + 1) mod 2;
end;
でいいんじゃないか
選択肢を複数選択した場合に、ドロップダウンしていない状態では、
表示はどうするのでしょうか?チェックがついている項目のうちの一番上?
なんか、UI的にあんまり良くない気もしますが??
例えば、以下のようにメニューを使っても似たことができますが・・・
procedure TForm1.Label1Click(Sender: TObject);
var
P: TPoint;
begin
GetCursorPos(P);
PopupMenu1.Popup(P.X, P.Y);
end;
//このイベントはすべてのTMenuItemに割り当てる
procedure TForm1.N1Click(Sender: TObject);
begin
TMenuItem(Sender).Checked := not TMenuItem(Sender).Checked;
end;
標準のコンポーネントではありませんが、
JVCLには、TJvCheckedComboBox があるようです。
http://khe00221.image.coocan.jp/index.php?directory=.%2F00003.dir%2F00003.dir
皆様、ご教授まことにありがとうございます。
バタバタしておりお返事が遅くなりまして申し訳ありません。
今回の質問の意図は、StringGridの上にCheckListBoxを置いて
選択肢を閉じるとStringGridのセルにItemを書き込む処理をしているため
CheckListBoxの閉じ方を教えていただきたいと思っておりました。
皆様からご教授いただきましたことを参考にさせていただき、
まだ理解力がないため、すぐには解決できないのですが、
igy様、KHE00221より教えていただいた、
ComboBoxのチェックリストは理想の形なので、
これから勉強して、対応したいと思います。
ありがとうございました。
ツイート | ![]() |