안녕하세요. 델파이를 공부중인 초보 학생입니다. 소스 입력후 실행 후 다 되는데
질문이 하나 있습니다.(밑에는 소스 입니다.)
일단 첨부파일 보시면 제가 입력값에 100 이상의 값을 입력했습니다. 그러면 팝업창이 뜨는데
0부터 100까지 사이의 수를 입력하라고 하면서 팝업이 닫힙니다. 이 다음부터가 질문입니다.
팝업창이 닫히고 나서 해당값이 초기화 되고 그 자리에 커서가 자동으로 들어갈수 있게 하는
방법에 대한 질문입니다. 고수분들의 답변 부탁드립니다.
unit sm3_1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
btnInput: TButton;
btnOutput: TButton;
btnExit: TButton;
procedure btnOutputClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
procedure btnInputClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
//전역변수 선언
Count : integer;
Ground : array[1..40, 1..8] of string;
//인원수 40명 제한, 동적배열로 처리(?)
//각 행은 8열(총점, 평균 포함)
implementation
uses sm3_2; //유닛2 이용
{$R *.DFM}
procedure TForm1.btnOutputClick(Sender: TObject);
var
i, j, k, sum1, sum2, sav_sum, rank, sav_rank : integer;
temp : string;
begin
//총점 내림차순 정렬
for i := 1 to Count-2 do
for j := i+1 to Count-1 do begin
sum1 := StrToInt(Ground[i, 7]);
sum2 := StrToInt(Ground[j, 7]);
if (sum1 < sum2) then
for k := 1 to 8 do
begin
temp := Ground[i, k];
Ground[i, k] := Ground[j, k];
Ground[j, k] := temp;
end;
end;
//석차부여(동일 총점은 동일 석차)
rank := 0;
for i := 1 to Count-1 do begin
if sav_sum <> StrToInt(Ground[i, 7]) then begin
rank := rank + 1;
Ground[i, 1] := IntToStr(rank);
sav_sum := StrToInt(Ground[i, 7]);
sav_rank := StrToInt(Ground[i, 1]);
end
else begin
Ground[i, 1] := IntToStr(sav_rank);
rank := rank + 1;
end;
end;
//배열 Ground의 값을 Form2의 스트링그리드로 이동
for i := 1 to Count-1 do begin
for j := 1 to 8 do begin
Form2.StringGrid1.Cells[j-1, i] := Ground[i, j];
end;
end;
Form2.Show; //Form2 보기
end;
procedure TForm1.btnExitClick(Sender: TObject);
begin
Close;
end;
procedure TForm1.btnInputClick(Sender: TObject);
var
sum : integer;
begin // 첫번째
if (Edit1.Text='') then
// 만약에 Edit1.text에 널값 입력시
MessageDlg('학번을 입력하세요',mtConfirmation,[mbOK],0)
// 동그란 물음표 표시로 Edit1에 널값으로 입력시 메시지창이 뜬다.
else if
(Edit2.Text='') then
// 만약에 Edit2.text에 널값 입력시
MessageDlg('이름을 입력하세요',mtConfirmation,[mbOK],0)
// 동그란 물음표 표시로 Edit2에 널값으로 입력시 메시지창이 뜬다.
else if StrToInt(Edit3.Text) < 0 then // 정수값 Edit3.Text가 0보다 작을 경우
MessageDlg('0부터 100사이의 수를 입력하세요',mtInformation,[mbOK],0)
// 동그란 느낌표 표시로 Edit3에 0보다 작은 수를 입력시 메시지창이 뜬다.
else if StrToInt(Edit3.Text) > 100 then // 정수값 Edit3.Text가 100보다 클 경우
MessageDlg('0부터 100사이의 수를 입력하세요',mtInformation,[mbOK],0)
// 동그란 느낌표 표시로 Edit3에 100보다 큰 수를 입력시 메시지창이 뜬다.
else if StrToInt(Edit4.Text) < 0 then // 정수값 Edit4.Text가 0보다 작을 경우
MessageDlg('0부터 100사이의 수를 입력하세요',mtInformation,[mbOK],0)
// 동그란 느낌표 표시로 Edit4에 0보다 작은 수를 입력시 메시지창이 뜬다.
else if StrToInt(Edit4.Text) > 100 then // 정수값 Edit4.Text가 100보다 클 경우
MessageDlg('0부터 100사이의 수를 입력하세요',mtInformation,[mbOK],0)
// 동그란 느낌표 표시로 Edit4에 100보다 큰 수를 입력시 메시지창이 뜬다.
else if StrToInt(Edit5.Text) < 0 then // 정수값 Edit5.Text가 0보다 작을 경우
MessageDlg('0부터 100사이의 수를 입력하세요',mtInformation,[mbOK],0)
// 동그란 느낌표 표시로 Edit5에 0보다 작은 수를 입력시 메시지창이 뜬다.
else if StrToInt(Edit5.Text) > 100 then // 정수값 Edit5.Text가 100보다 클 경우
MessageDlg('0부터 100사이의 수를 입력하세요',mtInformation,[mbOK],0)
// 동그란 느낌표 표시로 Edit5에 100보다 큰 수를 입력시 메시지창이 뜬다.
else
begin
Form2.StringGrid1.RowCount := Count+1;
Ground[Count, 2] := Edit1.Text;
Ground[Count, 3] := Edit2.Text;
Ground[Count, 4] := Edit3.Text;
Ground[Count, 5] := Edit4.Text;
Ground[Count, 6] := Edit5.Text;
sum := StrToInt(Edit3.Text) + StrToInt(Edit4.Text) + StrToInt(Edit5.Text);
Ground[Count, 7] := IntToStr(sum); //총점
Ground[Count, 8] := Format('%4.1f', [sum/3]); //평균
Inc(Count);
Edit1.Text :='';
Edit2.Text :='';
Edit3.Text :='';
Edit4.Text :='';
Edit5.Text :='';
Edit1.SetFocus;
end;
end;
procedure TForm1.FormCreate(Sender: TObject); //폼 생성 시에 실행
begin
Count := 1;
end;
end.