StringGrid의 Cell에 입력 값 제한 하기
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids;
type
TForm1 = class(TForm) StringGrid1: TStringGrid;
procedure StringGrid1DrawCell(Sender: TObject; Col, Row: Integer; Rect: TRect; State: TGridDrawState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
tmpText, cellText: String; i, X, Y: Integer;
// StringGrid1의 프로퍼티 setting // DefaultDrawing := True // Options에 goEditing 추가 implementation
{$R *.DFM}
procedure TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Integer; Rect: TRect; State: TGridDrawState);
begin
if (Row > 0) and (Col > 0) and (StringGrid1.Cells[Col, Row] <> '') then
begin
cellText := '';
tmpText := StringGrid1.Cells[Col, Row];
for i := 1 to Length(tmpText) do
if tmpText[i] in ['0'..'9','-','+','.'] then
cellText := cellText + tmpText[i];
try
{cell의 값을 floating point 으로 변환}
if cellText <> '' then
cellText := FloatToStrF(StrToFloat(cellText), ffNumber,13,2); // 소숫점을 없애려면 2->0 으로
except on EConvertError do
begin
cellText := '';
end;
end;
if cellText = '' then begin
{Set font}
StringGrid1.Canvas.Font.Color := clRed; {잘못된 수치는 빨강}
StringGrid1.Canvas.TextOut(Rect.Left+2, Rect.Top+2, StringGrid1.Cells[Col,Row]);
end
else
begin
{cell이 수치이므로 오른쪽 right-justified}
X := Rect.Right - StringGrid1.Canvas.TextWidth(cellText);
{cell의 수치를 bottom과 top에 대한 중앙으로}
Y := Rect.Top + ((Rect.Bottom - Rect.Top StringGrid1.Canvas.TextHeight(cellText)) div 2);
StringGrid1.Canvas.Font.Style := StringGrid1.Canvas.Font.Style - [fsBold];
// 오른쪽 margin을 주기위해 왼쪽으로 2 pixels 만큼 이동 Dec(X, 2);
StringGrid1.Canvas.TextRect(Rect, X, Y, cellText); end;
end;
end;
end.
'Delphi > 프로시저-함수' 카테고리의 다른 글
Hook(훅) SetWindowsHookEx (0) | 2023.07.07 |
---|---|
메모(TMemo) 팁 (0) | 2023.06.14 |
초를 시간 분 초 형식으로 리턴 (0) | 2021.07.22 |
델파이 RTF (Rich Text Format) 사용방법 (0) | 2021.07.21 |
델파이 JSON to Object 한줄 (0) | 2021.07.20 |
댓글