CheckListBoxの▲クリックでCheckListBoxの幅を狭めたい

解決


のん  2014-01-12 08:43:07  No: 45842

お世話になります。

CheckListBoxの▲をクリックした時に、CheckListBoxの縦幅を狭めたいのですが、方法が分からず困っております。

たとえば、ComboBoxの▼をクリックしたときのように、
選択リストの幅が広がる、閉じるの動作をCheckListBoxで実現したいです。
(都合上、CheckListBoxの上に、Buttonは置きたくないです・・)

MouseMoveイベントで座標を取得して、幅を変更しようかと思いましたが
▲の上ではイベントが発生しませんでした・・

ご教授いただけましたら助かります。
よろしくお願いします。

環境:Delphi XE 
OS:  Win7  32bit


  2014-01-13 01:38:21  No: 45843

CheckListBoxの△とはなんですか?
スクロールバーの上に出てくるボタンですか。


Quest  2014-01-13 04:19:36  No: 45844

>たとえば、ComboBoxの▼をクリックしたときのように、
>選択リストの幅が広がる、閉じるの動作
「幅が広がる」とは「横方向に大きくなる」という意味ですよね?
つまり、5文字しか表示できないものが10文字表示できるようになるとか。
あるいは普通に、選択肢が下方向にズルっと表示される
「ドロップダウン」のことを言ってるのかな?


のん  2014-01-13 10:31:13  No: 45845

あ様、Quest様、書き込みありがとうございます。

あ様
>CheckListBoxの△とはなんですか?
>スクロールバーの上に出てくるボタンですか。
質問が分かりにくくて申し訳ありません。
仰る通りです。スクロールバーの上のボタンです。

Quest様
>「幅が広がる」とは「横方向に大きくなる」という意味ですよね?
>つまり、5文字しか表示できないものが10文字表示できるようになるとか。
>あるいは普通に、選択肢が下方向にズルっと表示される
>「ドロップダウン」のことを言ってるのかな?
質問が分かりにくくて申し訳ありません。
ComBoBoxのようなドロップダウンをCheckListBoxで実装したいのですが。。。

よろしくお願いいたします。


何をしたいの?  2014-01-13 21:38:27  No: 45846

CheckListBoxを使って何をしたいんだかぜんぜん見えてこないね。

ComBoBoxのようなドロップダウンを実装したいんなら、CheckListBoxじゃなくて、ComBoBoxを使えばいいんじゃないの?

CheckListBoxを使う理由は何?


のん  2014-01-14 06:04:10  No: 45847

書き込みありがとうございます。
表現が難しいのですが、

CheckListBoxを使いたい理由は選択肢を複数選択できるようにする為です。
かつ、フォームの見た目上はComboBoxのように、ドロップダウンしたいです。

ComboBoxで複数選択できれば一番良いのですが、方法がわかりません。

ご教授よろしくお願いいたします。


のん  2014-01-14 06:32:56  No: 45848

間違って解決としてしまいました。
失礼しました。

ご教授お願いいたします。


けど  2014-01-14 07:19:46  No: 45849

ボタンを付けたくないならスクロールバーにこだわらなくていいんでないかい
  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;


KHE00221  2014-01-14 20:54:46  No: 45850

CheckBox のイメージを2個用意して

procedure TForm1.ComboBoxEx1Select(Sender: TObject);
begin
    ComboBoxEx1.ItemsEx[ComboBoxEx1.ItemIndex].ImageIndex := (ComboBoxEx1.ItemsEx[ComboBoxEx1.ItemIndex].ImageIndex + 1) mod 2;
end;

でいいんじゃないか


deldel  2014-01-15 01:24:48  No: 45851

選択肢を複数選択した場合に、ドロップダウンしていない状態では、
表示はどうするのでしょうか?チェックがついている項目のうちの一番上?

なんか、UI的にあんまり良くない気もしますが??


deldel  2014-01-15 01:30:16  No: 45852

例えば、以下のようにメニューを使っても似たことができますが・・・

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;


igy  2014-01-15 01:42:06  No: 45853

標準のコンポーネントではありませんが、
JVCLには、TJvCheckedComboBox があるようです。


KHE00221  2014-01-15 17:25:08  No: 45854

http://khe00221.image.coocan.jp/index.php?directory=.%2F00003.dir%2F00003.dir


のん  2014-01-16 09:43:27  No: 45855

皆様、ご教授まことにありがとうございます。
バタバタしておりお返事が遅くなりまして申し訳ありません。

今回の質問の意図は、StringGridの上にCheckListBoxを置いて
選択肢を閉じるとStringGridのセルにItemを書き込む処理をしているため
CheckListBoxの閉じ方を教えていただきたいと思っておりました。

皆様からご教授いただきましたことを参考にさせていただき、
まだ理解力がないため、すぐには解決できないのですが、
igy様、KHE00221より教えていただいた、
ComboBoxのチェックリストは理想の形なので、
これから勉強して、対応したいと思います。

ありがとうございました。


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

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






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