• 0
Вадим Смоленский

Куда подевался сохраненный стиль?

Вопросы

Работая в Berlin, подправил стиль для одного компонента посредством вызова "Edit Custom Style" во всплывающем меню. Потом перешел на Tokyo; потом поменял компьютер и установил на него Tokyo заново. Сейчас вижу, что компонент отображается в стиле по умолчанию. Никаких сообщений по поводу пропавшего стиля не припомню. Где мне найти и как опять подключить мой отредактированный стиль?

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


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

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

  • 0

чисто в теории у вас на форме должен создаться TStyleBook, где и содержится измененный стиль

один

от смены IDE это не должно зависеть

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


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

Вот достаю сейчас бэкапы своего проекта - того времени, когда работал в Berlin и стиль точно уже создал. Открываю в Tokyo - и опять: TStyleBook совершенно пустой. Такое впечатление, что стиль сохранялся не в файлах проекта, а где-то еще.

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


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

посмотрите внимательно на комбо-бокс в редакторе стилей, для какой системы там стиль

windows 7 и windows 10 для нее и то разные...

а еще работает copy - paste прямо в fmx

 

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


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

Ха! Вот, в самом деле, и разгадка. Я ведь забыл упомянуть, что не просто поменял компьютер, а перешел с Windows 7 на Windows 10. В комбо-боксе вижу два варианта: Default (был выбран по умолчанию) и Windows 7. Переключил на Windows 7, и все мои стили стали видны.

Но будьте любезны разъяснить, как эти две установки связаны. Могу ли я, например, находясь под Windows 10, присвоить своим компонентам стили, созданные для Windows 7, чтобы любой пользовательский компьютер их нормально показывал? Или нужно как-то исхитриться и специфицировать стиль отдельно для Windows 7 и 10?

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


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

ну вот как всегда... я переустановил Delphi... и windows снес тоже...

зайдите туда где стиль есть. Ctrl+C. добавьте windows 10 и Ctrl+V

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


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

зайдите туда где стиль есть. Ctrl+C. добавьте windows 10 и Ctrl+V

Спасибо, помогло. Правда, пришлось копировать каждый элемент отдельно, все разом не получилось. Проблема остается одна: некоторые стилевые объекты у меня ссылаются на файл Windows 7style.png - а он, похоже, не перенесся. В редакторе стилей всё смотрится хорошо, но в запущенном приложении зияют пустоты. Например, у чекбоксов выводится только текст, а собственно чекбокс не отрисовывается. Где лежит Windows 7style.png, понять не смог. Как поступить?

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


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

так у вас кроме ваших кастомных добавок еще и стиль был загружен??

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


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

так у вас кроме ваших кастомных добавок еще и стиль был загружен??

Я пока сильно плаваю в этих вопросах, строго не судите. Мне кажется, никаких специальных стилей я не загружал. Насколько помнится, при редактировании кастомных стилей файл Windows 7style.png предлагался по умолчанию; в некоторых случаях я не нашел там необходимого и нарисовал в отдельном png-файле, который тоже подгрузил. Вот этот новый файл сейчас скопировался в раздел WIndows 10, и всё, что в нем нарисовано, нормально отображается в приложении. А ссылки на файл Windows 7style.png я вижу сейчас только в Object Inspector редактора стилей. Судя по всему, эти ссылки стали нерабочими.

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


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

где вы видите эти файлы ? 

что сейчас есть в редакторе стилей?

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


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

В редакторе стилей панель Structure содержит список стилей, которые я в свое время редактировал под Windows 7 для некоторых компонентов, всякий раз вызывая "Edit Custom Style", и которые сегодня перенес в раздел Windows 10. В этом же списке - имя файла MyStyles.png, который я тогда же создал и в котором рисовал то, чего не находил в уже готовом файле Windows 7style.png. Некоторые из моих стилей - например, стиль для TEdit - ссылаются на MyStyles.png, эта ссылка прописана в поле SourceLookup объекта backround, ее видно в Object Inspector. С этими стилями полный порядок. Но некоторые мои стили - например, стиль для TCheckBox - по-прежнему ссылаются на файл Windows 7style.png, которого в списке нет. Причем, эти ссылки тоже видны в Object Inspector; более того: щелкнув по полю SourceLink, я могу увидеть BitmapLinks Editor с этим файлом и всем его графическим содержимым! Но это содержимое не переносится в мое приложение, от красивого чекбокса остается только текст.

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


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

ну так наверное таким же образом нужно сделать и для windows 10 ?

более того, если программу запустить под win 7 то очевидно все будет как раньше

 

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


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

Да, видимо, придется так и сделать. Но это все-таки недоработка. В идеале стиль не должен обнуляться при переходе на новую ОС. Ну, или хотя бы разработчик должен заранее знать о таких сюрпризах и изначально ориентироваться на собственные графические файлы.

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


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

Вынужден взять часть своей критики назад. Мне всего-то и нужно было, что выбрать не "Edit Custom Style", а "Edit Default Style" - тогда новый стиль не был бы привязан к платформе. Не разобрался сразу. Но, думаю, многие согласятся, что разобраться со стилями, как они поданы сейчас, бывает весьма непросто.

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


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

А вот и нет! В этот раз для всех стилизуемых компонентов выбирал "Edit Default Style", работая при этом под Windows 10. Но тестеры, у которых Windows 7, прислали скриншоты, на которых все эти компоненты выглядят как должны выглядеть по умолчанию, безо всякого стиля.

Как быть? Я вот вижу в редакторе стилей выбор платформы. У меня сейчас выбран пункт "Windows 10 Desktop". Кроме него, есть только один пункт, под названием "Default". Его, что ли, нужно дополнительно выбирать всякий раз, когда вызываешь "Edit Default Style"?

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 07/01/2018 в 20:57, wamaco сказал:

Ну разумеется!

Перенес все стили из списка "Windows 10 Desktop" туда, где написано "Default". Теперь "Windows 10 Desktop" пустой, все стили в Дефолте. Результат: все контролы отображаются без стилей. Выпадающий список в свойстве StyleLookup нигде моих стилей не показывает. Такое впечатление, что нужно дополнительно указать: мол, стили лежат в разделе "Default". Но где и как это указать?

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 09.01.2018 в 17:01, Вадим Смоленский сказал:

Перенес все стили из списка "Windows 10 Desktop" туда, где написано "Default". Теперь "Windows 10 Desktop" пустой,

А вы удалите  "Windows 10 Desktop". И что у Вас в дизайнере форм? Я подозреваю, что создана view-шка  "Windows Desktop" и она сильно отличается от "Master". Это тоже может создавать проблемы (я думаю что в этом всё и дело).

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

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


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

А вы удалите  "Windows 10 Desktop".

Помогло! Надо же, такой простой ход - а вот поди догадайся... Хотя, конечно, нужно еще дождаться скриншотов от тестеров.

Никаких дополнительных вьюшек в дизайнере форм не наблюдаю, только Master.

Огромное спасибо за действенный совет!

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


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

Никаких дополнительных вьюшек в дизайнере форм не наблюдаю, только Master.

Хм... Странно... Ведь стиль с названием "Windows 10 Desktop" создаётся автоматически именно в момент создания view  "Windows Desktop" 

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


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

Думаю, причина в том, что я создавал проект еще под Windows 7. Соответственно, создался стиль под семерку. А на днях, перейдя на десятку, я этот стиль удалил и руками добавил "Windows 10 Desktop". Поэтому дизайнер форм чистый.

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


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

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

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

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

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

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

Войти

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

Войти

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

    • От Вадим Смоленский
      В декабре я задавал здесь вопрос о борьбе с перехватами нажатий клавиш компонентом 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 пользователей онлайн

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