Q&A

  • DBGRID위로 마우스가 위치하면 그 행(ROW)의 색깔을 ...
안녕하세요?



DBGRID위로 마우스가 위치하면 그 행(ROW)의 색깔을 빨강색으로

바꾸려고 하는데 어떻게 해야 합니까?



제발 알려주세요....

그럼 즐거운 하루 보내시길 바라며...



3  COMMENTS
  • Profile
    최용일 2000.07.25 04:23
    안녕하세요. 최용일입니다.



    설명만 해드릴께요. 코딩으로 구현하세요...



    마우스가 컨트롤(TDBGrid)내로 들어오면 OnMouseMove이벤트가 발생합니다. 이 이벤트의



    파라매터로 들어오는 X, Y값을 이용해서 MouseCoord메소드를 호출하면 셀의 Row, Column



    인덱스를 얻을수 있습니다. 이 Row, Column인덱스를 변수를 잡아서 저장해놓으시고,



    OnDrawDataCell이벤트에서 이 셀이 마우스가 위치한 곳의 셀인가를 판단해서 색깔을



    넣어 그려주시면 됩니다. 아래는 스트링그리드 예제인데 참고하세요...



    TForm1 = class(TForm)

    StringGrid1: TStringGrid;

    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

    Rect: TRect; State: TGridDrawState);

    procedure StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,

    Y: Integer);

    private

    GridCoord: TGridCoord;

    end;



    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

    Rect: TRect; State: TGridDrawState);

    begin

    if (ACol = GridCoord.X) and (ARow = GridCoord.Y) then

    begin

    TStringGrid(Sender).Canvas.Brush.Color := clYellow; // 셀의 바탕을 노란색으로...

    TStringGrid(Sender).Canvas.Font.Color := clRed; // 셀의 글자색을 빨간색으로...

    TStringGrid(Sender).Canvas.FillRect(Rect);

    TStringGrid(Sender).Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, StringGrid1.Cells[ACol, ARow]);

    end

    else

    inherited;

    end;



    procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState;

    X, Y: Integer);

    begin

    GridCoord := StringGrid1.MouseCoord(X, Y);

    if GridCoord.X >= 0 then

    StringGrid1.Col := GridCoord.X;

    if GridCoord.Y >= 0 then

    StringGrid1.Row := GridCoord.Y;

    end;



    ^^ 항상 즐코하세요.



    나원용 wrote:

    > 안녕하세요?

    >

    > DBGRID위로 마우스가 위치하면 그 행(ROW)의 색깔을 빨강색으로

    > 바꾸려고 하는데 어떻게 해야 합니까?

    >

    > 제발 알려주세요....

    > 그럼 즐거운 하루 보내시길 바라며...

    >

  • Profile
    어린왕자 2000.07.26 01:20
    용일님..질문이요~

    DBGrid두 Row,Column으로 접근가능한가용? 가능하면..방법좀~~~

    StringGrid처럼요???





    최용일 wrote:

    > 안녕하세요. 최용일입니다.

    >

    > 설명만 해드릴께요. 코딩으로 구현하세요...

    >

    > 마우스가 컨트롤(TDBGrid)내로 들어오면 OnMouseMove이벤트가 발생합니다. 이 이벤트의

    >

    > 파라매터로 들어오는 X, Y값을 이용해서 MouseCoord메소드를 호출하면 셀의 Row, Column

    >

    > 인덱스를 얻을수 있습니다. 이 Row, Column인덱스를 변수를 잡아서 저장해놓으시고,

    >

    > OnDrawDataCell이벤트에서 이 셀이 마우스가 위치한 곳의 셀인가를 판단해서 색깔을

    >

    > 넣어 그려주시면 됩니다. 아래는 스트링그리드 예제인데 참고하세요...

    >

    > TForm1 = class(TForm)

    > StringGrid1: TStringGrid;

    > procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

    > Rect: TRect; State: TGridDrawState);

    > procedure StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,

    > Y: Integer);

    > private

    > GridCoord: TGridCoord;

    > end;

    >

    > procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

    > Rect: TRect; State: TGridDrawState);

    > begin

    > if (ACol = GridCoord.X) and (ARow = GridCoord.Y) then

    > begin

    > TStringGrid(Sender).Canvas.Brush.Color := clYellow; // 셀의 바탕을 노란색으로...

    > TStringGrid(Sender).Canvas.Font.Color := clRed; // 셀의 글자색을 빨간색으로...

    > TStringGrid(Sender).Canvas.FillRect(Rect);

    > TStringGrid(Sender).Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, StringGrid1.Cells[ACol, ARow]);

    > end

    > else

    > inherited;

    > end;

    >

    > procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState;

    > X, Y: Integer);

    > begin

    > GridCoord := StringGrid1.MouseCoord(X, Y);

    > if GridCoord.X >= 0 then

    > StringGrid1.Col := GridCoord.X;

    > if GridCoord.Y >= 0 then

    > StringGrid1.Row := GridCoord.Y;

    > end;

    >

    > ^^ 항상 즐코하세요.

    >

    > 나원용 wrote:

    > > 안녕하세요?

    > >

    > > DBGRID위로 마우스가 위치하면 그 행(ROW)의 색깔을 빨강색으로

    > > 바꾸려고 하는데 어떻게 해야 합니까?

    > >

    > > 제발 알려주세요....

    > > 그럼 즐거운 하루 보내시길 바라며...

    > >

  • Profile
    최용일 2000.07.26 06:04
    안녕하세요. 최용일입니다.



    TDBGrid에서 TStringGrid처럼 Row, Column으로 직접 접근하는것은 별루 좋은 방법이



    아네요.. TDBGrid는 가상뷰이기 때문에 데이타가 들어있는 테이블같은것을 이용해서



    접근하는 것이 좋아요...



    ^^ 항상 즐코하세요.



    어린왕자 wrote:

    > 용일님..질문이요~

    > DBGrid두 Row,Column으로 접근가능한가용? 가능하면..방법좀~~~

    > StringGrid처럼요???

    >

    >

    > 최용일 wrote:

    > > 안녕하세요. 최용일입니다.

    > >

    > > 설명만 해드릴께요. 코딩으로 구현하세요...

    > >

    > > 마우스가 컨트롤(TDBGrid)내로 들어오면 OnMouseMove이벤트가 발생합니다. 이 이벤트의

    > >

    > > 파라매터로 들어오는 X, Y값을 이용해서 MouseCoord메소드를 호출하면 셀의 Row, Column

    > >

    > > 인덱스를 얻을수 있습니다. 이 Row, Column인덱스를 변수를 잡아서 저장해놓으시고,

    > >

    > > OnDrawDataCell이벤트에서 이 셀이 마우스가 위치한 곳의 셀인가를 판단해서 색깔을

    > >

    > > 넣어 그려주시면 됩니다. 아래는 스트링그리드 예제인데 참고하세요...

    > >

    > > TForm1 = class(TForm)

    > > StringGrid1: TStringGrid;

    > > procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

    > > Rect: TRect; State: TGridDrawState);

    > > procedure StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,

    > > Y: Integer);

    > > private

    > > GridCoord: TGridCoord;

    > > end;

    > >

    > > procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

    > > Rect: TRect; State: TGridDrawState);

    > > begin

    > > if (ACol = GridCoord.X) and (ARow = GridCoord.Y) then

    > > begin

    > > TStringGrid(Sender).Canvas.Brush.Color := clYellow; // 셀의 바탕을 노란색으로...

    > > TStringGrid(Sender).Canvas.Font.Color := clRed; // 셀의 글자색을 빨간색으로...

    > > TStringGrid(Sender).Canvas.FillRect(Rect);

    > > TStringGrid(Sender).Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, StringGrid1.Cells[ACol, ARow]);

    > > end

    > > else

    > > inherited;

    > > end;

    > >

    > > procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState;

    > > X, Y: Integer);

    > > begin

    > > GridCoord := StringGrid1.MouseCoord(X, Y);

    > > if GridCoord.X >= 0 then

    > > StringGrid1.Col := GridCoord.X;

    > > if GridCoord.Y >= 0 then

    > > StringGrid1.Row := GridCoord.Y;

    > > end;

    > >

    > > ^^ 항상 즐코하세요.

    > >

    > > 나원용 wrote:

    > > > 안녕하세요?

    > > >

    > > > DBGRID위로 마우스가 위치하면 그 행(ROW)의 색깔을 빨강색으로

    > > > 바꾸려고 하는데 어떻게 해야 합니까?

    > > >

    > > > 제발 알려주세요....

    > > > 그럼 즐거운 하루 보내시길 바라며...

    > > >