• 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 для мобильных разработок - зло!

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


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

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

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

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

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

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

Войти

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

Войти

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

    • От Вадим Смоленский
      В декабре я задавал здесь вопрос о борьбе с перехватами нажатий клавиш компонентом TWebBrowser. Продвинутый пользователь Kami посоветовал тогда, раз уж меня интересует только Windows, поставить хук на клавиатуру. Поделился полезной ссылкой. Добавил, что можно еще много чего нагуглить. Что-то действительно нагуглилось - но не в том объеме, чтобы я смог четко понять, как это следует делать. Вопросов много. Куда именно должна быть воткнута функция KeyboardProc? Что в ней должно содержаться, чтобы управление передавалось уже написанному обработчику события FormKeyDown? Многие также упоминают о возникающих проблемах с юникодом, и хорошо было бы понять, как уберечься от них.
      Буду очень признателен, если кто-нибудь осветит эту темную для меня материю.
    • От Вадим Смоленский
      Как преобразовать тип HString в обычную строку?
      Нагуглил упоминания о функции TWindowsString.HStringToString, которая должна находиться в System.WinrtHelpers. Но такого юнита в поставке Delphi не наблюдаю. Может, его можно где-нибудь раздобыть? Или существуют иные способы?
    • От Вадим Смоленский
      Пытаясь разобраться с проблемой размещения файлов в UWP-приложениях, пришел к необходимости создать в своем коде объект класса ApplicationData. Этот класс описан на соответствующей странице майкрософтовской документации, где в самом начале обозначено следующее:
      Namespace:  Windows.Storage
      Assemblies:  Windows.Storage.dll, Windows.dll
      Юнита с именем Windows.Storage или Winapi.Windows.Storage я в поставке Delphi не наблюдаю. Неудивительно, что попытки вставить соответствующие идентификаторы в раздел uses ни к чему не ведут. Как в таких случаях поступают? Откуда берут необходимое?
    • От Вадим Смоленский
      Хочу еще раз обратиться к коллективному разуму в надежде все-таки разобраться с тем, как должен быть устроен пакет appx для размещения в Microsoft Store. А именно - как организовать размещение настроек и пользовательских файлов в специально отведенных для этого папках, а не в установочном каталоге, что запрещено.
      Вся информация, которую я смог к сегодняшнему дню накопать, размещена на этой странице майкрософтовской документации и сводится к тому, что при инсталляции пакета appx автоматически создается хранилище пользовательских данных из трех папок. Цитирую: one for local files, one for roaming files, and one for temporary files. В общем-то, это удобно - по крайней мере, не нужно заботиться о деинсталляции: ровно эти же папки при удалении программы и сотрутся.
      Вопрос в том, как к этому хранилищу обратиться. В идеале, конечно же, хотелось бы иметь возможность уже в Deployment Manager обозначить для некоторых файлов, что они должны быть положены в это хранилище, а не в установочный каталог. Но как это можно сделать и можно ли сделать вообще, мне понять не удалось. Списка констант для параметра Remote Path я найти не смог, а отдельные упоминаемые тут и там константы ('res', 'assets', 'classes', 'library') явно относятся к мобильным платформам, а не к Windows.
      Если так поступить нельзя, остается класть всё в установочный каталог, а при первом запуске приложения переносить в нужное место. Но опять же: как приложению заполучить полный адрес этого места? Ведь это вовсе не привычные нам CSIDL_APPDATA и не CSIDL_COMMON_APPDATA, это нечто новое, доселе невиданное, в документации называемое "local app data store". На той же странице есть пример соответствующего кода с использованием класса ApplicationData, но он написан на незнакомом мне C#. Там есть также ссылки на описание класса ApplicationData, но по ссылкам тоже C# и C++. Был бы очень признателен, если бы кто-нибудь показал мне, как заполучить адрес local app data store средствами Delphi.
    • От Вадим Смоленский
      Целый месяц бодаюсь с Microsoft Store, пытаясь разместить у них свое UWP-приложение в виде пакета appx. Получаю отлуп за отлупом. Проблема: приложение должно располагать папкой для пользователя, отличной от установочного каталога, где он мог бы сохранять файлы. Там же должны храниться файлы настроек. Раньше, создавая дистрибутив в InnoSetup, я всегда предусматривал создание такой папки по адресу <user>\AppData\Roaming\MyApp. Теперь всё полагается указывать в разделе Deployment - но как там указать такой адрес? Вроде бы, есть графа "Remote path", и логично существовать каким-то макросам для нее, вроде AppData - но никакой информации на эту тему я найти не смог. Видел лишь упоминания таких макросов, как res, assets, classes, library - однако все они, как я понял, относятся к мобильным платформам.
      Попытки обходных маневров не удались. Сначала я решил всё класть в установочный каталог, а при первом запуске создавать нужную папку и перебрасывать в нее несколько файлов. На моем компьютере это работает, но при тестировании в Microsoft Store отчего-то валится (присылают скриншот с сообщением "Access is denied"). То ли нельзя стирать файлы в установочном каталоге, то ли нельзя в таком режиме создавать новый каталог. Потом я прочитал где-то, что UWP-приложениям всё равно, где лежат файлы, они могут их менять даже в установочном каталоге. Попробовал всё валить в одну кучу и так работать. Увы, опять отрапортовали о падении ("The app tries to create a file under WindowsApps folder").
      Получается, что все-таки нужно как-то заставить appx-дистрибутив создавать при установке папку по адресу <user>\AppData\Roaming\MyApp. Но как?
      Спрашивал на experts-exchange, там знатоков не нашлось. Если и здесь нет, может, кто-нибудь хотя бы подскажет, в каких местах есть смысл спросить?
    • От Вадим Смоленский
      Проект для Windows, автономная БД SQLite, никаких клиент-серверных дел, компоненты и операции самые простые: SQL-запрос в TFDQuery, вызов метода Open. Всё работает нормально, но отдельные пользователи жалуются на эпизодические непредсказуемые падения при поиске. Интересно, что после каждого такого падения всё опять функционирует нормально, но потом приложение не удается нормально закрыть, приходится вызывать диспетчер задач.
      Стабильно воспроизвести не могут ни пользователи, ни я сам. Мне удалось это считанные несколько раз - я лишь смог убедиться через отладчик, что проблема при закрытии связана именно с базой данных: вставлял в обработчик FormCloseQuery оператор TFDConnection.Close - и программа пару раз упала именно на этом операторе.
      Найти корень зла пока не удалось. Показалось только, что проблема возникает лишь тогда, когда поиск приводит к слишком большому (несколько тысяч) числу записей в TFDQuery.
      Может, стоит поменять какие-нибудь установки в TFDConnection или TFDQuery ?
    • От Вадим Смоленский
      Упаковываю свое приложение в appx при помощи кнопки Deploy в Deployment Manager. При этом в разделе Опций "Manifest File" выставлено "Auto Generate". В итоге получается файл AppxManifest.xml; насколько я понимаю, этот манифест также включается в состав итогового пакета appx.
      Пробую загрузить получившийся appx в Microsoft Store. Грузится очень долго и в итоге выдает ошибку: "You don't have permissions to specify the following namespaces in the appx manifest file of the package MyApp.appx: restricted namespace: http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
      В файле AppxManifest.xml действительно отыскивается такой фрагмент. Убираю его, заодно убираю фрагмент  <Capabilities> ... </Capabilities> (если не убрать, получившийся xml даже не отобразится в браузере), переименовываю в MyApp.manifest, меняю установку для манифеста на "Custom", указываю имя. Всё повторяю. Результат ровно тот же.
      Полностью меняю содержимое MyApp.manifest, беря шаблон отсюда. Всё повторяю. Результат опять тот же. Опять магазину не нравится фрагмент манифеста насчет restricted capabilities, которого теперь, по идее, там быть не должно.
      Такое ощущение, что при формировании пакета appx не имеют никакого значения установки по поводу манифеста. Он всегда запихивается в appx в некоем дефолтном варианте, повлиять на который невозможно.
      Или все-таки возможно?
    • От Вадим Смоленский
      При упаковке Windows-приложения в appx все дополнительные файлы приходится класть в одну папку с исполнимым файлом, ибо Deployment Manager, судя по всему, не предусматривает возможности сразу положить их в AppData. Но я все-таки хочу, чтобы некоторые файлы были легко доступны пользователям, поэтому организовал приложение так, что оно при первом запуске создает новый каталог в AppData:
      MyDirectory:=GetSpecialFolderPath(CSIDL_APPDATA)+'\MyApp'; CreateDir(MyDirectory); TDirectory.SetAttributes(MyDirectory,[TFileAttribute.faNormal]); После этого в созданный каталог переносятся некоторые файлы, и всё работает хорошо, за исключением одного момента: этот новый каталог невозможно открыть, например, в Проводнике. Из самого приложения легко можно открыть диалоговое окно и увидеть в нем этот каталог и все файлы; можно их читать и в них писать, но вне приложения этот каталог невидим. Всё равно что не существует.
      Мне казалось, что присвоение каталогу атрибута faNormal дожно все проблемы решить. Увы, не решает. В чем тут закавыка?
    • От Вадим Смоленский
      Устанавливая и запуская свое Windows-приложение, предназначенное для Microsoft Store и запакованное в appx, наткнулся на интересный феномен. Чтобы узнать адрес текущего каталога, я всегда использовал функцию SysUtils.GetCurrentDir. Полученный полный адрес был мне нужен, например, чтобы показывать в TWebBrowser файлы хелпов (относительные адреса там почему-то не прокатывают). Раньше адресом текущего каталога всегда был адрес, где лежит исполнимый файл - условно говоря, C:\Program Files\MyApp. Теперь, когда пакет создается по принципам UWP,  исполнимый файл и прочее хозяйство кладется в каталог C:\Program Files\WindowsApps\MyApp_1.0.0.0_x86__sp51hrchc9zqj.  При этом функция GetCurrentDir почему-то возвращает совершенно другой адрес, а именно C:\WINDOWS\system32. Соответственно, TWebBrowser ничего не показывает.
      Функция SysUtils.GetDir ведет себя так же.
      Как быть?
    • От Вадим Смоленский
      В RAD Studio, начиная с Berlin, предусмотрена возможность создавать пакеты appx для загрузки приложений в Microsoft Store. К сожалению, материалов на эту тему пока немного, толковая ссылка нашлась лишь одна:
      https://community.embarcadero.com/blogs/entry/appx-development-for-windows-10-store
      Там толково объяснено, как создать appx для приложения из одного исполнимого файла. Я попробовал, всё получилось. Но как быть, если пакет должен содержать и другие файлы? В моем случае это файл базы данных, целая папка html-файлов для хелпов, и т.п. Где я должен их указать? Логично было бы предположить, что за это ответственен манифест (Project => Options => Application => Manifest File), который можно кастомизировать. Но сколько я ни гуглил, не смог найти ничего о структуре этого манифеста применительно к файлам. Похоже, манифест здесь все-таки ни при чем.
      Раньше я всё это делал в Inno Setup. Как поступать теперь - непонятно...
  • Последние посетители   0 пользователей онлайн

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