안녕하세요.
월요일 아침이구.. 내일은 휴일인데... 근데 비가 오시네요...
다름이 아니라 뭐좀 여쭐려구요.
StringGrid를 이용해서, 데이타를 직접 입려하는 프로그램이 하나 있습니다.
칼럼이 자그마치 150개 정도의 칼럼으로 구성되어있구요...
입력및 수정을 위해서 몇개의 칼럼의 길이가 0으로 해서 들어가 있습니다.
값을 읽어가면서 해야 하는 업무인지라..
근데.. 문제는 이 스트링그리드의 이동시 colwidths[xcol] := 0 으로 해놓은 칼럼에
포커스가 가서, 방향키로 이동시 (<-, -> ) 컬럼의 이동시 포커스가 보였다 않보였다 하는겁니다.
colwidths[xcol]:=0 이면 포커스가 숨었다가, colwidths[xcol] >0 인 컬럼에는 포커스가
보인다는 거죠...ㅠ.ㅠ
colwidths[col] := 0 일때 포커스를 아예가지 않게 하고, 다음 colwidths[xcol]>0 인
컴럼에 포커스를 보내려구 하는데... 간단한줄 알구 뒤로 미뤘더니.. 골치네요..
전체 스트링 그리드의 옵션은 goEditing 이 true 로 설정된 상태입니다.
도움 주실 분들께 감사드립니다. 끝. ~
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, Buttons;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
BitBtn1: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
private
{ Private declarations }
FPrevCol: integer;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.ColWidths[2] := 0; //for testing purposes
FPrevCol := 1; //the first collumn: this should be changed if the first column's width is 0
end;
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
begin
if StringGrid1.ColWidths[ACol] = 0 then
begin
CanSelect := False;
if FPrevCol < ACol then //moving from left to right
begin
if ACol + 1 <= StringGrid1.ColCount then
StringGrid1.Col := StringGrid1.Col + 2;
end
else //moving from right to left
begin
if ACol > 1 then
StringGrid1.Col := StringGrid1.Col - 2;
end;
end
else
FPrevCol := ACol;
end;