最近Delphi6.0を始めた者です。
フォームのロードイベントで同フォーム内のListboxのOnDrawItemイベントを呼び出すにはどうしたらいいのでしょうか?
型の定義とかがいまいち分からなくてなかなかうまくいきません。
お願いします。
おそらく単語が間違ってます。
フォームのロード中はフォームが見えませんから当然その上にあるコントロールを描く必要はありませんし、描けません。
ちょっとやりたいことを具体的にお願いします。
単純に呼び出すだけなら OnDrawItem(nil) で。
フォームのロードが完了したら、Listboxの各Itemに違う色をつけたいのですが。
> フォームのロードが完了したら、Listboxの各Itemに違う色をつけたいのですが。
OnDrawItemイベントは、ユーザが呼び出すものじゃなくて、OS が ListBox を
描画するときによびだすものです。そこのとこは理解できてますか?
>ListboxのOnDrawItemを呼び出すには?
(1) Listboxの各Itemの色を変更したい ---->
(2) OnDrawItemを使えばいいのかも知れない
ということで,このタイトルの質問になったのではないかと思いますが,
Delphiでは,各コントロール(コンポーネント)にイベントがあり,これは,
実行中に適当なタイミングで呼び出してくれます.
素直に,やりたいことを質問すればよかったわけですね.
つまり,OnDrawItemイベントを定義しさえすれば自動的に実行してくれる
わけです.以下のコードを実行してみて下さい.後は適当に...
もちろんヘルプも参考にして下さい.
実行確認は,WindowsXP(SP2),Delphi5(UP1)です.
//=====================================================================
// ListBoxのItemの色を変更
// StyleプロパティをlbOwnerDrawFixedにするとこのイベントが呼ばれる
// このイベントを定義するとデフォルトの描画は行わないので,自分で書く
//=====================================================================
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
with ListBox1 do begin
if odFocused in State then begin
Canvas.Brush.Color:=clWhite;
end else begin
case Index of
0: Canvas.Brush.Color:=clYellow;
1: Canvas.Brush.Color:=clBlue;
2: Canvas.Brush.Color:=clGreen;
3: Canvas.Brush.Color:=clRed;
end;
end;
Canvas.FillRect(Rect);
DrawText(Canvas.Handle,PChar(Items[Index]),-1,Rect,
DT_SINGLELINE or DT_VCENTER or DT_LEFT);
end;
end;
例えば、ListBox1.Style を lbOwnerDrawFixed としておいて、
以下のようにすれば、1行目だけ色付きで表示されるようになります。
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
if Index = 0 then begin
ListBox1.Canvas.Font.Color := clRed;
ListBox1.Canvas.Brush.Color := clYellow;
ListBox1.Canvas.FillRect(Rect);
ListBox1.Canvas.TextOut(2, 2, ListBox1.Items[Index]);
end;
end;
やや、かぶってしまった・・・^^;
>with ListBox1 do begin
もし,ListBoxに対して汎用的に使用するのであれば,この部分を
With Control as TListBox do begin
とかけばOKです.
deldelさん
>やや、かぶってしまった・・・^^;
おしい!! わずか1分以内の差でしたね.^ ^;
解決しました。
詳しいご説明感謝します。
ツイート | ![]() |