안녕하세요.
첫번째...
form에 위치하는 버튼들의 색은 모두 회색인데 마우스 화살표가 버튼에 놓이게 되면 버튼의 색이 변하게 하고 싶습니다.
마우스 화살표가 다음 버튼으로 이동하면 이전 버튼의 색은 원상태로 되돌아 오고 말입니다.
어떻게 하면 될까요?
두번째...
form위에 테이블을 놓고
테이블 예)
이름 주소 연락번호
@@@ 000000 111-1111
*** $$$$$$ 222-1111
에디트에 "이름" 아래에 있는 '@@@'라는 이름을 적게되면 테이블 왼쪽에 있는 삼각형(화살표 비슷)이 해당 데이터로 이동하게 했습니다.
여기서 삼각형이 위치하는 줄, 데이터들의 글자 색이 변하게 하고 싶습니다.
어떻게 하면 되지요?
> 안녕하세요.
>
> 첫번째...
> form에 위치하는 버튼들의 색은 모두 회색인데 마우스 화살표가 버튼에 놓이게 되면 버튼의 색이 변하게 하고 싶습니다.
> 마우스 화살표가 다음 버튼으로 이동하면 이전 버튼의 색은 원상태로 되돌아 오고 말입니다.
> 어떻게 하면 될까요?
>
> 두번째...
> form위에 테이블을 놓고
>
> 테이블 예)
> 이름 주소 연락번호
> @@@ 000000 111-1111
> *** $$$$$$ 222-1111
>
> 에디트에 "이름" 아래에 있는 '@@@'라는 이름을 적게되면 테이블 왼쪽에 있는 삼각형(화살표 비슷)이 해당 데이터로 이동하게 했습니다.
> 여기서 삼각형이 위치하는 줄, 데이터들의 글자 색이 변하게 하고 싶습니다.
> 어떻게 하면 되지요?
비슷한 팁이 있어서 올립니다(변경해서 사용하세요)
// 첫번째...
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
CheckBox1: TCheckBox;
private
{ Private declarations }
procedure WndProc(var Message: TMessage); override;
public
{ Public declarations }
procedure ChangeColor(Sender: TObject; Msg: Integer);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.WndProc(var Message: TMessage);
begin
// 콤포넌트에 마우스가 있으면(over) 폰트의 색상을 바꾼다
if Message.LParam = Longint(Label1) then
ChangeColor(Label1, Message.Msg);
if Message.LParam = Longint(Label2) then
ChangeColor(Label2, Message.Msg);
if Message.LParam = Longint(Label3) then
ChangeColor(Label3, Message.Msg);
if Message.LParam = Longint(CheckBox1) then
ChangeColor(CheckBox1, Message.Msg);
inherited WndProc(Message);
end;
procedure TForm1.ChangeColor(Sender: TObject; Msg: Integer);
Begin
// 마우스가 Label위에 있을때
if Sender is TLabel then
begin
if (Msg = CM_MOUSELEAVE) then
(Sender as TLabel).Font.Color := clWindowText; // 마우스가 떠날때
if (Msg = CM_MOUSEENTER) then
(Sender as TLabel).Font.Color := clBlue; // 마우스가 들어올때
end;
// 마우스가 CheckBox위에 있을때
if Sender is TCheckBox then
begin
if (Msg = CM_MOUSELEAVE) then
(Sender as TCheckBox).Font.Color := clWindowText;
if (Msg = CM_MOUSEENTER) then
(Sender as TCheckBox).Font.Color := clRed;
end;
end;
end.
// 두번째...
TDBGrid의 OnDrawColumnCell을 이용하면 편리합니다.
몇가지만 응용하면 지정한 셀에 이미지를 그려 체크표시등도
가능합니다.
아래의 예제는 특정셀을 노란색바탕에 검은 글씨로 만듭니다.
State를 검사하는 이유는 현재 선택된 셀은 그려선 안되기
때문이지요.. 또한 Boolean값으로 저장되어 있는 컬럼들,
예를 들자면 성별같은 것들을 '남','여'로 표시할때도
이 Event를 사용하지요.
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
with TDBGrid(Sender).Canvas do begin
if (Column.FieldName = 'FILEDNAME') and (State = []) then begin
Brush.Color := clYellow;
Font.Color := clBlack;
end
else begin
Brush.Color := clWindow;
Font.Color := clWindowText;
end;
if (gdFocused in State) or (gdSelected in State) then begin
Brush.Color := clHighlight;
Font.Color := clHighlightText;
end;
FillRect(Rect);
TextOut(Rect.Left+2,Rect.Top+2,Column.Field.AsString);
Brush.Style := bsSolid;
Brush.Color := clWindow;
end;
end;