Q&A

  • StringGrid 더블클릭시 바뀐 글자색 유지하기 ?
안녕하세요
스트링그리드에서 더블클릭하면 글자색을 바뀌게 하려고 합니다.
그래서, 다음과 같이 했더니 글자색은 바뀌는데, 마우스로 다른 셀을 클릭하면 색이
원래의 색으로 돌아옵니다.
예) 3번째 행을 마우스로 더블 클릭하면 그 행(3번째 행)이 파란 글씨로 바뀝니다.
   그런데, 1번째 행을 마우스로 클릭하거나 더블클릭하면 원래색(검정색)으로
   돌아옵니다.

그냥 바뀐 색으로 남아 있을 수는 없나요 ?

procedure TForm1.StringGrid1DblClick(Sender: TObject);
var
Rect : TRect;
RowNumber, ColNumber : Integer;
begin
RowNumber := StringGrid1.Row;
with StringGrid1 do
  begin
     Rect := StringGrid1.CellRect(0,RowNumber);
     Canvas.FillRect(Rect);
     Canvas.Font.Color := clBlue;
     canvas.TextRect(Rect, Rect.Left, Rect.Top, cells[0,RowNumber]);
  end;
end;
1  COMMENTS
  • Profile
    김용일 2002.09.04 19:07
    님께서 쓰신 방법은 문제가 있군요.
    더블클릭보다는 DrawCell 이벤트를 써야 마땅합니다.
    더블클릭은 설정값을 체크하거나 해제하는 용도로 써야 하겠군요.

    다음의 내용을 보시고 응용해 보십시오.

    // 그리드에 설정값을 둘 숨겨진 컬럼을 둔다
    with StringGrid1 do
    begin
        ColCount := 3;
         ColWidths[2] := -1;
                :
    end;

    procedure TForm1.StringGrid1DblClick(...);
    begin
        with StringGrid1 do
        begin
            if Cells[2,Row] = 'Y' then
                 Cells[2,Row] := 'N'
            else
                 Cells[2,Row] := 'Y';
        end;
    end;

    procedure TForm1.StringGrid1DrawCell(...);
    begin
        with StringGrid1 do
        begin
             if (ARow > FixedRows) and (Cells[2,ARow] = 'Y') then
             begin
                 Canvas.Brush.Color := clBlue;   // 배경색을 바꿀때 사용
                 Canvas.FillRect(Rect);
                 Canvas.Font.Color := clWhite;    // 글자색을 바꿀때 사용
                 Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol,ARow]);
            end;
        end;
    end;

    이렇게 하시면 더블클릭에 의해 토글되어 2번째 Cell의 값이 'Y' 이면 청색바탕에 흰색글씨가 표시되고, 'N' 이면 정상적인 색깔로 표시됩니다.
    대개의 색깔 변화를 주는 프로그램은 이렇게 구현됩니다.
    참고하시기를...

    • 이정택
    • 2002.09.04 19:51
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 머슴
      2002.09.04 20:09
        제가 알기로는  Query컴퍼넌트는 Refresh 메서드를 지원을 안하는 것으로 &nb...
    • 김흥식
      2002.09.04 20:14
      도움이 될런지... 저는 이렇게 합니다. Query.Active := False; Query.Active := True; 그럼..
    • 김상수
    • 2002.09.04 19:41
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김영남
      2002.09.04 19:52
      델파이에두 물론 문자열 위치 반환이나 문자열을 자르는 함수가 있지요... 문자열 자르기 _st := '12...
    • 김상수
      2002.09.04 20:13
    • 머슴
      2002.09.04 20:00
      스트링 그리드에.. 체크필드가 있고 이어서 그 화일의 경로가 있을 경우에 해당됩니다.. 이런 경우에는 ...
    • 김영남
      2002.09.04 20:05
      델파이에서 호스트 변수 사용을 말씀하시는건지? 그럼... parambyname('Abc').asstring := '2002/0...
    • sunny
    • 2002.09.04 17:20
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김용일
      2002.09.04 19:07
      님께서 쓰신 방법은 문제가 있군요. 더블클릭보다는 DrawCell 이벤트를 써야 마땅합니다. 더블클릭은 설...
    • 박정찬
    • 2002.09.04 09:50
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.09.04 20:55
      안녕하세요. 최용일입니다. 패키지파일에서 *.dcu파일빼시고 *.dcu파일들은 패스가 지정된 Lib폴더 같은...
    • 용환종
    • 2002.09.04 07:34
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2002.09.04 20:56
      hsr///////////////////////////////////////////////////////////// 컴포넌트로 되어있는것을 풀어서 정...
    • 김주경
    • 2002.09.04 07:04
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 미소나눔
      2002.09.04 18:43
      연결 컴포넌트를 어떤것을 쓰는지 잘모르지만 만약 DCOM 을 이용해서 DataSnapd을 이용한다면 클라이언트...
    • 신봉석
    • 2002.09.04 04:48
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2002.09.04 07:47
      hsr//////////////////////////////////////////////////// TStream과 TStrings으로 바꾼후 선택하는건데...
    • 이중철
      2002.09.04 05:49
      일단 랜덤하게 parent를 찾는다면 방법이 기존의 루프 밖에 없고요. 입력 방법이 어떤것이냐에 따라 입...
    • 한원희
      2002.09.04 07:34
      안녕하세요. 한원희입니다. 음... 아래와 같은 방식이라면, 하나의 노드를 추가하는 것이라면 상관이 없...
    • 짱아
    • 2002.09.04 04:20
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 김용일
      2002.09.04 19:13
      procedure TForm1.Panel1DblClick(...); begin     with StringGrid1 do  &nb...
    • 동키호테
      2002.09.04 04:33
      StringGrid1.Cells[Col_num][Row_Num] := 'C'; 이렇게 하면 될텐데.. Panel1의 더블클릭쪽에다만 이것...
    • 짱아
      2002.09.04 19:13
      ㅡㅡ; 관심 가져 주셔셔 정말 감사 합니다.. 해결 했답니당.. ^^*
    • 최용일
      2002.09.04 05:22
      안녕하세요. 최용일입니다. 걍 메세지 보내시면 됩니다... procedure InsertString(Wnd: THandle; co...
    • 최용일
      2002.09.04 07:50
      안녕하세요. 최용일입니다. IcsDel50이라는 이름을 가진 패키지가 설치되어 있는가 다시한번 확인해보세...
    • 최용일
      2002.09.04 05:25
      안녕하세요. 최용일입니다. 메타파일은 확실히 잘 될지 모르겠구요... TCanvas.CopyRect로 읽어오시...
    • 최용일
      2002.09.04 03:14
      안녕하세요. 최용일입니다. 퀵리포트 홈페이지에 가시면 있습니다. http://www.qusoft.com/ 이전...
    • 궁금이
      2002.09.04 16:53
      먼저 답변을 주신점 정말 감사합니다. http://www.qusoft.com/ 사이트는 잘 알고 있어요. 현재 Delph...
    • 최용일
      2002.09.04 18:58
      안녕하세요. 최용일입니다. 델파이에서는 같은 이름의 컴포넌트를 등록할 수 없어요... 에러내용을 보면...
    • 궁금이
      2002.09.05 20:36
      감사,,,감사,, 감사,, 혹시  Delphi3 QuickReport 3.08 가지고 있으면 좀 부탁드립니다... ...
    • 델사랑
    • 2002.09.04 02:14
    • 0 COMMENTS
    • /
    • 0 LIKES
    • KDDG_ZZOM
      2002.09.04 02:10
      헐~~~ 델파이로만은 힘들것같은데... GIS하고 같이 움직여야 될것같네요... 4번이라면 캐드의 레이어 식...
    • 윤여훈
      2002.09.04 03:37
      안녕하십니까? 답변 감사합니다. 하지만 워낙 초보인지라... 맵오브젝트 및 CAD의 레이어에 관해서 좀더 ...
    • KDDG_ZZOM
      2002.09.04 04:07
      저도 잘몰라요... 우선 캐드랜드가 맞을거예요... 거기서 데모버젼을 받아서 한번해보세요... 서버구성...
    • 김상수
    • 2002.09.04 01:42
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 김영남
      2002.09.04 20:10
      윈도우즈의 데이터 타입형이  'yy-mm-dd'로 되어 있는게 아닌지요? 제어판의 국가별옵션에......
    • 김상수
      2002.09.05 00:18
    • 이중철
      2002.09.04 06:08
      밑져야 본전 이와같이 해보세요.. 심심하시면(잘안된다 싶으면) Typecasting 해보시고요. 델파이5.0이나 4...
    • 김상수
      2002.09.04 18:43
    • 고지범
      2002.09.04 02:13
      안녕하십니까? 지나가던 얼큰입다. TAction 의 경우 해당 액션이 Sender로 올라옵니다. 그리고 폼의 속성...
    • KDDG_ZZOM
      2002.09.04 01:52
      var   vv_i: Integer; begin   with TWinControl(Panel1) do   begin ...