Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2010, 07:05   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
Вопрос Отнимать значение по нажатию на кнопку

Доброе утро! Захотелось сделать, чтобы от одного значения отнималась единица, т.е. значение уменьшалось и результат выводился в другое место. Написал так:
Код:
procedure TMainForm.StringGrid1KeyPress(Sender: TObject; var Key: Char);
var
 i: integer;
begin
 i:=1;
 if Key = #13 then
 begin
  MainForm.StringGrid1.RowCount:=MainForm.StringGrid1.RowCount + 1;
  MainForm.StringGrid1.Row:=MainForm.StringGrid1.RowCount - 1;
  MainForm.Label31.Caption:=IntToStr(StrToInt(MainForm.Label30.Caption) - i);
 end;
end;
но, значение уменьшается только один раз. Подскажите как реализовать это? Через Dec(i) или еще как..
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 26.11.2010, 07:28   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

А сколько раз надо?

Код:
MainForm.Label31.Caption:=IntToStr(StrToInt(MainForm.Label30.Caption) - i);
Это как-то интересно выглядит... Заведите себе переменную, что Вам 4-е байта жалко? Такие манипуляции с видимыми компонентами очень замедляют работу программы.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 26.11.2010, 07:33   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

В смысле сколько раз надо? Пока значение от которого отнимает не станет равно 0
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 26.11.2010, 07:43   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Если я правильно понял задумку, то i должна быть глобальной переменной, иначе при каждом входе i будет равен 1.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 26.11.2010, 07:52   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Сделал переменную i глобальной, проинициализировал ее при создании формы и поставил начальное значение = 1, но все равно отнимает только один раз
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 26.11.2010, 07:57   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Еще раз. Почему один раз? Вы нажимаете на клавишу, он отнимает, нажимаете, отнимает. Верно или нет?
Отнять ведь надо от MainForm.Label30.Caption ?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 26.11.2010, 08:09   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Цитата:
Отнять ведь надо от MainForm.Label30.Caption?
Да, от него. Я нажимаю на кнопку, а значение отнимается только один раз. Нажимаю еще раз и больше не отнимается.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 26.11.2010, 08:11   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
Да, от него. Я нажимаю на кнопку, а значение отнимается только один раз. Нажимаю еще раз и больше не отнимается.
По-моему и не должно . Переменная i, где-нибудь увеличивается или всегда равно единице?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 26.11.2010, 08:20   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Она всегда равна единице. Нет, нигде больше не увеличивается.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 26.11.2010, 08:35   #10
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
Она всегда равна единице. Нет, нигде больше не увеличивается.
А не плохо бы увеличивать , здесь же в условии. По двум причинам - потому что, я так понял, что значение от которого вычитают либо не изменяется, либо изменяется редко. Во-вторых, нафига тогда i? Можно просто вычитать единицу .
Чтобы такой путаницы не происходило - комментируйте каждую строку того участка кода, который Вы плохо представляете. В идеале нужно комментировать каждую строку программы. Причем комменты должны быть осмысленными - не просто вычтем единицу из Капшена , а например, уменьшим число строк таблицы. Это позволяет разобраться в программе, кроме того прописывая такие комменты, Вы невольно проговариваете алгоритм про себя, а это способствует поиску и устранению ошибок и вообще лучшему понимаю работы той или иной функции.
Далее хранение обычных числовых данных в строке не имеет смысла, если имеются стандартные средства для хранения таких данных. Далее компоненты следует использовать по назначению - Лейбл предназначен для отображения информации, а не для ее хранения. Это медленно и не удобно. Я уже молчу о том, что Label31 - одно из самых неудачных названий, имена должны быть осмысленными. Короткие однобуквенные или стандартные имена присваиваемые Дельфи даются обычно только переменным или компонентам, несущим кратковременный и вспомогательный характер. Так и поступайте - храните данные в переменной, а в Лейбле отображайте ее. Ряд таких несложных правил значительно ускоряют отладку. Ну это все мое ИМХО, дело Ваше. Просто имея определенную методику, немного замедляющим процесс написания программы можно значительно ускорить процесс отладки, а также спасти пару клоков шерсти под подмышками.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 26.11.2010 в 08:40.
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вводить цифры в эдит контрол и они должны по нажатию на кнопку переводится в листбокс molo4nik Общие вопросы C/C++ 12 09.12.2011 22:53
Сдвинуть прямоугольник по нажатию на кнопку artemavd Общие вопросы Delphi 3 21.09.2010 07:27
Показать ADOConnection1.Connectionstring по нажатию на кнопку hitch1 БД в Delphi 9 07.12.2009 17:44
Как закрыть MDIChild форму по нажатию на кнопку AndreyF Общие вопросы Delphi 4 11.07.2009 16:26
по нажатию на кнопку вызвать другой фаил с расширением exe который находится в той же папке 1234 Общие вопросы Delphi 3 05.08.2008 12:32