Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите найти ошибку 
:(
    Опции темы
blondinochka
Дата 28.9.2007, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 14.9.2007

Репутация: нет
Всего: нет



Люди добрые, помогите человеку - от обилия кода у меня уже в глазах темнеет 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;

PM MAIL   Вверх
kuzyara
Дата 28.9.2007, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 215
Регистрация: 13.11.2006

Репутация: нет
Всего: 1



легче будет использовать trystrtofloat 

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

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

понятно?

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

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

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

Это сообщение отредактировал(а) kuzyara - 28.9.2007, 17:32
--------------------
подпись
PM MAIL   Вверх
Snowy
Дата 28.9.2007, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Стока и столбец и так переданы в событие.
StringGrid1.Cells[ACol,ARow]:=Value; // вот так надо
PM MAIL   Вверх
blondinka1987
Дата 28.9.2007, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 28.9.2007

Репутация: нет
Всего: нет



Цитата

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

Пропара: "но 2 убирается и остается только 3" - вот так надо. То есть проблема в том, что у чмисла более одной цифры не ввести: я ввожу 345, но остается только 5, каждое следующая цифра затирает предыдущую. Что я не так сделала, подскажите, пожалуйста. Заранее благодарю.
PM MAIL   Вверх
ALeXandrK
Дата 28.9.2007, 23:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 1
Всего: 6



Код

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;



--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
blondinka1987
Дата 29.9.2007, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 28.9.2007

Репутация: нет
Всего: нет



огромадное пасиба smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0744 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.