안녕하세요.
웹사이트, 책, 실무자에게 조언을 구하여 델파이를 공부하고 있는 델파인입니다.
다름아니라 몇일을 찾아보고 예제를 구현해봐도 잘 모르겠는 부분이있어 이렇게 질문을 드립니다.
핸드스캐너로 바코드를 읽어 들인 후 자동으로 다음줄로 가는 부분이 이해가 안됩니다.
enter key를 눌러서 넘어가는 부분은 되어지는데,
핸드스캐너는 자동으로 바코드를 읽은 후 enter key가 넘어오는 것을 알아냈습니다.
델파이를 하시는 많은 분들의 글을 찾아보니,
해결할수 있는 부분이 selectnext와 onkeypress 란 것으로 해결을 할수있다고 합니다.
두가지의 예제를 찾아 해보았으나, 저의 미숙함으로 인하여 해결이 안되네요..
고수님들의 조언을 부탁드립니다.
현재 상태
1, 핸드스캐너로 자료를 읽어 들인 후 정보를 화면에 뿌려준 후 ENTER KEY로 다음줄로 이동함
질문의 요지
1, 핸드스캐너로 바코드를 읽어 들인 후 다음줄로 바로 이동(ENTER KEY를 누르지 않음)
(단, 읽어들인 바코드에 대한 정보를 화면에 뿌려준 후 다음줄로 이동해야 함)
//스캐너로 바코드 읽어 들임
if Assigned(obj_KanCd) then obj_KanCd.Close;
obj_KanCd.MakeEqulKanCd(g_ComCd, obj_OutDet.PRODALIAS.AsString);
obj_KanCd.Open;
if obj_KanCd.Dataset.IsEmpty then begin
FnShowMessage('바코드정보가 없습니다. ' + #13 +
'바코드 및 제품을 본사로 통보하여 주십시요');
obj_OutDet.PRODALIAS.AsString := '';
DBGridEH2.SelectedField := obj_OutDet.PRODALIAS;
Exit;
end;
Application.ProcessMessages;
dSerial := dSerial + 1;
obj_OutDet.SERIAL.AsFloat := dSerial;
obj_OutDet.PRODCD.AsString := obj_KanCd.PRODCD.AsString;
obj_OutDet.PRODKNM.AsString := obj_KanCd.PRODKNM.AsString;
obj_OutDet.PRODALIAS.AsString := obj_KanCd.PRODALIAS.AsString;
obj_OutDet.STNNM.AsString := obj_KanCd.STNNM.AsString;
obj_OutDet.COLORNM.AsString := obj_KanCd.COLORNM.AsString;
obj_OutDet.OUTCNT.AsFloat := 1;
END;
procedure TFProdOut.DBGridEH2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
try
if Shift = [ssShift] then begin
case Key of
VK_RETURN, VK_TAB : Begin // Tab
if DBGridEH2.SelectedIndex = 0 Then Begin
Key := 0;
DBGridEH2.SelectedIndex := DBGridEH2.Columns.Count - 1;
End Else Begin
Key := 0;
DBGridEH2.SelectedIndex := DBGridEH2.SelectedIndex - 1;
End;
End;
end; // .. case Key of ...
end;
if Shift = [] then begin
case Key of
VK_RETURN, VK_TAB : Begin // Tab
if DBGridEH2.SelectedField = obj_OutDet.OUTCNT then begin //수량에서
if Not(obj_OutDet.OUTUNIT.IsNull) AND (obj_OutDet.OUTUNIT.AsFloat <> 0) then begin
if (obj_OutDet.PRODCD.AsString <> '') and
(obj_OutDet.SERIAL.AsFloat = dSerial) and (obj_OutMas.TRDSLIPNO.AsString = '') then begin
if (DBEdTrdSlipNo.Text = '') then
PN_DETAIL_NEW ---------------------------->이부분에서 ENTER KEY로 자료를 넘기고 있음
else
DBGridEH2.SelectedIndex := DBGridEH2.SelectedIndex + 1;
end else
DBGridEH2.DataSource.DataSet.Next;
end else begin
DBGridEH2.SelectedField := obj_OutDet.OUTUNIT;
end;
if Length(obj_OutDet.OUTCNT.AsString) > 8 then begin
fnShowMessage('수량에 바코드를 입력하셨습니다.');
DBGridEH2.SelectedField := obj_OutDet.OUTCNT;
end;
end else if DBGridEH2.SelectedField = obj_OutDet.OUTUNIT then begin //단가에서
if (obj_OutDet.PRODCD.AsString <> '') and
(obj_OutDet.SERIAL.AsFloat = dSerial) and (obj_OutMas.TRDSLIPNO.AsString = '') then
if obj_OutDet.OUTCNT.IsNull then begin
if Not(obj_OutDet.PRODCD.IsNull) then begin
IF obj_OutDet.Dataset.State in [dsBrowse] Then obj_OutDet.EditObj;
obj_OutDet.OUTCNT.AsFloat := 0;
end;
end;
if obj_OutDet.OUTUNIT.IsNull then begin
if Not(obj_OutDet.PRODCD.IsNull) then begin
IF obj_OutDet.Dataset.State in [dsBrowse] Then obj_OutDet.EditObj;
obj_OutDet.OUTUNIT.AsFloat := 0;
end;
end;
if (DBEdTrdSlipNo.Text = '') then
PN_DETAIL_NEW
else
DBGridEH2.SelectedIndex := DBGridEH2.SelectedIndex + 1;
end else //그외
DBGridEH2.SelectedIndex := DBGridEH2.SelectedIndex + 1;
End;
VK_INSERT: Key := 0;
VK_RIGHT : begin
if DBGridEH2.SelectedField = obj_OutDet.OUTCNT then
DBGridEH2.SelectedField := obj_OutDet.OUTUNIT
else begin
DBGridEH2.SelectedIndex := DBGridEH2.SelectedIndex + 1;
end;
end;
VK_LEFT : BEGIN
Key := 0;
if DBGridEH2.SelectedField = obj_OutDet.PRODALIAS then begin
DBGridEH2.SelectedField := obj_OutDet.PRODALIAS
End Else Begin
Key := 0;
DBGridEH2.SelectedIndex := DBGridEH2.SelectedIndex - 1;
End;
END;
end;
end;
except on e:exception do
end;
end;
휴..해결했네요..그냥 하드코딩으로 스캐너에서 다시 한번 입력하게 끔 만들어 줄을 자동으로 넘어가게 만들었네요..^^..