Q&A

  • StringGrid에 Mask 기능 구현 어캐 해영?
스트링그리드에 어떤셀에 이기능을 구현 하고 싶습니다.

예를 들어

날짜를

2001-01-01 라는 식으로 "-"을 넣는다는지.

임의의 코드

ABC-_____-__ 식으로 "ABC"문자열과 "-"을 스트링그리드 특정셀에다 위치 하고 싶습니다.

그래서 입력하면..

쉽게 말해서 스트링 그리드에 MASK 구현을 하고 싶습니다.

어떻게 하는지 도와 주십시오.

2  COMMENTS
  • Profile
    늘초보 2001.10.18 00:12
    procedure Tform1.StringGrid1GetEditMask(Sender: TObject; ACol,

    ARow: Integer; var Value: String);

    var

    i : integer;

    begin

    for i := 1 to gs_StgRowCnt do

    begin

    if ACol = '' then

    begin

    Value := '!ABC-000000-00;1';

    end;

    end;

    end;

    OnGetEditMask이벤트에 다음과 같이 적으니깐 되더군요.

    여기서 gs_StgRowCnt는 전역 변수로서 다른곳에서 스트링그리드의 rowcount를 받은값임다.



    마스크 기능은 완벽하게 되는데...

    스트링그리드가 포함된 폼이 뜨면 바로 나와야 하는데...

    폼이 생성되면 아무것도 없다가 해당 Cell(즉 1, i계열)을 더블 클릭 하면

    마스트 형식의 구문이 나오더군요.

    이넘을 첨 폼이 생성되자 마자 마스트된 셀을 볼수는 없을까요..

    조언좀 부탁 드립니다.





    늘초보 wrote:

    > 스트링그리드에 어떤셀에 이기능을 구현 하고 싶습니다.

    > 예를 들어

    > 날짜를

    > 2001-01-01 라는 식으로 "-"을 넣는다는지.

    > 임의의 코드

    > ABC-_____-__ 식으로 "ABC"문자열과 "-"을 스트링그리드 특정셀에다 위치 하고 싶습니다.

    > 그래서 입력하면..

    > 쉽게 말해서 스트링 그리드에 MASK 구현을 하고 싶습니다.

    > 어떻게 하는지 도와 주십시오.

  • Profile
    정계훈 2001.10.18 00:29
    안녕하세요...



    GetEditMask 말고 DrawCell에 직접 포맷을 정의 하심이 어떨런지요...아래와 같이 말입나다.





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

    Rect: TRect; State: TGridDrawState);

    var

    F : Extended;

    DataInString : string;

    ErrCode : integer;

    begin

    with TStringGrid( Sender).Canvas do

    begin

    DataInString := TStringGrid( Sender).Cells[ ACol, ARow];

    Val( DataInString, F, ErrCode);



    if ErrCode = 0 then

    begin

    DataInString := FormatFloat( '####-##-##', F);

    end;



    FillRect( Rect);

    TextRect( Rect, Rect.Right - TextWidth( DataInString) - 3, Rect.Top + 4, DataInString);

    Pen.Width := 1;

    end

    end;





    그럼 수고하세요...



    늘초보 wrote:

    > procedure Tform1.StringGrid1GetEditMask(Sender: TObject; ACol,

    > ARow: Integer; var Value: String);

    > var

    > i : integer;

    > begin

    > for i := 1 to gs_StgRowCnt do

    > begin

    > if ACol = '' then

    > begin

    > Value := '!ABC-000000-00;1';

    > end;

    > end;

    > end;

    > OnGetEditMask이벤트에 다음과 같이 적으니깐 되더군요.

    > 여기서 gs_StgRowCnt는 전역 변수로서 다른곳에서 스트링그리드의 rowcount를 받은값임다.

    >

    > 마스크 기능은 완벽하게 되는데...

    > 스트링그리드가 포함된 폼이 뜨면 바로 나와야 하는데...

    > 폼이 생성되면 아무것도 없다가 해당 Cell(즉 1, i계열)을 더블 클릭 하면

    > 마스트 형식의 구문이 나오더군요.

    > 이넘을 첨 폼이 생성되자 마자 마스트된 셀을 볼수는 없을까요..

    > 조언좀 부탁 드립니다.

    >

    >

    > 늘초보 wrote:

    > > 스트링그리드에 어떤셀에 이기능을 구현 하고 싶습니다.

    > > 예를 들어

    > > 날짜를

    > > 2001-01-01 라는 식으로 "-"을 넣는다는지.

    > > 임의의 코드

    > > ABC-_____-__ 식으로 "ABC"문자열과 "-"을 스트링그리드 특정셀에다 위치 하고 싶습니다.

    > > 그래서 입력하면..

    > > 쉽게 말해서 스트링 그리드에 MASK 구현을 하고 싶습니다.

    > > 어떻게 하는지 도와 주십시오.