Q&A

  • DBGrid에서 현재수정중인 셀값을 알아낼 수 없을까요?
DBGrid의 셀에서 입력중에있는 값을

알 수 있는 메소드나 함수가 있을까요?

가령 숫자를 입력한다면 현재까지 입력진행중인 그 숫자를 가지고

연산을 해서 어떤 변수에 넣고 처리해야할 필요가 있거든요...

다른 셀로 이동하지않고 현재 입력중인 그 상태에서...

예를들면 다음과 같이 에디트박스에서 키를 누를때 마다

에디트박스에 현재 입력되어있는 값을 출력되게 할 수 있듯이말이죠..



procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

ShowMessage(Edit1.text);

end;



이것과 같은짓을 디비그리드 셀 입력중에도 가능할 수 있나요?

안되면 일찌기 포기하게요... ^^

스트링 그리드로는 가능한 일이 디비그리드에서는 난감하군요..

좋은 하루되세요...



3  COMMENTS
  • Profile
    최혜룡 2001.05.14 11:44
    델파이가 없어서 글로만 답변합니다.

    그건 기능은 DBGrid가 제공하지 않는것 같군요

    코딩으로 처리한다면

    입력값을 모으는 char 배열 변수와 해당배열변수의 인덱스 변수를 만든후

    KeyPress이벤트에서 입력값을 모으는거죠

    사용자가 "abc"라고 입력하면

    배열변수[1] = 'a'

    배열변수[2] = 'b'

    배열변수[3] = 'c'가 저장되고

    인덱스에는 3이 저장 (최종입력한 Char가 배열로 들어가기 위한 배열인덱스겠죠)

    입력값이 필요로 할 경우에는 배열값을 사용하는 코딩을 추가하면 될거구요

    참고로

    사용자가 셀내에서 커서이동을 할 경우를 대비하여 인덱스를 적절히 조정해야합니다.

    좌우 이동이나 BackSpace입력시 해당익덱스로 포인트를 맞춰야 하니깐.

    그리고 셀이동시에도 해당변수를 초기화시키는 부분이 있어야 겠군요



    문제점은

    한글을 입력할 경우는 입력값을 모으는게 쉽지가 않다는것과

    셀내에서 마우스로 이동할 경우 인덱스를 찾는게 어렵다는 단점이 있습니다만

    그외의 경우에는 처리가능하겠군요





    초보 wrote:

    > DBGrid의 셀에서 입력중에있는 값을

    > 알 수 있는 메소드나 함수가 있을까요?

    > 가령 숫자를 입력한다면 현재까지 입력진행중인 그 숫자를 가지고

    > 연산을 해서 어떤 변수에 넣고 처리해야할 필요가 있거든요...

    > 다른 셀로 이동하지않고 현재 입력중인 그 상태에서...

    > 예를들면 다음과 같이 에디트박스에서 키를 누를때 마다

    > 에디트박스에 현재 입력되어있는 값을 출력되게 할 수 있듯이말이죠..

    >

    > procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

    > begin

    > ShowMessage(Edit1.text);

    > end;

    >

    > 이것과 같은짓을 디비그리드 셀 입력중에도 가능할 수 있나요?

    > 안되면 일찌기 포기하게요... ^^

    > 스트링 그리드로는 가능한 일이 디비그리드에서는 난감하군요..

    > 좋은 하루되세요...

    >

  • Profile
    초보 2001.05.14 14:39
    혜룡님 늘 친절한 답변을 주시네요.. "" 감솨..



    제가 고민했던점이 바로 그겁니다.. 한글과 마우스...

    저는 혜룡님과 비슷한 방법을 사용했는데요

    스트링변수하나를 전역변수로 잡고 키프레스에서 입력한값을 스트링변수에 더해서 대입하고

    Del키나 좌우화살표를 막고 수정시 적용하기위해서 백스페이스는 살려두고

    한번 백할때마다 스트링변수 마지막 문자 삭제하는 방식으로 해봤지만..

    (이것도 사용자편의에 역행하는것 같아 찜찜하고..)

    그런데 사용자가 마우스포인터를 어디로 위치시킬지 또한 알수 없어서

    혹시나 싶어 셀에도 SelectAll 메소드 같은게 가능할까 싶어 찾아서 해결하려 했지만

    그것도 여의치 않고...

    혹 한글과 마우스 문제를 해결한다 해도 왠지 깔끔하지 못한거 같아 굳이 이짓을 해야하나 싶어서

    결론은 포기! -_- 속편하게 TDBGrid는 애초에 안되나 부다.. 라고 생각하기로 했습니다.

    암튼 해룡님 제 질문에 관심기울여주셔서 감사합니다... 행복하세요.. 위에 창영님두요.. ^^











    최혜룡 wrote:

    > 델파이가 없어서 글로만 답변합니다.

    > 그건 기능은 DBGrid가 제공하지 않는것 같군요

    > 코딩으로 처리한다면

    > 입력값을 모으는 char 배열 변수와 해당배열변수의 인덱스 변수를 만든후

    > KeyPress이벤트에서 입력값을 모으는거죠

    > 사용자가 "abc"라고 입력하면

    > 배열변수[1] = 'a'

    > 배열변수[2] = 'b'

    > 배열변수[3] = 'c'가 저장되고

    > 인덱스에는 3이 저장 (최종입력한 Char가 배열로 들어가기 위한 배열인덱스겠죠)

    > 입력값이 필요로 할 경우에는 배열값을 사용하는 코딩을 추가하면 될거구요

    > 참고로

    > 사용자가 셀내에서 커서이동을 할 경우를 대비하여 인덱스를 적절히 조정해야합니다.

    > 좌우 이동이나 BackSpace입력시 해당익덱스로 포인트를 맞춰야 하니깐.

    > 그리고 셀이동시에도 해당변수를 초기화시키는 부분이 있어야 겠군요

    >

    > 문제점은

    > 한글을 입력할 경우는 입력값을 모으는게 쉽지가 않다는것과

    > 셀내에서 마우스로 이동할 경우 인덱스를 찾는게 어렵다는 단점이 있습니다만

    > 그외의 경우에는 처리가능하겠군요

    >

    >

    > 초보 wrote:

    > > DBGrid의 셀에서 입력중에있는 값을

    > > 알 수 있는 메소드나 함수가 있을까요?

    > > 가령 숫자를 입력한다면 현재까지 입력진행중인 그 숫자를 가지고

    > > 연산을 해서 어떤 변수에 넣고 처리해야할 필요가 있거든요...

    > > 다른 셀로 이동하지않고 현재 입력중인 그 상태에서...

    > > 예를들면 다음과 같이 에디트박스에서 키를 누를때 마다

    > > 에디트박스에 현재 입력되어있는 값을 출력되게 할 수 있듯이말이죠..

    > >

    > > procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

    > > begin

    > > ShowMessage(Edit1.text);

    > > end;

    > >

    > > 이것과 같은짓을 디비그리드 셀 입력중에도 가능할 수 있나요?

    > > 안되면 일찌기 포기하게요... ^^

    > > 스트링 그리드로는 가능한 일이 디비그리드에서는 난감하군요..

    > > 좋은 하루되세요...

    > >

  • Profile
    창영 2001.05.14 10:42
    초보 wrote:

    > DBGrid의 셀에서 입력중에있는 값을

    > 알 수 있는 메소드나 함수가 있을까요?

    > 가령 숫자를 입력한다면 현재까지 입력진행중인 그 숫자를 가지고

    > 연산을 해서 어떤 변수에 넣고 처리해야할 필요가 있거든요...

    > 다른 셀로 이동하지않고 현재 입력중인 그 상태에서...

    > 예를들면 다음과 같이 에디트박스에서 키를 누를때 마다

    > 에디트박스에 현재 입력되어있는 값을 출력되게 할 수 있듯이말이죠..

    >

    > procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

    > begin

    > ShowMessage(Edit1.text);

    > end;

    >

    > 이것과 같은짓을 디비그리드 셀 입력중에도 가능할 수 있나요?

    > 안되면 일찌기 포기하게요... ^^

    > 스트링 그리드로는 가능한 일이 디비그리드에서는 난감하군요..

    > 좋은 하루되세요...

    >



    Dbgrid는 Query또는Table로 연결하여 뿌려주죠.

    Dbgrid의 현재 입력상태는 Dbgrid에서 찾지말고 Query필드을 참조하세요.

    Dbgrid의 Colum마다 Query의 필드가 있으니

    가령

    Dbgrid에 있는 Keypress Evert에

    var St1:Stinrg;

    begin

    if Key=#13 Then begin

    St1:=Query.FieldByName('Code').Value;

    end;

    end;