Проект *для новичка*(помощь)

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Nikis
незнакомец
Сообщения: 3
Зарегистрирован: 27.03.2021 00:23:41

Проект *для новичка*(помощь)

Сообщение Nikis »

Добрый день! Делаю проект для подсчёта пиццы с использованием if else then и тд. И получается всё работает, но..
Надо, что бы button2 *если значение 0 или меньше 0*,(screenshot_84) было неактивно. А если *больше 0*, то работало как обычно. Подскажите какую команду использовать) Заранее спасибо!
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Seenkao
энтузиаст
Сообщения: 578
Зарегистрирован: 01.04.2020 02:37:12
Контактная информация:

Сообщение Seenkao »

Как вы хотите чтоб вам помогли? Вы пишите проблему, но в скринах ни где не отображена проблема. Ни кто не знает, какая кнопка у вас - button2.
screenshot_84 - вообще ни где в коде не видно.

Если нужно, чтоб кнопка была не активна, то у кнопки есть свойство button2.active = true/false .
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 839
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

Забудь про то что пишут в книгах и используй сразу TActionList. Бросаешь его на форму, создаешь там "действие". В свойствах есть процедура выполнения и обновления. Выполнение - то что у тебя сейчас в OnClick, а обновление как раз когда кнопка обновляет свое состояние. Можно написать условие и добавить строку (Sender as TAction).Enabled:=True/False;
Дальше просто нужным кнопкам в свойствах выбираешь параметр Action.
Nikis
незнакомец
Сообщения: 3
Зарегистрирован: 27.03.2021 00:23:41

Сообщение Nikis »

Sharfik писал(а):Забудь про то что пишут в книгах и используй сразу TActionList. Бросаешь его на форму, создаешь там "действие". В свойствах есть процедура выполнения и обновления. Выполнение - то что у тебя сейчас в OnClick, а обновление как раз когда кнопка обновляет свое состояние. Можно написать условие и добавить строку (Sender as TAction).Enabled:=True/False;
Дальше просто нужным кнопкам в свойствах выбираешь параметр Action.

Я не особо (вообще не умею) умею пользоваться TActionList. Я сделал через
if StrToFloat(edit1.Text)=2 then begin button2.Enabled:=false; end; и
if StrToFloat(edit1.Text)>1 then begin button2.Enabled:=true; end;
Но хочу узнать совет. Если в edit1.text будет ничего(пустота), то это получается char. Можно как-то от него избавиться. Например, если edit1.text это char(ничего), то это записывается в переменную как 1. Можно такое сделать?
iskander
энтузиаст
Сообщения: 630
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

Кроме StrToFloat() есть ещё TryStrToFloat() и StrToFloatDef().
И, кмк, Ингредиенты.
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 839
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

Nikis писал(а):if StrToFloat(edit1.Text)=2 then begin button2.Enabled:=false; end; и
if StrToFloat(edit1.Text)>1 then begin button2.Enabled:=true; end;
Но хочу узнать совет. Если в edit1.text будет ничего(пустота), то это получается char. Можно как-то от него избавиться. Например, если edit1.text это char(ничего), то это записывается в переменную как 1. Можно такое сделать?

Есть в строке будет "Абвгда../*" или пробел, то будет ошибка исполнения.
DedFrend
постоялец
Сообщения: 157
Зарегистрирован: 25.11.2018 11:21:50

Сообщение DedFrend »

Вот, примерно так
https://disk.yandex.ru/d/rwkEImFl8Tyjlg

Из замечаний, которые относятся ко всем "новичкам"
1) НИКОГДА не оставляйте свойства Name автоматически назначенными. Первое, что следует сделать, поместив компонент
на форму - дать внятное название на английском языке (никаких транслитов!). Исключением являются компоненты к которым никогда не бывает явных обращений в тексте программы, например, TLabel. Очень желательно предварить название префиксом из двух-трех символов, соответствующих типу компонента. cb - для TCheckBox, rb для TRadioBox.
Это не только облегчит чтение текста программы, но и поможет использовать автодополнение.
2) Избегайте использовать одну величину в разных смыслах. В начальном варианте программы Цена ингридиентов есть
в качестве составной части заголовка и есть значение, которое добавляется к расчетной цене. Чтобы этого избежать, я добавил
специальные компоненты для цены ингридиентов.
3) Выделяйте смысловые блоки в отдельные процедуры/функции. В данном случае я выделил расчет скидки в отдельную функцию
CalcDiscount
Nikis
незнакомец
Сообщения: 3
Зарегистрирован: 27.03.2021 00:23:41

Сообщение Nikis »

DedFrend писал(а):Вот, примерно так
https://disk.yandex.ru/d/rwkEImFl8Tyjlg

Из замечаний, которые относятся ко всем "новичкам"
1) НИКОГДА не оставляйте свойства Name автоматически назначенными. Первое, что следует сделать, поместив компонент
на форму - дать внятное название на английском языке (никаких транслитов!). Исключением являются компоненты к которым никогда не бывает явных обращений в тексте программы, например, TLabel. Очень желательно предварить название префиксом из двух-трех символов, соответствующих типу компонента. cb - для TCheckBox, rb для TRadioBox.
Это не только облегчит чтение текста программы, но и поможет использовать автодополнение.
2) Избегайте использовать одну величину в разных смыслах. В начальном варианте программы Цена ингридиентов есть
в качестве составной части заголовка и есть значение, которое добавляется к расчетной цене. Чтобы этого избежать, я добавил
специальные компоненты для цены ингридиентов.
3) Выделяйте смысловые блоки в отдельные процедуры/функции. В данном случае я выделил расчет скидки в отдельную функцию
CalcDiscount


Спасибо большое! Это мне сейчас сильно пригодится)
Ответить