Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Помогите найти ошибку


Автор: blondinochka 28.9.2007, 16:49
Люди добрые, помогите человеку - от обилия кода у меня уже в глазах темнеет smile. Я делаю лабораторку и в ней надо вводить матрицу в StringGrid. А так как каждый элемент должен быть число, я должна написать проверку, чтоб в ячейки не вводились буквы и  другие символы кроме точки и минуса(которые должны вводиться в одну ячейку только один раз естесссно). Я привожу пример кода в котором ошибочка. Ошибочка состоит в том, что больше одного символа ввести нельзя: то есть ввожу число 2, хочу ввести еще число3, чтобы получилось 23, но 2 убирается и остается только 23. Подскажите, пожалуйста в чем проблема, а то я делфями недавно заниматься начала smile
Код

procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,
  ARow: Integer; const Value: String);
var i,j,m:integer;
begin
  m:=0; //если минус уже был введен, то m=1
  j:=0; // то же самое только для точки
for i:=1 to strlen(PChar(Value)) do
  begin
if ((Value[i]>'0') and (Value[i]<'9')) or ((Value[i]='.')and (j=0)) or ((Value[i]='-')and (m=0)) then
   begin if (Value[i]='.') then j:=1;
         if (Value[i]='-') then m:=1;
      StringGrid1.Cells[ACol,ARow]:=Value[i];
   end
else StringGrid1.Cells[ACol,ARow]:=''; 
end;
end;

Автор: kuzyara 28.9.2007, 17:23
легче будет использовать trystrtofloat ! 

тока на какое событие? кейдаун? smile  Мастера, подсказывайте!

О! по кейдауну отслеживать, не поменялось ли активная ячейка(или таб ушел к другому), а если поменялось, то проверять trystrtofloat.

понятно?

Добавлено @ 17:31
токачто нашел:

активную ячейку можно получить:

StringGrid1.Selection.Left - столбец
StringGrid1.Selection.Top - строка

Автор: Snowy 28.9.2007, 17:39
Стока и столбец и так переданы в событие.
StringGrid1.Cells[ACol,ARow]:=Value; // вот так надо

Автор: blondinka1987 28.9.2007, 19:11
Цитата

Ошибочка состоит в том, что больше одного символа ввести нельзя: то есть ввожу число 2, хочу ввести еще число3, чтобы получилось 23, но 2 убирается и остается только 23

Пропара: "но 2 убирается и остается только 3" - вот так надо. То есть проблема в том, что у чмисла более одной цифры не ввести: я ввожу 345, но остается только 5, каждое следующая цифра затирает предыдущую. Что я не так сделала, подскажите, пожалуйста. Заранее благодарю.

Автор: ALeXandrK 28.9.2007, 23:21
Код

procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,
  ARow: Integer; const Value: String);
var 
   i:integer;
   WasMinus, WasPoint: boolean;
begin

 for i:=0 to strlen(PChar(Value)) do
  begin
    if ((Value[i]>'0')  and (Value[i]<'9')) 
    or ((Value[i]='.') and not (WasPoint)) 
    or ((Value[i]='-') and not (WasMinus)) then
   begin 
      WasPoint := (Value[i]='.') or WasPoint;
      WasMinus := (Value[i]='-') or WasMinus;
      with StringGrid1 do
       Cells[ACol,ARow]:= Cells[ACol,ARow]+Value[i];
   end
   else 
     StringGrid1.Cells[ACol,ARow]:=''; 
 end;
end;

Автор: blondinka1987 29.9.2007, 15:56
огромадное пасиба smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)