Ошибка в Win-XP при вызове ShowMessage из lpr-файла

Общие вопросы программирования, алгоритмы и т.п.

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

Ошибка в Win-XP при вызове ShowMessage из lpr-файла

Сообщение shyub » 06.04.2016 17:59:38

При инициализации программы проверяю разрешение экрана, наличие запущенной копии и при помощи ShowMessage сообщаю об этом пользователю. В Windows-7 всё работает без проблем. Но в Windows-XP при попытке вызова ShowMessage возникает ошибка. Вот отрывок кода:
Код: Выделить всё
program project1;

{$mode objfpc}{$H+}

uses
  Dialogs,
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms, Unit1, Unit2, Unit3;

{$R *.res}

begin
  if (Screen.Width<>1366)or(Screen.Height<>768) then begin
    ShowMessage('Установите разрешение экрана монитора 1366 x 768.'); // Вызывает ошибку. !!!
  end;
  RequireDerivedFormResource := True;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.Run;
end.

Почему так происходит и как с этим бороться?
shyub
постоялец
 
Сообщения: 112
Зарегистрирован: 25.11.2014 23:15:19

Re: Ошибка в Win-XP при вызове ShowMessage из lpr-файла

Сообщение Лекс Айрин » 06.04.2016 18:19:48

shyub, это старый прикол. Попробуйте использовать полную форму if
Код: Выделить всё
if (Screen.Width<>1366)or(Screen.Height<>768) then begin
    ShowMessage('Установите разрешение экрана монитора 1366 x 768.'); // Вызывает ошибку. !!!
  end else begin end;


Добавлено спустя 3 минуты 36 секунд:
Если поможет, то это просто баг, который никогда не уберут из-за привычки отлавливать исключения, не думая почему оно возникает.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Ошибка в Win-XP при вызове ShowMessage из lpr-файла

Сообщение zub » 06.04.2016 19:05:37

Какая полная форма? Нету во фрипаскале с этим проблем, есть невнимательные програмисты.
просто стоит делать подобные проверки после Application.Initialize
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Ошибка в Win-XP при вызове ShowMessage из lpr-файла

Сообщение Лекс Айрин » 06.04.2016 19:40:44

zub писал(а): Нету во фрипаскале с этим проблем,


угу... у кого-то может и не было...
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Ошибка в Win-XP при вызове ShowMessage из lpr-файла

Сообщение shyub » 06.04.2016 20:52:09

Убрал конструкцию IF и написал просто:
...
Код: Выделить всё
begin
  ShowMessage('Установите разрешение экрана монитора 1366 x 768.'); // Вызывает ошибку. !!!
  RequireDerivedFormResource := True;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
...

Результат - ошибка в Windows-XP, в Windows-7 проблем не возникает. (Использую Lazarus 1.6, FPC - 3.0.0) Оно особо-то и не принципиально, однако, хотелось бы понять, почему такое происходит.
shyub
постоялец
 
Сообщения: 112
Зарегистрирован: 25.11.2014 23:15:19

Re: Ошибка в Win-XP при вызове ShowMessage из lpr-файла

Сообщение Little_Roo » 06.04.2016 21:04:35

или туплю после педсовета, или добавить в uses Windows :?:
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Ошибка в Win-XP при вызове ShowMessage из lpr-файла

Сообщение zub » 06.04.2016 21:25:46

попробуй
Код: Выделить всё
begin
  RequireDerivedFormResource := True;
  Application.Initialize;
  ShowMessage('Установите разрешение экрана монитора 1366 x 768.');
  Application.CreateForm(TForm1, Form1);
...
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Ошибка в Win-XP при вызове ShowMessage из lpr-файла

Сообщение shyub » 06.04.2016 21:40:50

Да, сделал вот так:
Код: Выделить всё
.....
begin
  RequireDerivedFormResource := True;
  Application.Initialize;
  ShowMessage('Проверка.');
  if (Screen.Width<>1366)or(Screen.Height<>768) then begin 
    ShowMessage('Установите разрешение экрана монитора 1366 x 768.');
  end;
  Application.CreateForm(TForm1, Form1);
.....

Всё заработало и в XP, и в Win-7. Спасибо.
И ещё такой вопрос. Я указал не полный текст, у меня ещё происходит проверка, чтобы не запустилась вторая копия приложения. Дело в том, что сразу же после запуска приложения происходит доступ к одним и тому же ресурсам (БД, COM-порту, реестру, файлам). Если у меня выполнится вот эта часть:
Код: Выделить всё
.....
begin
  RequireDerivedFormResource := True;
  Application.Initialize;
.....

но дело до создания формы не дойдёт, то не навредит ли оно уже работающей программе?
shyub
постоялец
 
Сообщения: 112
Зарегистрирован: 25.11.2014 23:15:19

Re: Ошибка в Win-XP при вызове ShowMessage из lpr-файла

Сообщение zub » 06.04.2016 21:54:16

Думаю нет
Код: Выделить всё
Application.Initialize;

инициализация лцлного барахла.

Но до проверки выполнится код инициализации модулей в uses этого lpr-файла. Убедитесь что там нет ничего из
происходит доступ к одним и тому же ресурсам (БД, COM-порту, реестру, файлам).
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: xchgeaxeax и гости: 29

Рейтинг@Mail.ru