掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
リストボックスに選択した色(青色)を表示するには? (ID:21027)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
各項目の背景色の場合。 コンストラクタか オブジェクトインスペクタで 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は、マウス操作だけじゃ未選択にできないんですねー 知りませんでした。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.