Q&A

  • 스트링그리드 사용시 특정셀에 포커스를 주려면?
고수님들의 도움을 요청합니다.
다름이 아니라,,,
특정셀에 입력받은 값이 일정범위를 초과하면 에러메세지를 뿌려주고,
다시 그 위치로 포커스를 이동하고 싶은데요,,,(입력을 다시 받게끔 하려구
요,,)  잘 안되네요.. 고수님들 꼭 가르쳐주세요~~ 기다리고 있겠습니다.

이벤트는 아래와 같이 OnSelectCell 이벤트에서 구현하였습니다!!!
OnSelectCell이벤트에서 구현이 된거라 당연히 키보드를 치면 다음 셀로
이동하는게 당연하겠죠.. 그래서 이 포커스를 어떻게 제어해야하는지,,,
꼭!! 꼭!! 가르쳐주세요......

procedure TFrmJumSu.sGridSelectCell(Sender: TObject; Col, Row: Integer;
  var CanSelect: Boolean);
var
  Mid_Cnt : Integer;
begin
  Mid_Cnt := 100;   // 값의 범위

  with sGrid do
  begin
       if StrToInt(Cells[3,Row]) > Mid_Cnt then
       begin
          Application.MessageBox('점수초과!! ','사용자안내',
          MB_OK or MB_ICONINFORMATION);
          Cells[Col,Row] := '';
          //Col := 3;
          //Row := 1;
          Exit;
        end;
  end;

end;
3  COMMENTS
  • Profile
    윤정식 2003.02.25 02:31
    스트링그리드에 입력시 사용자는 Enter키를 입력하고 다음으로 넘어가는것이
    보통이기 때문에 OnKeyPress에 넣었습니다..
    OnSelectCell에서도 가능하니 응용하시기 바랍니다..

    procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
    begin
       If Key = #13 Then
       Begin
          if StrToInt(StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row]) > 10 then
          begin
            StringGrid1.Col := StringGrid1.Col + 1;
            StringGrid1.SetFocus;
            StringGrid1.EditorMode := True;
          end
          else
          begin
            StringGrid1.Col := StringGrid1.Col - 1;
            StringGrid1.SetFocus;
            StringGrid1.EditorMode := True;
          end;
          Key := #0;
       End;

    end;
  • Profile
    이말자 2003.02.25 03:41
    정말정말정말 감사드립니다.
    근데요... 사용자들이 엔터키를 사용하지 않고 탭키나 화살표키로 셀을
    이동할때는 어떻게 제어를 해야하나요.. 엔터키를 쳤을때는 정확히 구현이
    되는데, 탭키나 화살표키로 이동시에는 제어가 안되네요,,,  
    엔터키라도 구현된 것에 큰 감사드리고요,,(꾸우벅)
    엔터키외에 키들 제어도 좀 가르쳐 주시면 감사드리겠습니다.
    워낙 사용자들이 여러사람들이라서, 여러가지 경우의 수를 다 처리해두는 게
    좋을 것 같아서요...

    If (Key = #13) Then //엔터키
    If (Key = #9) Then //탭키(?)
    If (Key = #38) Then //윗화살표
    If (Key = #40) Then //아래화살표

    이렇게 구현을 해도 어떻게 된건지,,, 엔터키외는 아무키도 작동을
    하지 않네요.. 한번 더 부탁드립니다... 고수님!!!!

    암튼 정말 정말 감사드립니다.....
    오늘은 보람찬 하루가 되었습니다... 감사합니다...
  • Profile
    윤정식 2003.02.25 23:44
    당연히 탭키(#9)등은 듣지 않습니다..
    Grids.pas 내용을 보시면 탭키(#9)등에 대해 처리하지 않도록 되어있습니다...
    이와 같은경우 Grids.pas를 상속받아 컴포넌트를 생성하던가
    아니면 약간의 꽁수가 필요하죠...
    KeyPress 이벤트에서 탭키(#9)등 원하는 키가 들어올경우
    KeyDown 이벤트를 발생시켜 처리하는 방법을 사용했었습니다...ㅡㅡ;;
    혹시 다른 방법을 아시는 분이 계시다면 답글좀 달아주시죠 ...
    즐코~