Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
StringGrid에서 Cell에 입력제한하는 방법
Stringgrid에서 특정Cell에 데이타를 입력하는 데 조건을 주고 싶습니다.
예를 들면 10자리까지만 입력된다거나 소수점2자리를 가지는 15자리의 숫자만 입력되도록 하거나 처럼 말입니다.
방법을 아시는 분 도움 부탁드립니다.
1
COMMENTS
김영대
•
1999.06.24 23:52
이상준 께서 말씀하시기를...
> Stringgrid에서 특정Cell에 데이타를 입력하는 데 조건을 주고 싶습니다.
> 예를 들면 10자리까지만 입력된다거나 소수점2자리를 가지는 15자리의 숫자만 입력되도록 하거나 처럼 말입니다.
> 방법을 아시는 분 도움 부탁드립니다.
아래 source는 말씀하신 기능을 하는 예제는 아니지만
처리하는 방법만 참고하시라고 올려둡니다
// 수치자료를 다루는 StringGrid이므로 right aligned, floating point,
// editable grid 가 가능합니다
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.
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
이수진
•
1999.06.25 01:19
2
COMMENTS
/
0
LIKES
QuickReport.Print하면 일부만 프린트되네요....
경험자
•
1999.06.25 04:34
이수진 께서 말씀하시기를... > 퀵리포트를 미리보기 하지않고 바로 프린터로 출력할때 생기는 문제입니다...
하남수
•
1999.06.25 02:28
사용은 안해봤지만 다음 프러퍼티를 사용하면 되지 않을까요... QuickRep1.PrinterSettings.LastPage
진중걸
1999.06.25 00:15
0
COMMENTS
/
0
LIKES
프린터제어에 대해.. Help
이상준
•
1999.06.24 22:36
1
COMMENTS
/
0
LIKES
StringGrid에서 Cell에 입력제한하는 방법
Stringgrid에서 특정Cell에 데이타를 입력하는 데 조건을 주고 싶습니다. 예를 들면 10자리까지만 입력된다거나 소수점2자리를 가지는 15자리의 숫자만 입력되도록 하거나 처럼 말입니다. 방법을 아시는 분 도움 부탁드립니다.
김영대
•
1999.06.24 23:52
이상준 께서 말씀하시기를... > Stringgrid에서 특정Cell에 데이타를 입력하는 데 조건을 주고 싶습니다. ...
유애선
1999.06.24 22:08
0
COMMENTS
/
0
LIKES
[제발 도와주세요]계층을 어떻게 표현할지...?
양윤호
•
1999.06.24 21:56
1
COMMENTS
/
0
LIKES
전화접속 어댑터를 설치하려면??
김영대
•
1999.06.25 02:42
양윤호 께서 말씀하시기를... > 윈도우즈 95와 98의 CD를 넣은 상태에서 직접 전화접속 어댑터와 전화접속...
최석기
1999.06.24 21:30
0
COMMENTS
/
0
LIKES
screen font와 true type font
bds
1999.06.24 20:27
0
COMMENTS
/
0
LIKES
에러발생 급함
heewoony
•
1999.06.24 20:11
2
COMMENTS
/
0
LIKES
프린터 제어
하남수
•
1999.06.25 00:05
heewoony 께서 말씀하시기를... > 퀵레포트에서 라벨을 출력하려구합니다. > 근데. 출력 용지는 연속연...
하남수
•
1999.06.25 00:05
heewoony 께서 말씀하시기를... > 퀵레포트에서 라벨을 출력하려구합니다. > 근데. 출력 용지는 연속연...
이현신
1999.06.24 19:48
0
COMMENTS
/
0
LIKES
CPU 사용률을 구하는데 잘 않되내요..
박지수
•
1999.06.24 18:45
1
COMMENTS
/
0
LIKES
특정폴더가 열린 상태로 탐색기 실행하는 법??
김영대
•
1999.06.24 18:53
박지수 께서 말씀하시기를... > 델파이로 탐색기를 실행시킬때 특정 폴더가 열린(선택) 상태로 > > 탐...
오세웅
•
1999.06.24 18:44
1
COMMENTS
/
0
LIKES
인스톨 쉴드 질문-한글
이정욱
•
1999.06.24 20:10
인스톨 쉴드안에 잘 보시면 Resource파일이 있습니다. 그것을 리소스 에디터로 열어서 한글로 고치시면 됩...
하윤철
•
1999.06.24 18:08
1
COMMENTS
/
0
LIKES
[하소연]... 이젠 디버깅포인트도 안잡힙니다...-_-
이정욱
•
1999.06.24 20:05
컴파일을 하실 때 디버깅 인포메이션을 넣지 않아서 그런것 같네요. Project Option에서 Compile탭에서 De...
장일형
1999.06.24 17:04
0
COMMENTS
/
0
LIKES
델파이에서 word문서 제어는???
홍환민
1999.06.24 15:09
0
COMMENTS
/
0
LIKES
Locate()메서드로 다음찾기 구현법.
이종근
•
1999.06.24 12:18
1
COMMENTS
/
0
LIKES
계산필드가 아리송합니다.
이주흥
•
1999.06.25 05:16
이종근 께서 말씀하시기를... > 이곳에서 많은 정보를 얻고 있는 초보입니다. > DB를 만들고(파라독스)필...
이용민
1999.06.24 11:25
0
COMMENTS
/
0
LIKES
윈도우의 RAS 를 이용에 관한 질문...
VMNT
•
1999.06.24 10:14
1
COMMENTS
/
0
LIKES
Stored Procedure에서 Order By를 파라미터로 사용
신호성
•
1999.06.24 19:43
VMNT 께서 말씀하시기를... > MS-SQL Server를 사용합니다! > Stored Procedure를 사용하는데 Select 문...
dj
•
1999.06.24 08:46
1
COMMENTS
/
0
LIKES
스트링에서 문자골라내기
최석기
•
1999.06.24 17:33
dj 께서 말씀하시기를... > 스트링 변수에 내용이 들어 있습니다. > > 비베에서 처럼 > 예를들어 'ab...
박생진
•
1999.06.24 08:04
1
COMMENTS
/
0
LIKES
델파이 그냥 공부해도 되남요 초보가
이정욱
•
1999.06.24 20:07
처음하신다면 조금 오래된 책이지만 '한번 더 생각한 델파이'하는 책이 있습니다. 권용길 님께서 쓰신 책입...
장일형
•
1999.06.24 06:16
2
COMMENTS
/
0
LIKES
LAN으로 연결된 다른 컴퓨터 IP를구하고 싶어요.
김영대
•
1999.06.24 18:47
장일형 께서 말씀하시기를... > 델초보입니다. > LAN으로 상대방 컴퓨터의이름과 IP를 구해야 하는데 팁...
장일형
•
1999.06.24 20:04
김영대님 많은 도움이 되었습니다. 그런데 테스트해보니 같은 작업그룹은 잘 되는데 다른 작업 그룹은 I...
이상준
1999/06/24 22:36
Views
196
Likes
0
Comments
1
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
> Stringgrid에서 특정Cell에 데이타를 입력하는 데 조건을 주고 싶습니다.
> 예를 들면 10자리까지만 입력된다거나 소수점2자리를 가지는 15자리의 숫자만 입력되도록 하거나 처럼 말입니다.
> 방법을 아시는 분 도움 부탁드립니다.
아래 source는 말씀하신 기능을 하는 예제는 아니지만
처리하는 방법만 참고하시라고 올려둡니다
// 수치자료를 다루는 StringGrid이므로 right aligned, floating point,
// editable grid 가 가능합니다
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.