16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"DBGridの特定の行の背景色を変えるコンポ"
この発言は #00130 マ太郎 さんのDBGridの特定の行の背景色を変える に対するコメントです
#130 の処理をそのままコンポーネントにしてみました。
^^^^^^^^
レコードポインタのある行の背景色を特定の色に代えるコンポーネントです。
フォーカスを失うと、ふつうの DBGrid の表示になります。
//*----------* ここから
unit SeDBGridTA;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, DBGrids;
type
TSeDBGridTA = class(TDBGrid)
private
{ Private 宣言 }
FFocusOn: Boolean;
protected
{ Protected 宣言 }
procedure DrawColumnCell( const Rect: TRect;
DataCol: Integer; Column: TColumn;
State: TGridDrawState); Override;
procedure DoEnter; Override;
procedure DoExit; Override;
public
{ Public 宣言 }
published
{ Published 宣言 }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('MyComp', [TSeDBGridTA]);
end;
procedure TSeDBGridTA.DrawColumnCell( const Rect: TRect; {※1}
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
GCoord : TGridCoord;
begin
GCoord := MouseCoord(Rect.Left, Rect.Top);
If Row = GCoord.Y Then Begin // レコードポインタのある行なら
if FFocusOn = True then begin // フォーカスのある DBGrid なら
if gdFocused in State then begin // カーソルのあるカラムなら
Canvas.Brush.Color := clYellow;
Canvas.Font.Color := clBlue;
end else begin // カーソルがないカラムなら
Canvas.Brush.Color := clAqua;
Canvas.Font.Color := clBlue;
end;
end else begin // フォーカスのない DBGrid なら規定の色
Canvas.Brush.Color := clWindow;
Canvas.Font.Color := clBlack;
end;
DefaultDrawColumnCell(Rect, DataCol, Column, State);
if gdFocused in State then Canvas.DrawFocusRect(Rect);
End;
end;
procedure TSeDBGridTA.DoEnter;
begin
Inherited DoEnter;
// フォーカスを得ました
FFocusOn := True;
Font.Size := Font.Size + 1;
Font.Size := Font.Size - 1;
end;
procedure TSeDBGridTA.DoExit;
begin
Inherited DoExit;
// フォーカスを失いました
FFocusOn := False;
Font.Size := Font.Size + 1;
Font.Size := Font.Size - 1;
end;
end.
//*----------* ここまで
2つ目の MyComponent ですが、出来てしまうと、意外と簡単だな
という感じです。
procedure TSeDBGridTA.DrawColumnCell( const Rect: TRect; {※1}
の TSeDBGridTA. がポイントです。
このように記入する(仕方がわかる)とウソのようにエラーが引いていきました。
会議室に質問しながら、1週間くらいかかるかなと思っていたら、
1日で出来てしまいました(TSeDBGridTA.のおかげです)。
^^^^^^^^^^^(コンポーネント名です、たぶん)
#130 と並べて眺めてみて、コンポーネントの作り方のヒントになればと思い
(うまくいったのがうれしくなり)アップさせていただきました。
お願い:アップのご褒美 !(>_<)☆\(--;バギッ として、
ちょっとでもはずれているところがありましたらご指摘ください。
特に H10.10.17 のコンポーネントセミナーの講師の方々は
宴会の時までうるさくつきまとわれたくなかったら
よろしくお願いいたします。(^^)コレハ、オドシデハアリマセン!
H10.10.5 マ太郎
あくまでもテスト用(勉強用)のコンポーネントです。
エラーが出たら御免!
これから、このコンポーネントを拡張してゆきます。
ご期待ください。!(>_<)バキッ☆\(--;)ダレモキタイシテナイ!
Original document by マ太郎 氏 ID:(VYC12077)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|