Вопросы | 

Роман Коваленко
Использование устаревшего модуля LCLProc

В Lazarus 0.9.31 и последующих код работы с UTF-8 находится в модуле lazutf8.

Пример:

uses LazUTF8; // В место uses LCLProc;

Программирование на Lazarus Лекция 6.

Евгений Кашин
Lazarus. Проблема в коде из 8й лекции

Здравствуйте, прохожу сейчас курс "Программирование на Lazarus", и столкнулся с проблемой. В конце 8й лекции дан пример кода программы для подсчета Индекса массы тела. там для ввода роста и веса использованы TMaskEdit. для ввода веса использована маска ###;1;_ позволяющая не вводить все три цифры, что логично - большинство людей все таки весит меньше сотки. на самом деле, изначально я и маску для роста изменил на менее жесткую (так как вроде и для детей формула подходит), но уже потом когда пошли ошибки вернул исходный вариант... в общем, в чем проблема: если в строку для ввода веса ввести не все три цифры (что допускает маска), то при выполнении программы получим ошибку (" "68" is an invalid integer "). как я понял ошибку выдает StrToInt(ME2.Text). причем что интересно, если не вписать первую из трех цифр то ошибки нет. тоесть 68_ нельзя а _68 можно. Можно ли это как-то победить? может информация в лекции просто устарела и в новых версиях Lazarus (у меня 1.8.2) нужно писать иначе?

Віталій Шпитяк
Віталій Шпитяк 25 июля 2018 в 22:09

Чтобы не было ошибки, нужно вводить двухзначное число в формате "068" (добавлять ноль впереди). Но как по мне лучше использовать компонент Edit без масок ввода.

Денис Фомин
Денис Фомин 26 июля 2019 в 03:08

Работает нормально.
Маска ввода: "###;1;_"
Текст в поле: "_68". Лазарус: 2.0.2 2019-04-13.
Код: procedure TForm1.Button1Click(Sender: TObject);
begin
MessageDlg('', IntToStr(StrToInt(MaskEdit1.Text)), mtInformation,[mbOK],0);
end;

end.
А вообще, можно попробовать маску с "обязательными нулями", мне кажется, это будет более правильным решением.

Алексей Дмитриев
(с/р №2 - ошибка при компиляции кода ассемблера)

Добрый день! 

Спасибо за Ваш замечательный курс!

В самостоятельной работе №2 при компиляции модуля MyCript.pas (ОС: Windows 7 x64, Lazarus 1.4 win64) выдается ошибка на код ассемблера

mycript.pas(54,5) Error: Asm: [push reg32] invalid combination of opcode and operands
mycript.pas(95,5) Error: Asm: [pop reg32] invalid combination of opcode and operands

Я понимаю, что курс готовился для 32 разрядных ОС, но как быть в случае 64 разрядных систем?

Yan Fantalov
(самостоятельная работа 2) не создать ли отдельную процедуру?

В обработчиках пунктов меню FileCreate и FileOpen, а также в обработчике закрытия формы OnClose - в этих трех процедурах содержится один и тот же код

  {Если есть изменения текста, спросим пользователя, не хочет ли он сохранить
  их перед созданием нового текста}
  if Memo1.Modified then begin
    //если пользователь согласен сохранить изменения:
    if MessageDlg('Сохранение файла',
                  'Текущий файл был изменен. Сохранить изменения?',
         mtConfirmation, [mbYes, mbNo, mbIgnore], 0) = mrYes then
            FileSaveClick(Sender);
  end; //if

Позвольте спросить: не лучше ли было бы вынести этот код в отдельную процедуру, например - в обработчик события формы OnCloseQuery? Насколько я помню по опыту Delphi, вызов этой процедуры сам по себе не должен приводить к закрытию формы. А значит, ее можно использовать и в процедурах очистки Memo1 и чтения из файла... Или в Lazarus так делать нельзя?

Олег Гордеев
Олег Гордеев 6 октября 2015 в 12:57

В случае, когда на один и тот же код ссылаются несколько компонентов, лучше использовать TActionList. Создать в нем действие и ссылаться на него через событие Action различных компонентов.

Андрей Видикер
Неверное описание работы IF в 7 лекции

Цитата "если мы уберем скобки в первом примере:

if a = b or b then ShowMessage('Истина');

То сообщение "Истина" не будет выполнено. Ведь оператор IF делает только одну проверку, значит, он проверит только a = b. Часть условия с OR будет пропущена, потому что мы не заключили операнды в скобки" - конец цитаты

На самом деле проверяется всё выражение и ничего не будет пропущено, а причина в порядке выполнения логических операций - сначала выполняется OR а потом результат сравнивается с а.

Юрий Шутиков
Вид окна ShowMessage

Лекция 5 и ранее.

У вас в окне ShowMessage отображается значок с буквой "i". У меня - нет и ширина этого окна значительно больше. OC Windows-7 32 разряда, Лазарус 1.2.6, FPC 2.6.4. Почему так? 
 

Станислав Титков
Станислав Титков 23 ноября 2014 в 04:13

Что будет в таком окне - зависит от "оконного" менеджера в графической среде системы, а так же от различных настроек пользовательского интерфейса и т.н. "графических манифестов".

Виктор Чемов
Два раздела type

Здравствуйте. Прохожу самостоятельную работу с телефонный справочником. Для чего создавать еще один раздел type? Можно ли добавить описание записей сразу после описания формы?

TFMain = class(TForm)
    Panel1: TPanel;
    bAdd: TSpeedButton;
    bEdit: TSpeedButton;
    bDel: TSpeedButton;
    bSort: TSpeedButton;
    SG: TStringGrid;
  private
    { private declarations }
  public
    { public declarations }
  end;

  //здесь

TContact = record

......

Павел Семионов
Павел Семионов 19 мая 2015 в 10:53

Здравствуйте, Виктор! Заметил Ваше сообщение, когда изучал курс по Lazarus. Ну, насколько я знаю, разделов type, label, const и var может быть сколько угодно, и они могут как угодно чередоваться... Для чего нужно использовать несколько разделов вместо одного - в основном для удобства и наглядности. Иногда это бывает необходимо, но чаще (как и в Вашем случае) такой необходимости нет - просто для удобства.

Павел Семионов
Павел Семионов 19 мая 2015 в 10:56

Конечно - можно. Ведь в разделе type можно описать сколько угодно типов... Вот и опишите два типа - TFMain и TContact :) Можно и ещё типов добавить... Другое дело, что TFMain создаётся автоматически, а другие типы Вы будете создавать вручную - может, поэтому имеет смысл разделить их в два раздела type...

Илья Макаров
Почему часы в левом углу?

Прохожу самостаятельную работу с экранной заставкой, не могу понять почему у меня часы двигаються только по левому верхнему углу?

Наталья Ахмерова
Наталья Ахмерова 4 сентября 2014 в 19:47

Мне кажется это из-за размера формы (высота и ширина у нее небольшие). Поэтому случайные координаты формируются исходя из этих небольших значений. Форма только отображается на весь экран. Попробуйте сделать размеры формы больше и часы у вас будут бегать дальше.

Владимир Алексеев
Владимир Алексеев 15 мая 2015 в 13:22

Можно задать б размер формы, мож привязать начальное положение часов к центру или низу формы, но часы всё равно будут колыхаться вокруг начальных координат изза равно-вероятностной смены направления. Чтобы часы двигались по всему экрану, надо в алгоритме НЕ менять направление до достижения границы формы.

Геннадий Шатохин
Не могу получить перемещение границ-разделителей

Лекция 3, часть 2.

Указанные в тексте настройки "У нашей Panel1 установим Align = alTop. Затем добавим на форму разделитель TSplitter, и также установим у него Align = alTop" многоточие, указывающее на перемещаемую сторону будут расположены в противоположной стороне от указанного на риснке, тоесть вверху а на рисунке в низу. Таже проблема и с левой панелью. Даже при изменение параметра Align элемента TSplitter на противоположный, при запуске программы границы форм не перемещаются, хотя указаль меняет свой вид, указывая на действие перемещения

Людмила Гусева
Людмила Гусева 12 июля 2014 в 18:18

Быть может, Вы добавляете разделитель не на форму, а на панель? Поэтому он и привязывается к верхней границе панели. Посмотрите иерархию в дереве объектов - выделите форму и потом уже добавьте TSplitter.

Ольга Монахова
Ольга Монахова 28 июля 2014 в 21:58

У меня аналогичная проблема: с первым сплиттером все хорошо, я поменяла порядок объектов на форме, сделав верхними панель1 и сплиттер1, а вот с вертикальным сплиттером и панелью - беда-с...

Константин Полосухин
Проблема со скачванием.

Добрый день. Пытаюсь скачать программу. Все тщетно. Скачивал разные версии, но Нортон находит в скачиваемых файлах угрозу WS.Reputation.1 Что делать?(

Константин Полосухин
Константин Полосухин 9 июля 2014 в 09:47

Lazarus. Как сказано в первой лекции курса по программированию на Lazarus, ее можно скачать отсюда http://lazarus.freepascal.org/ Оттуда и качал.

Константин Полосухин
Константин Полосухин 9 июля 2014 в 11:43

Наконец после долгих попыток удалось скачать версию 1.0.12 Нортон сказал, что все впорядке)