Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.27;
Скачать: CL | DM;

Вниз

Как очистить Edit, StringGrid?   Найти похожие ветки 

 
Евгения   (2005-03-09 19:59) [0]

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


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

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


 
Zeqfreed ©   (2005-03-09 20:14) [2]

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


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

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


 
begin...end ©   (2005-03-09 20:42) [4]

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

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

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


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


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

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


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

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


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

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 i<>k then s:=s+a[k,i]*x0[k];
if  a[i,i]=0 then
       begin
ShowMessage("&#207;&#238;&#239;&#240;&#238;&#225;&#243;&#233;&#242;&#229; &#229;&#249;&#184; &#240;&#224;&#231; (&#228;&#229;&#235;&#229;&#237;&#232;&#229; &#237;&#224; &#237;&#238;&#235;&#252;)");
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("&#200;&#242;&#229;&#240;&#224;&#246;&#232;&#233;: "+IntToStr(j));
if q=False then Memo1.Lines.Add("&#199;&#224;&#228;&#224;&#237;&#237;&#224;&#255; &#242;&#238;&#247;&#237;&#238;&#241;&#242;&#252; &#237;&#229; &#228;&#238;&#241;&#242;&#232;&#227;&#237;&#243;&#242;&#224;");
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;


 
Virgo_Style ©   (2005-03-09 21:07) [8]

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


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


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

И здесь тоже.
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;


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

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

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


 
Zeqfreed ©   (2005-03-09 21:12) [11]

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


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


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

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


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

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. Проверил - значения не сохраняются.


 
Zeqfreed ©   (2005-03-09 21:30) [14]

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

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


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

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


 
Virgo_Style ©   (2005-03-09 21:51) [16]


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

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

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

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


 
Virgo_Style ©   (2005-03-09 21:52) [17]

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


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

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

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


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

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


 
begin...end ©   (2005-03-09 22:01) [20]

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



Страницы: 1 вся ветка

Текущий архив: 2005.03.27;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.04 c
1-1110444992
juice
2005-03-10 11:56
2005.03.27
Отладка


8-1102669878
siv14
2004-12-10 12:11
2005.03.27
вращение фигур


11-1093507527
ssk
2004-08-26 12:05
2005.03.27
На форме в DLL не обрабатываются кнопки по умолчанию


8-1100903370
Maxim____
2004-11-20 01:29
2005.03.27
Алгоритм уровней.


14-1110016285
Гаврила
2005-03-05 12:51
2005.03.27
Перлы из резюме :-)