• 0
Vitaldj

FMX и Windows, что нужно обновить?

Вопросы

Коллеги, писал пост ранее на похожую тему, а воз и ныне там. Сегодня опять гром среди ясного неба. Написал пользователь программы, говорит, что при запуске ошибка. У него windows vista. Вот скрин:

Ошибка программы.jpg

Написана, естественно в берлине. Кроме как обновить дрова видеокарты и directX я не нашел, что пописать пользователю.

Естественно вопрос в аудиторию:

1) Что это за ошибка?

2) Как с ней бороться?

3) Какие вещи нужно обновлять в windows, для исправление этой ошибки?

Вроде сказано и мы это обсуждали, что выпилили только windows XP, а остальное осталось. Эта ошибка в viste, до этого поста была в windows 7!!! Который я тоже так и не решил!

Помогите кто чем сможет, не комильфо это, декларировать поддержку операционной системы, а ее нет((

Изменено пользователем Vitaldj

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 ответа на этот вопрос

  • 0

Вообще это далеко не единственная проблема с Vista.

У меня ряд других проблем возникало с ней.

Но в итоге я просто решил отказаться от поддержки Висты. По крайней мере - не уделять ей особого внимания.

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

netmarketshare Windows.jpg

Понимаю - что это не выход из положения...

Будем и с ней разбираться, по мере возможности...

Изменено пользователем AlexG

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Берлин не виноват, ошибку возвращает WinAPI, кроме драйверов видео и DirectX ничего и не сделать, разве что DLL попробовать подсунуть.

В oldschool VCL не было обращений к directx, там были GDI и GDIplus,

а FMX видимо графику сразу по-взрослому рисует в 3d.

Изменено пользователем Камышев Александр

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
10 минут назад, Камышев Александр сказал:

Берлин не виноват, ошибку возвращает WinAPI, кроме драйверов видео и DirectX ничего и не сделать, разве что DLL попробовать подсунуть.

В oldschool VCL не было обращений к directx, там были GDI и GDIplus,

а FMX видимо графику сразу по-взрослому рисует в 3d.

Можно и перевести в режим GDI+

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
Только что, ZuBy сказал:

Можно и перевести в режим GDI+

интересно, код в студию

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

GlobalGDIPlusEnabled := true или как то так, Делфи под рукой нет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
2 минуты назад, ZuBy сказал:

GlobalGDIPlusEnabled := true или как то так, Делфи под рукой нет

Можно.

Можно и GlobalUseDXInDX9Mode := True; прописать

Проблема в другом! Это будет работать везде, так как это требуется прописать ДО инициализации приложения. Вообще ДО всего!

Т.е. это условие сработает для всех платформ Windows.

И тогда граблей будет намного больше, не говоря уже о тормозах приложения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
extern "C" int FMXmain()
{
	try
	{
		GlobalUseDXInDX9Mode = true;
		Application->Initialize();
		Application->CreateForm(__classid(TdmSUHttpClient), &dmSUHttpClient);
		Application->CreateForm(__classid(TForm1), &Form1);
		Application->Run();
	}

не заметил тормозов и проблем, работает вроде,

это конечно не графический движок современной видеоигры...

по теме должно помочь

Изменено пользователем Камышев Александр

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
4 минуты назад, Камышев Александр сказал:

extern "C" int FMXmain()
{
	try
	{
		GlobalUseDXInDX9Mode = true;
		Application->Initialize();
		Application->CreateForm(__classid(TdmSUHttpClient), &dmSUHttpClient);
		Application->CreateForm(__classid(TForm1), &Form1);
		Application->Run();
	}

не заметил тормозов и проблем, работает вроде,

это конечно не графический движок современной видеоигры...

по теме должно помочь

Ой, для паскаля (Delphi) можно код?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
18 минут назад, AlexG сказал:

Можно.

Можно и GlobalUseDXInDX9Mode := True; прописать

Проблема в другом! Это будет работать везде, так как это требуется прописать ДО инициализации приложения. Вообще ДО всего!

Т.е. это условие сработает для всех платформ Windows.

И тогда граблей будет намного больше, не говоря уже о тормозах приложения.

Ну можно читать с ини конфигурацию или запуск проги с параметром, что бы можно было пользователю дать альтернативу. А на счёт тормозов, они кажется будут только в режиме 3D

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
5 минут назад, Vitaldj сказал:

Ой, для паскаля (Delphi) можно код?

program Project1;

uses
  System.StartUpCopy,
  FMX.Forms, FMX.Types,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  GlobalUseDXInDX9Mode := True;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

По поводу тормозов.

Если у вас простое приложение - возможно вы и не заметите ничего.

Если приложение достаточно активно работает с GUI, или не дай Бог с видео, - "пиши пропало" .

Я на своем убедился на 100%. Большие и сложные списки, видео, и т.д. - и все...

Так-что это альтернатива только для таких случаев, когда ну уже никак не обойтись, даже жертвуя скоростью работы GUI.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
5 минут назад, AlexG сказал:

Если приложение достаточно активно работает с GUI, или не дай Бог с видео, - "пиши пропало" .

Странно, казалось бы команда GlobalUseDXInDX9Mode := True; указывает приложению работать с DirectX9 - на нем довольно шустро бегают игрушки, почему этот так кардинально сказывается на быстродействии?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Пробовал я на Windows 7, где был глюк:

GlobalUseDXInDX9Mode := True;

Не помогло. Попробую перекомпилировать исходник и выслать пользователю с vista. Отпишусь о результате.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
2 минуты назад, Vitaldj сказал:

Пробовал я на Windows 7

что показал дебаг? возможно это разные случаи с w7 и vista

и да результат пжлс

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
35 минут назад, Камышев Александр сказал:

что показал дебаг?

Дебаг ничего не показал, так как это в учреждении стоял такой комп, прав админа у меня не было, поэтому paserver не ставил.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

приложение на всех w7 падает? у меня w7 64, могу потестить

Изменено пользователем Камышев Александр

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
3 минуты назад, Камышев Александр сказал:

приложение на всех w7 падает? у меня w7 64, могу потестить

Да нет)) Я же писал в той ветке форума, что только на 1 компе, даже скрины прилагал!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

была такая же ситуация, падала служба на виндовс сервер 2012, ставить туда ничего нельзя, злой админ, удаленка и т.д.

пришлось в коде раскидывать запись лога в файл, и в несколько итераций вышел на проблемный код, можно так

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 минуту назад, Камышев Александр сказал:

была такая же ситуация, падала служба на виндовс сервер 2012, ставить туда ничего нельзя, злой админ, удаленка и т.д.

пришлось в коде раскидывать запись лога в файл, и в несколько итераций вышел на проблемный код, можно так

Проблема то как раз в том, что вылетает ошибка в процессе инициализации))). То есть из за "движка" FMX

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
begin
  //сюда запись 1 в файл>
  Application.Initialize;
  //сюда запись 2 в файл>
  Application.CreateForm(TForm1, Form1);
  //сюда запись 3 в файл>
  Application.Run;
end.

для начала так, будет понятно на инициализации или при создании формы или после run

не верю что движок FMX падает, да и нет его, движка :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
4 часа назад, Камышев Александр сказал:

begin
  //сюда запись 1 в файл>
  Application.Initialize;
  //сюда запись 2 в файл>
  Application.CreateForm(TForm1, Form1);
  //сюда запись 3 в файл>
  Application.Run;
end.

для начала так, будет понятно на инициализации или при создании формы или после run

не верю что движок FMX падает, да и нет его, движка :)

Может я неважно выразился про "до инициализации" но ваш метод покажет, что все 3 записи будут существовать. То есть сама программа загружается, проходят все onshow и другие события. А глюк на этапе прорисовке. Ну не знаю как сказать))). То есть показывается главная форма, часть данных, а по какой то причине честь данных не показывается и поверх ошибка. Пытаешься нажать на "ок" этой ошибки, а поверх такая же. Или поначалу пропадает часть данных, а потом ошибка. Вот там есть скрины. там

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Да проблема как раз не с grid'ами, а вообще с отображениями. А вы Сиэтл используете? В Берлине grid переписали почти полностью. Да, ИМХО grid для мобильных разработок - зло!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Похожий контент

    • От Вадим Смоленский
      В своем проекте (это японско-русский словарь) мне приходится выводить на TImage.Bitmap.Canvas хранящиеся в юникоде иероглифы, причем шрифт пользователь может выбрать сам. Столкнулся с неприятным явлением: разные шрифты располагают выводимый символ на разной высоте, в результате чего иероглиф часто не вписывается в предназначенную для него область. По умолчанию принят шрифт Tahoma, с ним всё хорошо:

      Но вот шрифт Yu Mincho:

      А вот, еще хлеще, Kozuka Gothic:

      Вопрос: что за параметр регулирует вертикальное смещение, можно ли его вынуть и с ним работать?
    • От Вадим Смоленский
      Некоторые юзеры (видимо, из близоруких) прибегают к масштабированию экрана и требуют, чтобы ваше приложение тоже масштабировалось. Когда мой проект был в VCL, я смотрел на параметр Screen.PixelsPerInch и учитывал его значение в своем коде. В FireMonkey этого нет. Я пытался понять, как это делать теперь, и окончательно запутался. Microsoft на официальном сайте упоминает функцию SystemParametersInfo с параметром SPI_GETLOGICALDPIOVERRIDE, но делает оговорку, что такую конфигурацию лучше не использовать - дескать, в новых версиях Windows она не будет работать. Взамен рекомендуют функцию GetScaleFactorForDevice, но тут же заявляют, что под Windows 8 и она работать не будет, а будет работать только GetScaleFactorForMonitor. Голова кругом. Нет ли у кого, случаем, готового решения, которое работало бы на любых Windows - хотя бы от семерки до десятки?
      Еще один момент, который я не могу понять - в Windows 10 в настройках экрана, помимо масштаба в процентах, можно выбирать еще и разрешение в пикселях. По-моему, раньше такого разделения не было, хотя могу ошибаться. Связаны ли эти настройки друг с другом? И как они соотносятся со старым добрым DPI?
    • От Вадим Смоленский
      Работая в Berlin, подправил стиль для одного компонента посредством вызова "Edit Custom Style" во всплывающем меню. Потом перешел на Tokyo; потом поменял компьютер и установил на него Tokyo заново. Сейчас вижу, что компонент отображается в стиле по умолчанию. Никаких сообщений по поводу пропавшего стиля не припомню. Где мне найти и как опять подключить мой отредактированный стиль?
    • От Вадим Смоленский
      В своем проекте (это японско-русский словарь) я часто вывожу текст на TImage методом TCanvas.FillText, и результат выглядит так:

      Один из тестеров, у которого установлена Windows XP, прислал скриншот того, что выводится у него:

      Ровно такую же безобразную картину я видел у себя, когда, экспериментируя с быстродействием, вставлял в файл dpr операторы  FMX.Types.GlobalUseDX:=False или FMX.Types.GlobalUseDirect2D:=False
      То ли в XP эти установки приняты по умолчанию, то ли так сконфигурирована система у тестера. Первое, что приходит в голову - вставить в код присвоение обеим упомянутым переменным значения True. Но прежде, чем предпринять такую попытку, хотелось бы услышать мнение экспертов. В чем здесь корень зла?
    • От Вадим Смоленский
      Записываю русский текст в файл:
      procedure WriteToFile; var F: TextFile; S: string; begin S:='Русский текст'; AssignFile(F,MyFile.txt'); ReWrite(F); WriteLn(F,S); CloseFile(F); end; Тип данных string - по идее, то же, что WideString. То бишь, в строку S записан юникод. Тем не менее, открывая потом файл, вижу, что русский текст сохранен в ANSI. Как добиться его сохранения в юникоде?
    • От Вадим Смоленский
      Писал на Delphi 10.2 Tokyo под Windows. У тестеров приложение валится при первой же попытке обращения к БД с сообщением "unable to open database file". У меня на компе всё нормально. Файл sqlite3.dll версии 3.21.0.0 в дистрибутив включен, кладется рядом с исполнимым файлом. Что может быть не так?
    • От Вадим Смоленский
      В своем VCL-проекте я использовал оригинальный способ застраховаться от повторного запуска приложения. Обычно это делают через Mutex. Но умные люди на experts-exchange.com много лет назад посоветовали мне следующее:
      // в главном окне: protected procedure CreateParams(var Params: TCreateParams); override; procedure TMyApp.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.WinClassName:='MyAPP String ID'; end; // В файле .dpr: var AWnd, A1Wnd: HWND; AWnd:=FindWindow('MyApp String ID',nil); if IsWindow(AWnd) then begin A1Wnd := GetWindow(AWnd, GW_OWNER); if IsWindow(A1Wnd) then AWnd := A1Wnd; ShowWindow(AWnd, SW_RESTORE); SetForegroundWindow(AWnd); end else begin Application.Initialize; ....... end Способ хорош тем, что он не просто блокирует повторный запуск, а выводит уже запущенное приложение на передний план, тычет юзера в него носом. Но при переходе на FireMonkey возникла закавыка: компилятору не нравится TCreateParams. Говорит: undeclared identifier. Чем бы его заменить?
    • От Вадим Смоленский
      Перейдя с Берлина на Токио, столкнулся с неприятным феноменом. Раньше, выводя на экран форму с обилием TLabel, которые нужно было заполнить текстом и выровнять, я спокойно ставил везде AutoSize=True, присваивал нужные значения полям Text, после чего ширина каждого TLabel принимала новое значение, и мой код их красиво выравнивал. Теперь же ширина не меняется до полной отрисовки на экране всего и вся. Соответственно, на этапе выравнивания код оперирует со значениями ширины, которые были еще на этапе дизайна. Как следствие - всё наперекосяк! Что делать?
    • От Вадим Смоленский
      Windows, Berlin. Когда TWebBrowser на форме получает фокус, он начинает перехватывать все нажатия клавиш. До FormKeyDown управление уже не доходит. Отключение свойства браузера CanFocus не помогает, своего события OnKeyDown у него нет. Как быть? В идеале хотелось бы оставить браузеру навигационные клавиши (стрелки, PgDn, PgUp, Home, End), но все остальные отправлять на форму. Возможно ли это?
    • От Вадим Смоленский
      Работаю в Windows с FireDAC (SQLite). При каждом обращении к базе данных экранный курсор превращается в песочные часы с надписью SQL. Пользователи моего продукта далеки от программирования и ни про какой SQL не слыхивали, им это совершенно ни к чему. Как мне подавить этот феномен? В свойствах TFDConnection я ничего на эту тему не нахожу...
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу