Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 팁&트릭
Delphi Programming Tip&Tricks
[372] Enter Key로 DBGridEh의 Column간 이동처리(EhLib)
어느좋은날 [freepascal] 371 읽음    2017-05-02 05:22
알고 계신분들이 많긴하겠지만 모르는 분들을 위해서 적어봅니다. ^^

최근 버전에서는 간단하게 OptionsEh의 "dghEnterAsTab"을 설정하면 엔터키 입력시 자동으로 컬럼간 이동이 됩니다.
그리고 Options의 dgTabs 설정을 제외시키면 탭키로는 컬럼간 이동이 되지않고 오로지 엔터로만 이동하게 되죠.
그러나, 위의 방법으로는 엔터키 입력시 EditorMode로 진입하지 못하고 이동만 하게 됩니다.
그렇다고 Options의 dgAlwaysShowEditor를 설정하면 항상 EditorMode이긴한데 실수로 자료가 변경될 수가 있습니다.
그렇기때문에 조회용이 아닌 경우는 아래처럼 KeyDown Event에 직접 프로그래밍해서 처리하는게 좋습니다.

procedure TForm1.DBGridEh1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
	if Key = VK_RETURN then
	begin
		Key := 0;
		with TDBGridEh(Sender) do
		begin
			if not EditorMode then Exit;
			if Shift = [] then
			begin
				if SelectedIndex < (FieldCount - 1) then SelectedIndex := SelectedIndex + 1
				else
				begin
					SelectedIndex := 0;
					DataSource.DataSet.Next;
					if DataSource.DataSet.Eof then DataSource.DataSet.Append;
				end;
			end
			else if ssShift in Shift then
			begin
				if SelectedIndex > 0 then SelectedIndex := SelectedIndex - 1
				else
				begin
					SelectedIndex := FieldCount - 1;
					DataSource.DataSet.Prior;
				end;
			end;
		end;
	end;
end;


참고로 EditorMode가 아닌 상태에서 상/하 방향키를 입력하면 레코드간 이동이 되지만,
EditorMode로 들어간 상태에서 상/하 방향키를 입력하면 기본적으로 EditorMode가 해제되지않고 레코드간 이동도 되지않습니다.
이것은 각 Column의 WordWrap 속성이 기본적으로 True로 설정이 되어있기때문에 발생하는 현상인데,
각 Column의 WordWrap 속성이 False면 EditorMode 상태에서 상/하 방향키를 입력시 자동으로 EditorMode가 해제되고 레코드간 이동이 됩니다.

+ -

관련 글 리스트
372 Enter Key로 DBGridEh의 Column간 이동처리(EhLib) 어느좋은날 371 2017-05-02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.