안녕하세요
어떤 분이 궁금이라고 자신을 소개하는 것은 봤는데 정말 궁금해서 이렇게 또 도움을 부탁 드립니다.
dbgrid에 dbedit를 사용해서 글자가 입력되는 것에 따라 가장 근접한 레코드를 찾아가는 access의 콤보박스 기능을 구현하려고 합니다.
이렇게 하기 위해서는 몇가지를 처리해 주어야 하는데
1. dbgrid 위에 마우스로 드래그시 쎌선택이 마우스의 이동에 따라 자동으로
이동하는 문제
2. dbedit와 dbgrid이외의 부분에 클릭이 일어 났을때 dbedit와 dbgrid가 보이지 않
게 하는 방법 입니다.
1 의 경우는 form에 일어나는 마우스 이벤트를 이용해 form 내에서의 X Y 좌표와 dbedit와 dbgrid의 좌표를 비교 마우스 다운 이벤트가 이 콤포넌트 영역 이외에서 발생했다면 보이지 않게 처리하는 것으로 구상하고 있습니다. 아직은 실험은 못해봤지만 곧 시도해 보려고 합니다. 여기에 대한 또하나의 방법은 이 두 콤포넌트를 조합하여 새로운 콤포넌트로 만들면 어떨까 하는 생각도 해 보았는데 아직은 실력이 거기까지 미치지 못하고 있어 그저 생각속에 머물고 있습니다.
2 의 경우는 dataset의 locate()함수를 이용해 onchange이벤트에서 처리를 해 주었더니 dbgrid의 쎌 포인터가 이동은 했습니다. 그러나 선택까지 된 상태는 아니었습니다. 아마 mouse down event에서 방향키에 대한 처리로 locate()함수를 이용하면 상하좌우 방향키와 pgup pgdn home end키에 의해 레코드의 위치를 옮기는 데 까지는 구현할 수 있을 것 같습니다. 그런데 문제는 dbgrid에서 쎌을 클릭했을 경우 이것이 dataset의 쎌 표인터를 변화시키지 않는 것에 있습니다. locate() 에 의해 dataset의 레코드 위치를 옮기면 이것이 그대로 dbgrid의 쎌포인터에(선택된 상태는 아니지만) 반영되어 자동을 움직이는데 dbgrid의 쎌포인터는 dataset의 레코드 위치를 자동으로 움직이지 않습니다.
또하나의 문제는 dbgrid의 선택된 쎌의 값을 dbedit에 문자열로 넘겨주면 꼭 그 다음에는 dbgrid의 쎌 포인터가 dbgrid의 제일 처음 레코드로 자동으로 옮겨 간다는 것입니다. 또 dbgrid가 focus를 얻은 상태에서도 방향키를 이용해 레코드 포인터를 옮기고 이것이 그대로 dataset의 레코드 포인터에도 반영되게 하고 싶습니다. 그래서 이 상관관계를 연결해 주는 어떤 함수나 문이 있는가 하고 아무리 도움말을 찾아봐도 현재까지는 찾을 수 없었습니다.
제가 생각한 가능한 방법은 dbgrid에 table의 불러올때 qery를 통해 일련번호를 가지는 field를 하나 더 증가시켜 이것은 dbgrid에서 숨김으로 해 놓고 dataset의 레코드 포인터와 dbgrid의 레코드 포인터를 이 일련번호를 기준으로 일치시키면 어떨까 하는 것이었습니다. 그러나 이에대한것도 아직 실험은 못해봤고 머리속에서만 뱅뱅 돕니다. 혹은 번잡스럽게 일련번호 필드를 추가시킬 필요 없이 해결할 수 있는 방법이 없는가 하는 기대감을 계속 버리지 못하고 있습니다.
여기에 대해 많이 생각하고 그러는 가운데 조금씩 배워 나가고 있습니다.만은 이 문제에 대한 확실한 해결책을 가지고 계신 분이 있으시면 도움을 받기를 바라는 마음으로 이렇게 질문을 드립니다.
저로서는 현재 방법이 없습니다.
제 글을 읽어 주신것 감사하고 항상 평안하시기 바랍니다.