안냐세요.... 전 초짜베기 입니당..
다름이 아니오라..
StringGrid의 5번재 열 1번째 행에서 입력값을 넣은 후 엔터키를 치면
다음 같은 열 2번째 행으로 커서가 움직이게 하고 싶습니다.
그러니까... 같은 열에서 엔터키를 치면 한 칸씩 아래로 내리고 싶다는 거죵..
숫자를 입력하고 엔터를 치면 다음 행에 또 입력하고.. 이런 방식으로 만들고 싶거덩여... 또한 그 숫자 입력시 1234567 을 입력하면 자동으로 1,234,567 .... 이런식으로 나오게 할수는 없는건가영??
입력예) 1 -> 12 -> 123 -> 1,234 -> 12,345 -> 123,456 -> 1,234,567 이런식으로 말이죵~
고수분들.... 아시면.... 좀 알켜주세영.... 부탁합니당~~
전체를 팁에도 올려서 많은사람들이 손좀보시게 또는 더 좋은 방법이 있는지 공개하겠습니다.
2가지로 해보았습니다.
1은 입력후 보통 숫자형으로
2는 입력시 바꿔가면서
소숫점사용하도록했구요, 정해놓은 셀엔 숫자만 입력 가능하도록,
엔터기일때 옆의 셀로 이동입니다
....
{$R *.dfm}
function gfGetCommaStr(psNum : string) : string;
var
sFmt : string;
i : integer;
begin
sFmt := '#,##0';
if psNum <> '' then begin
if pos('.', psNum) > 0 then begin
sFmt := sFmt+'.';
for i := 1 to (length(psNum) - pos('.', psNum) ) do
sFmt := sFmt+'0';
end;
Result := FormatFloat(sFmt, StrToFloat(psNum));
end else
Result := '0';
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
Oldalign : word;
begin
if (ACol in [1,2])and(ARow>=1) then begin
Oldalign := settextalign(StringGrid1.Canvas.Handle, TA_RIGHT );
StringGrid1.Canvas.Font := StringGrid1.Font;
StringGrid1.Canvas.TextRect(Rect,
Rect.Right-5,
(Rect.Top+Rect.Bottom-StringGrid1.Font.Size-2) div 2,
gfGetCommaStr(StringGrid1.cells[ACol,ARow]));
settextalign(StringGrid1.Canvas.Handle, Oldalign);
end;
end;
procedure TForm1.StringGrid12KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
//엔터키일때 한칸 옆으로
if (Key = 13)and(TStringGrid(Sender).Col < TStringGrid(Sender).ColCount-1) then
TStringGrid(Sender).Col := TStringGrid(Sender).Col + 1;
end;
procedure TForm1.StringGrid12KeyPress(Sender: TObject; var Key: Char);
begin
//위 해당 셀엔 숫자만 입력 가능케함
if (TStringGrid(Sender).Col in [1,2])and(TStringGrid(Sender).Row>=1) then
if not(Key in ['0'..'9','.',#8]) then
Key := #0;
end;
procedure TForm1.StringGrid2SetEditText(Sender: TObject; ACol,
ARow: Integer; const Value: String);
var
SetValue, subStr : string;
begin
if (ACol in [1,2])and(ARow>=1) then begin
SetValue := StringReplace(Value, ',', '', [rfReplaceAll]);
if SetValue = '' then exit;
subStr := '';
if Pos('.',SetValue) > 0 then begin
subStr := copy(SetValue,Pos('.',SetValue),Length(SetValue));
SetValue := copy(SetValue,1,Pos('.',SetValue)-1);
end;
SetValue := gfGetCommaStr(SetValue)+subStr;
if SetValue <> StringGrid2.cells[ACol,ARow] then begin
StringGrid2.cells[ACol,ARow] := SetValue;
StringGrid2.EditorMode := True;
end;
end;
end;
procedure TForm1.StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
Oldalign : word;
begin
if (ACol in [1,2])and(ARow>=1) then begin
Oldalign := settextalign(StringGrid2.Canvas.Handle, TA_RIGHT );
StringGrid2.Canvas.Font := StringGrid2.Font;
StringGrid2.Canvas.TextRect(Rect,
Rect.Right-5,
(Rect.Top+Rect.Bottom-StringGrid2.Font.Size-2) div 2,
StringGrid2.cells[ACol,ARow]);
settextalign(StringGrid2.Canvas.Handle, Oldalign);
end;
end;
end.