リストボックスに選択した色(青色)を表示するには?


でるでる  2006-04-14 19:43:28  No: 21022

プログラム内でリストボックスの選択されているアイテムを取得する際、
画面に表示されている項目に選択した時の色を表示する事は出来ますか?
出来ればどなたかご教授願います。


あいまいみ〜  2006-04-14 19:51:11  No: 21023

色の名前(TColor)を表示したいの?


でるでる  2006-04-15 00:52:32  No: 21024

プログラムで選択したアイテムを画面上に色で表示したいのです。
(説明が下手ですいません)


だ〜か〜ら〜  2006-04-15 01:32:42  No: 21025



があって、青を選択したら、青色になってほしいの?
説明が下手じゃなく、不足


forever  2006-04-15 10:56:25  No: 21026

TListBoxのItemsが
"赤"
"青"
"黄"
とかなら
TListBoxのItemIndexを使って判断、処理できる。
この場合、最初が 0 で最後が 2。

フォームに TPanelとTListBoxが貼り付けてあるとして

TListBox.OnClick のイベントハンドラに

case ListBox1.ItemIndex of
 0: Panel1.Color:= clRed;
 1: Panel1.Color:= clBlue;
 2: Panel1.Color:= clYellow;
 else
 Panel1.Color:=clBlack;
end;

それともリストボックス内の各項目の背景色?


ついで  2006-04-15 12:20:38  No: 21027

各項目の背景色の場合。

コンストラクタか オブジェクトインスペクタで
ListBox の Style を lbOwnerDrawFixed にした上で、

ListBox の OnDrawItemイベントを使えば派生しなくても何とかなります。

OnDrawItemは、アイテムの描画が必要されるたびに
アイテム1つずつに1回以上、呼び出されます。

自分で考えるのも大切だけど最初のうちは、
人のを見た方が参考になると思うんで、書いてみました。(まあ息抜き)

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
    fc,bc: TColor;
    w,h: integer;
begin
    // fc はフォント(テキスト)の色
    // bc は 背景色
    case Index of
        0:  begin
                fc:= clWhite;
                bc:= clRed;
            end;
        1:  begin
                fc:= clWhite;
                bc:= clBlue;
            end;
        2:  begin
                fc:= clBlack;
                bc:= clYellow;
            end;
        else
        begin
            fc:= clWindowText;
            bc:= clWindow;
        end;
    end;

    with Control as TListBox do
    if Canvas.TryLock then
    try
    //選択されていたら色を変える(あまり見栄えがよくない)
        //if (odSelected in State) then
        //    bc:= (bc shr 1) and $00FFFFFF;

        //背景塗りつぶし
        Canvas.Brush.Color:= bc;
        Canvas.FillRect(Rect);

    //選択されていたら、分かりづらいので左端にボタンをつける処理
        w:=Rect.Bottom-Rect.Top; //アイテムの幅
        dec(w,7);                //ボタンの大きさを調節(少し小さくする)
        h:=w;                    //正方形にするため高さを幅に合わせる
        inc(Rect.Left,4);        //小さくした分の半分を余白にとる
        inc(Rect.Top,4);

        //選択されていたらボタンを描画
        if (odSelected in State) then
            DrawFrameControl( Canvas.Handle,
                    classes.Rect( Rect.Left, Rect.Top, Rect.Left + w, Rect.Top + h),
                    DFC_BUTTON,DFCS_BUTTONPUSH or DFCS_TRANSPARENT);

        //ボタンの右に余白をとる
        inc( Rect.Left,4);
        inc( Rect.Left, w);

    //テキスト描画
        Canvas.Font.Color:= fc;
        Canvas.TextOut( Rect.Left,Rect.Top, Items[Index]);
    finally
        Canvas.UnLock;
    end;
end;

ListBox の Style を lbOwnerDrawFixed にするのを忘れずに。

ListBoxは、マウス操作だけじゃ未選択にできないんですねー
知りませんでした。


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

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






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