본문 바로가기
Delphi/프로시저-함수

StringGrid의 Cell에 입력 값 제한

by MonoSoft 2023. 6. 2.
728x90
반응형

 

 

 

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.

 

728x90
반응형

'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

댓글