Страница 1 из 1
Ошибка в Win-XP при вызове ShowMessage из lpr-файла
Добавлено: 06.04.2016 16:59:38
shyub
При инициализации программы проверяю разрешение экрана, наличие запущенной копии и при помощи 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.
Почему так происходит и как с этим бороться?
Re: Ошибка в Win-XP при вызове ShowMessage из lpr-файла
Добавлено: 06.04.2016 17:23:24
Лекс Айрин
shyub, это старый прикол. Попробуйте использовать полную форму if
Код: Выделить всё
if (Screen.Width<>1366)or(Screen.Height<>768) then begin
ShowMessage('Установите разрешение экрана монитора 1366 x 768.'); // Вызывает ошибку. !!!
end else begin end;
Добавлено спустя 3 минуты 36 секунд:Если поможет, то это просто баг, который никогда не уберут из-за привычки отлавливать исключения, не думая почему оно возникает.
Re: Ошибка в Win-XP при вызове ShowMessage из lpr-файла
Добавлено: 06.04.2016 18:05:37
zub
Какая полная форма? Нету во фрипаскале с этим проблем, есть невнимательные програмисты.
просто стоит делать подобные проверки после Application.Initialize
Re: Ошибка в Win-XP при вызове ShowMessage из lpr-файла
Добавлено: 06.04.2016 18:40:44
Лекс Айрин
zub писал(а): Нету во фрипаскале с этим проблем,
угу... у кого-то может и не было...
Re: Ошибка в Win-XP при вызове ShowMessage из lpr-файла
Добавлено: 06.04.2016 19:52:09
shyub
Убрал конструкцию
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) Оно особо-то и не принципиально, однако, хотелось бы понять, почему такое происходит.
Re: Ошибка в Win-XP при вызове ShowMessage из lpr-файла
Добавлено: 06.04.2016 20:04:35
Little_Roo
или туплю после педсовета, или добавить в uses Windows

Re: Ошибка в Win-XP при вызове ShowMessage из lpr-файла
Добавлено: 06.04.2016 20:25:46
zub
попробуй
Код: Выделить всё
begin
RequireDerivedFormResource := True;
Application.Initialize;
ShowMessage('Установите разрешение экрана монитора 1366 x 768.');
Application.CreateForm(TForm1, Form1);
...
Re: Ошибка в Win-XP при вызове ShowMessage из lpr-файла
Добавлено: 06.04.2016 20:40:50
shyub
Да, сделал вот так:
Код: Выделить всё
.....
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;
.....
но дело до создания формы не дойдёт, то не навредит ли оно уже работающей программе?
Re: Ошибка в Win-XP при вызове ShowMessage из lpr-файла
Добавлено: 06.04.2016 20:54:16
zub
Думаю нет
инициализация лцлного барахла.
Но до проверки выполнится код инициализации модулей в uses этого lpr-файла. Убедитесь что там нет ничего из
происходит доступ к одним и тому же ресурсам (БД, COM-порту, реестру, файлам).