Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как очистить Edit, StringGrid? [D7]


Евгения ©   (2005-03-09 19:59:00) 

Здравствуйте. У меня небольшая проблемка. Мне необходимо,чтобы при нажатии на Button у меня очищались Edit и StringGrid, т.е. удалялась из них информация, введеная ранее.
Дело в том, что при условиях Edit1.Text:=''; Edit2.Clear при нажатии на Button вылезает ошибка: "...EConvertError... is not a valid integer value..."
А как убрать все из StringGrid, я вообще не знаю.
Что же мне делать? Пожалуйста, помогите.
Спасибо.


begin...end   (2005-03-09 22:01:00) [1]

А ещё есть TryStrToInt и TryStrToFloat.


Евгения   (2005-03-09 21:59:00) [2]

Огромное спасибо всем, кто принял участие в решении моей проблемы.
С уважением, Евгения.


ламер_   (2005-03-09 21:58:00) [3]

Нууу...
> есть StrToIntDef

Не знал, но на то я и ламер_:)).  Действительно, так гораздо проще.


Virgo_Style   (2005-03-09 21:52:00) [4]

> Tjjls= Tools, тоже баиньки пора :-)


Virgo_Style   (2005-03-09 21:51:00) [5]


> Для каждого StrToInt

Так-таки и для каждого? Хотя это проще, чем вникать в идеологию, но такая метОда мне кажется сомнительной. Просто потому, что есть StrToIntDef и StrToFloatDef.

> только будь готова к тому

Tjjls - Debugger - Language Exceptions - Stop On Delphi Exceptions - выключено.


ламер_   (2005-03-09 21:43:00) [6]

2 [14] Zeqfreed: Дадада. Те же я@ца, только в профиль.
Для каждого StrToInt - блок Try..Except..End.
2 Евгения : только будь готова к тому, что при запуске под Delphi все равно будет выскакивать ошибка - это нормально, F9 и далее.


Zeqfreed   (2005-03-09 21:30:00) [7]

Virgo_Style ©   (09.03.05 21:21) [12]
Ну я же сказал, что пора мне баиньки.

Евгения   (09.03.05 21:02)
Следует поместить все операции преобразования текста в числа в блок защищенного режима. См. [13]


ламер_   (2005-03-09 21:25:00) [8]

Adding 2 [5] Нет, оказуется, можно. Только не Rows.Clear, а Rows.Text:='' :Use Text to get or set all the strings in the TStrings object in a single string delimited by carriage return

Если правильно понял, то в Edit1Change первые строки:
try
  z:=StrToInt(Edit1.Text);
except
  z:=0;
end;


В этом случае StringGrid'ы очищать не нужно - количество ячеек автоматом установится в 0. Проверил - значения не сохраняются.


Virgo_Style   (2005-03-09 21:21:00) [9]


> Я нигде не удлядел упамянания о том, что ошибка
> происходит при изменении текста Edit'а

Очистка Edit - это его изменение, не так ли?


Zeqfreed   (2005-03-09 21:12:00) [10]

Прошу прощения за такое ужасающее кол-во опечаток. Видимо пора баиньки.


Zeqfreed   (2005-03-09 21:10:00) [11]

Virgo_Style ©   (09.03.05 21:08) [9]
Я нигде не удлядел упамянания о том, что ошибка происходит при изменении текста Edit'а. Говорилось только про Button. Сори, если ошибся.

Евгения   (09.03.05 21:02) [7]
На какой строке ошибка? Если в Button1Click, то вероятно в Edit1,Edit2 или Edit5 введено не число или число ведено не корректно.


Virgo_Style   (2005-03-09 21:08:00) [12]

И здесь тоже.
procedure TForm8.Button1Click(Sender: TObject);
var a: matrix_a; b,x,x0: matrix_b;
i,j,k,max_it:integer; s,eps: real; q: Boolean;
begin
n:=StrToInt(Edit1.Text);
max_it:=StrToInt(Edit2.Text);
eps:=StrToFloat(Edit5.Text);

Memo1.Clear;


Virgo_Style   (2005-03-09 21:07:00) [13]

procedure TForm8.Edit1Change(Sender: TObject);
var
z : Byte;
begin
z:=StrToInt(Edit1.Text);
sgM.RowCount:=z;


Вот оно. Можно до этого сделать
if Trim(Edit1.Text)='' then exit;
или по-другому, зависит от логики программы.
А еще лучше сделать нормальную обработку исключения try..except.


Евгения   (2005-03-09 21:02:00) [14]

const nn=50 ;
type matrix_a = array [1..nn,1..nn] of real;
type matrix_b = array [1..nn] of real;

procedure TForm8.Button1Click(Sender: TObject);
var a: matrix_a; b,x,x0: matrix_b;
i,j,k,max_it:integer; s,eps: real; q: Boolean;
 begin
n:=StrToInt(Edit1.Text);
max_it:=StrToInt(Edit2.Text);
eps:=StrToFloat(Edit5.Text);
Memo1.Clear;
for i:=1 to n do for j:=1 to n do a[i,j]:=StrToFloat(sgM.Cells[i-1,j-1]);
for i:=1 to n do b[i]:=StrToFloat(sgV.Cells[0,i-1]);
for i:=1 to n do x0[i]:=0;
j:=0; q:=False;
repeat
for i:=1 to n do begin
s:=0; for k:=1 to n do if ik then s:=s+a[k,i]*x0[k];
if  a[i,i]=0 then
       begin
ShowMessage('Ïîïðîáóéòå åù¸ ðàç (äåëåíèå íà íîëü)');
Exit;
        end;
x[i]:=(b[i]-s)/a[i,i]; end;
for i:=1 to n do
begin
if abs(x[i]-x0[i])>eps then q:=False else q:=True; x0[i]:=x[i]; end;
inc(j);
until (j=max_it) or q;
Memo1.Lines.Add('Èòåðàöèé: '+IntToStr(j));
if q=False then Memo1.Lines.Add('Çàäàííàÿ òî÷íîñòü íå äîñòèãíóòà');
for i:=1 to n do Memo1.Lines.Add('x['+IntToStr(i)+']='+FloatToStrF(x0[i],ffgeneral,4,5));
Label6.Visible:=true;
Memo1.Visible:=true;
end;

procedure TForm8.Edit1Change(Sender: TObject);
var
z : Byte;
begin
z:=StrToInt(Edit1.Text);
sgM.RowCount:=z;
sgM.ColCount:=z;
sgV.RowCount:=z;
//sgR.RowCount:=z;
sgM.Visible:=true;
sgV.Visible:=true;
Label1.Visible:=true;    Label4.Visible:=true;
Label2.Visible:=true;    Label3.Visible:=true;
Label5.Visible:=true;
Edit2.Visible:=true; Edit5.Visible:=true;
Form8.Height:=436;        Form8.Width:=542;
Button2.Visible:=true; BitBtn1.Visible:=true;
end;

procedure TForm8.Button2Click(Sender: TObject);- Вот в этой процедурке это должно произойти
begin
   Button1.Visible:=false;    BitBtn1.Visible:=false;
   Edit1.Visible:=false;      Edit2.Visible:=false;
   Edit3.Visible:=false;      Memo1.Visible:=false;
   Label1.Visible:=false;     Edit5.Visible:=false;
   Label2.Visible:=false;     Label3.Visible:=false;
   Label4.Visible:=false;     Label5.Visible:=false;
   Label6.Visible:=false;      Button2.Visible:=false;
   sgM.Visible:=false;         sgV.Visible:=false;
   Button5.Visible:=false;
   Form8.Height:=96;   Form8.Width:=297;
end;

procedure TForm8.N3Click(Sender: TObject);
var i,j:word;
    s:string;
begin
    Edit4.Visible:=true;   Label1.Visible:=true;
    full_random(c); d:=c;
    for i:=0 to sgV.RowCount-1 do
    for j:=0 to sgV.ColCount-1 do
    begin
        str(c[i,j]:6:0,s);  sgV.Cells[j,i]:=s
    end;
end;


ламер_   (2005-03-09 20:52:00) [15]

Блин !!! НЕЛЬЗЯ-ААААА. Написал, и только потом сообразил. Ни в коем случае не воспринимать [5]!!!


ламер_   (2005-03-09 20:51:00) [16]


> Чтобы очистить StringGrid, можно каждой ячейке присвоить
> пустую строку.

Не обязательно, .Rows( или .Cols) - это TStrings, а у них есть стандартный метод Clear.


begin...end   (2005-03-09 20:42:00) [17]

> Евгения   (09.03.05 19:59)

> А как убрать все из StringGrid, я вообще не знаю.

Чтобы очистить StringGrid, можно каждой ячейке присвоить пустую строку.


ламер_   (2005-03-09 20:38:00) [18]

И не только OnClick кнопки, но и OnChange обоих Едитов


Zeqfreed   (2005-03-09 20:14:00) [19]

Евгения   (09.03.05 19:59)
Было бы неплохо увидеть еод обработчика события OnClick кнопки.


Virgo_Style   (2005-03-09 20:10:00) [20]

Из StringGrid - в цикле, а что касается Edit - скорее всего у тебя в OnChange идет конверсия StrTo???(Edit?.Text);


Наверх

Титульная страница Поиск, карта сайта Написать письмо