2012-05-04 4 views
4

Можно ли использовать Delphi TTaskDialog для использования VCLStyles?Можно ли использовать Delphi TTaskDialog для использования VCLStyles?

+5

['TTaskDialog'] (http://docwiki.embarcadero.com/Libraries/en/Vcl.Dialogs.TTaskDialog) полностью [' Windows Vista up dialog'] (http://msdn.microsoft.com). /en-us/library/windows/desktop/bb787471%28v=vs.85%29.aspx), и я боюсь, что это будет трудно сделать (если это возможно). Мое предложение - создать свой собственный (более того, вы получите выгоду, ваш собственный диалог задач будет работать и на Windows XP ниже). – TLama

+0

['Arnaud'] (http://stackoverflow.com/users/458259/arnaud-bouchez) сделал [' task dialog simulation'] (http://blog.synopse.info/post/2011/03/05/Open-Source-SynTaskDialog-unit-for-XP, Vista, Seven) для Windows XP и ниже. – TLama

+1

Tlama/Arnaud - Я снова поражен знаниями и полезностью сообщества StackOverflow! – Mmarquee

ответ

4

AFAIK, и, как заявил TLama в своем комментарии, этот TTaskDialog просто отображает Windows API напрямую, вы не сможете напрямую использовать VCL Style.

НО НО вы можете это сделать, используя взломанный аналогичный номер described in this article about using VCL Styles within a TWebBrowser.

Возможно, это будет какая-то работа, или даже невозможная, я подозреваю. Вам придется взломать все компоненты, созданные Windows, что непросто. API-интерфейс Task Dialog API не предоставляет полный и подробный COM-интерфейс с большим количеством обратных вызовов, готовых к переоценке, как это делает TWebBrowser.

Если вы используете наш Open-Source Task Dialog emulation code в качестве старта, вы можете принудительно использовать наш уровень эмуляции с чистыми компонентами VCL. В этом случае будет легко работать со стилями. Не забудьте отправить нам отзыв и патч, чтобы устройство было улучшено! Думаю, другие пользователи хотели бы воспользоваться такими хорошими функциями. Это то, что отлично подходит для Open Source: вы начинаете что-то, публикуете, затем contributions are integrated, и результат становится лучше. :)

+0

+ 1ed, я не хочу красть кредиты :-) Так или иначе, я нашел странную проблему с позиционированием. Установка 'Form.Canvas.TextWidth' изменяет позицию на высокие отрицательные значения, также каждое последующее изменение размера формы также уменьшает значения позиции, поэтому форма никогда не становится видимой. Я не понимаю, почему это происходит, так как это не должно влиять на позицию формы IMHO. – TLama

+0

@TLama Что вы подразумеваете под "Установка формы.Canvas.TextWidth"? –

+0

'SynTaskDialog.pas', строка 653. Я вызвал' Execute' как в моем удаленном сообщении, и в этой строке 'Form.Left' и' Form.Top' были изменены на отрицательные значения (очень странно в любом случае). Btw. У меня была форма вызывающего абонента с установленной позицией 'poScreenCenter' (это почему-то зависит, почему бы и нет). – TLama

6

Я только что добавил TTaskDialog Поддержка библиотеки VCL Styles Utils.

enter image description here

enter image description here

Чтобы активировать эту функцию, вам нужно добавить эти единицы к вашему проекту.

  • Vcl.Styles.Utils.Forms
  • Vcl.Styles.Utils.SysStyleHook
  • Vcl.Styles.Utils.SysControls
  • Vcl.Styles.Hooks

Более подробную информацию можно можно найти на этом blog post.