네가지 질문입니다.
1. stringgrid의 keypress이벤트에서 아래화살표키(#40) 가 안먹는 이유는?
2. stringgrid포커스 이동시 특정열 전체에 대하여 포커스 안가게 하려면?
예를 들면 5개의 열이 있을때 두번재 열을 포커스 안먹게 하여
첫번째 열에서 우측으로 한셀이동하면 두번째열 건너뛰고 세번재 열로 바로 포커스 이동하고 반대로
세번째 열에서 좌측으로 한셀 이동하면 두번째열 건너뛰고 첫번째 열로 바로 포커스 이동하게끔 말이죠..
3. stringGrid포커스 이동시 특정행 전체에 대하여 포커스 안가게 하려면?
2 번질문의 반대 경우 입니다.
4. 맨마지막 행에서 아래화살표 키를 누른후 다시 위 화살표키를 눌렀을때 원상태로 포커스로 이동하게 하려면?
예를 들면 4행 5열의 스트링그리드에 값을 뿌려주었을때
4번째 행에서 아래화살표 키가 keydown이벤트에서 발생했을때 빈행을 하나 더 만들어 줍니다.
그러면 5개의 행이 생기죠 그담에 다시 위 화살표 키가 keydown이벤트에서 발생하였을때
5번째 행을 없애고 4개 행으로 다시 바꾸어주면 포커스가 4번째가 아닌 세번째행으로 건너뜁니다.
이것을 4번째로 원상복귀 시키려고하는거죠.. 이에대한 코드는 아래를 참조하십시요..
procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = VK_Down then
begin
if stringgrid1.Row = stringgrid1.Rowcount-1 then
begin
stringgrid1.RowCount := stringgrid1.RowCount + 1;
end;
end
else if Key = VK_UP then
begin
if stringgrid1.Row = stringgrid1.Rowcount-1 then
begin
stringgrid1.RowCount := stringgrid1.RowCount - 1;
end;
end;
end;
이상 질문에 대해 답변 주시면 감사하겠습니다.
그럼 좋은 하루 되세요...
if Key = Chr(VK_DOWN) then
:
으로 처리하시고
2. 특정 열 포커스 안먹게 하려면
일단 이전에 들어온 키 값이 Left Arrow 였는지 Right Arrow 였는지를 저장하는
변수를 선언하여 OnKeyDown 에서 저장해 두십시오.
그런다음, OnSelectCell에서
if ACol = 2 then
if AKey = VK_RIGHT then
StringGrid1.Col := StringGrid1.Col + 1
else if AKey = VK_LEFT then
StringGrid1.Col := StringGrid1.Col - 1;
로 처리해 보십시오. (만약, 잘 안되면 이것을 적절히 응용해 보시구요.
오래전에 사용하던 거라 정확하지는 않지만, OnSelectCell에서 처리하는 건
분명합니다.)
3. 위의 2. 참조하시기 바랍니다.
4. OnKeyDown에서
if Key = VK_DOWN then
if StringGrid1.Row = StringGrid1.RowCount-1 then
begin
StringGrid1.RowCount := StringGrid1.RowCount + 1;
StringGrid1.Row := StringGrid1.RowCount - 1;
end
else if Key = VK_UP then
if StringGrid1.Row = StringGrid1.RowCount-1 then
begin
StringGrid1.RowCount := StringGrid1.RowCount - 1;
StringGrid1.Row := StringGrid1.RowCount - 1;
end;
와 같이 하시면 되지 않을까요? (예전에 하던 것이지만 대략 아래위로 문장을
바꿔 가면서 해보시기 바랍니다.)
질문 wrote:
> 네가지 질문입니다.
>
> 1. stringgrid의 keypress이벤트에서 아래화살표키(#40) 가 안먹는 이유는?
>
> 2. stringgrid포커스 이동시 특정열 전체에 대하여 포커스 안가게 하려면?
> 예를 들면 5개의 열이 있을때 두번재 열을 포커스 안먹게 하여
> 첫번째 열에서 우측으로 한셀이동하면 두번째열 건너뛰고 세번재 열로 바로 포커스 이동하고 반대로
> 세번째 열에서 좌측으로 한셀 이동하면 두번째열 건너뛰고 첫번째 열로 바로 포커스 이동하게끔 말이죠..
>
> 3. stringGrid포커스 이동시 특정행 전체에 대하여 포커스 안가게 하려면?
> 2 번질문의 반대 경우 입니다.
>
> 4. 맨마지막 행에서 아래화살표 키를 누른후 다시 위 화살표키를 눌렀을때 원상태로 포커스로 이동하게 하려면?
> 예를 들면 4행 5열의 스트링그리드에 값을 뿌려주었을때
> 4번째 행에서 아래화살표 키가 keydown이벤트에서 발생했을때 빈행을 하나 더 만들어 줍니다.
> 그러면 5개의 행이 생기죠 그담에 다시 위 화살표 키가 keydown이벤트에서 발생하였을때
> 5번째 행을 없애고 4개 행으로 다시 바꾸어주면 포커스가 4번째가 아닌 세번째행으로 건너뜁니다.
> 이것을 4번째로 원상복귀 시키려고하는거죠.. 이에대한 코드는 아래를 참조하십시요..
>
> procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
> begin
> if Key = VK_Down then
> begin
> if stringgrid1.Row = stringgrid1.Rowcount-1 then
> begin
> stringgrid1.RowCount := stringgrid1.RowCount + 1;
> end;
> end
> else if Key = VK_UP then
> begin
> if stringgrid1.Row = stringgrid1.Rowcount-1 then
> begin
> stringgrid1.RowCount := stringgrid1.RowCount - 1;
> end;
> end;
> end;
>
> 이상 질문에 대해 답변 주시면 감사하겠습니다.
> 그럼 좋은 하루 되세요...
>
>
>