VCL style дизайнер стиля mac look

Недавно я провел небольшое исследование стиля VCL (Embarcadero XE2 для Delphi). Я могу загрузить и установить стили, чтобы все работало нормально.

В настоящее время я изучаю конструктор стилей VCL и пытаюсь понять, как переместить кнопки минимизации, максимизации, изменения размера, закрытия и справки влево вместо текущего значения по умолчанию справа, пока текст приложения (заголовок формы ) находится справа.

Я нахожусь в конце концов и надеюсь, что кто-нибудь может дать мне несколько указателей.

В основном то, что я пытаюсь «подражать», - это внешний вид Mac в форме Windows.

Любая помощь приветствуется.


person Blaatz0r    schedule 22.08.2014    source источник
comment
Простое решение - удалить границу окна и добавить кнопки самостоятельно.   -  person invalid_id    schedule 22.08.2014
comment
Я не совсем уверен, что понимаю, к чему вы идете. Не могли бы вы быть более конкретными?   -  person Blaatz0r    schedule 22.08.2014
comment
Я не могу помочь с точным кодом, но должно быть возможно сделать что-то вроде Window.Border.Visible = False. Затем вы можете создать свою собственную рамку, сделав полосу с кнопками вверху.   -  person invalid_id    schedule 22.08.2014
comment
Хорошо, я понимаю. Это действительно один из способов решить проблему. Но моя основная цель - создать его с помощью VCL Style Designer. Жаль, что у меня пока нет репутации загружать изображения. Затем я мог бы загрузить изображение, чтобы вы могли видеть то, что я создал.   -  person Blaatz0r    schedule 22.08.2014
comment
Это действительно работа, поэтому я не публиковал ее в качестве ответа. Однако я не уверен, можно ли перемещать фиксированные кнопки, поскольку стандартная граница окна в Windows задается Windows, и у вас есть только несколько вариантов, в основном из-за согласованности. Следующий вопрос: использует ли ваш пользовательский интерфейс стандартную рамку Windows? В противном случае нет другого выхода, кроме как удалить его и создать собственное решение.   -  person invalid_id    schedule 22.08.2014
comment
Стили VCL подобны мозаичной карте. Это использует изображения из указанного прямоугольного левого, верхнего, ширины и нижнего поля. Я разместил на imgur: imgur.com/RuH7R09.png   -  person Blaatz0r    schedule 22.08.2014
comment
Это больше, чем просто внешний вид. Кнопки ведут себя иначе. Средний не максимален в OS X, а минимален. И если вы дважды щелкните заголовок формы в OS X, это также вызовет свертывание, а не развертывание. Даже кнопка развертывания не делает то же самое в OS X, что и кнопка развертывания в Windows. Аналогом кнопки развертывания Windows являются диагональные стрелки в правом верхнем углу, и это все еще не точная копия.   -  person David Schwartz    schedule 22.08.2014
comment
Дэвид благодарит за ваш комментарий, он дает немного больше понимания работы osX. С помощью редактора стилей VCL у вас также есть возможность отключить (по крайней мере, так это выглядит) кнопки. Я разместил изображение на imgur.com, вы можете увидеть, что я создал до сих пор.   -  person Blaatz0r    schedule 22.08.2014
comment
@DavidSchwartz Это неправда: диагональные стрелки переключаются на полноэкранный режим (без рамки, без заголовка, без панели задач, без док-станции, ...). Зеленая кнопка разворачивается, но это не стандартное поведение, которое вы знаете из окон, и зависит от самого приложения (например, Safari ведет себя иначе, чем Firefox).   -  person Sir Rufo    schedule 22.08.2014
comment
На вашем изображении кнопки уже слева. Если он основан на плитке, у вас может быть опция allign: button.allign = left   -  person invalid_id    schedule 22.08.2014
comment
Можно действительно подумать, что Invalid_id. Но я бы хотел, чтобы заголовок формы был справа от формы. Если задать для свойства заголовка значение allign: = right, он не работает, как предполагалось, он не перемещается дальше.   -  person Blaatz0r    schedule 22.08.2014
comment
Есть ли родительская концепция, возможно, родительский заголовок неверен. Еще один уродливый прием - добавить пробелы перед подписью, но сделать это нетривиально и, вероятно, всегда выглядит некрасиво.   -  person invalid_id    schedule 22.08.2014
comment
Есть родительская концепция. И я пытался понять, как это работает. Но я не совсем понимаю, как это работает с детьми. Я думаю, что в нем есть те же недостатки, что и в CSS 1.0. Но именно так он сейчас себя чувствует при работе с дизайнером.   -  person Blaatz0r    schedule 22.08.2014
comment
@DavidSchwartz с тайловой картой позволяет создавать свои собственные кнопки. У вас может быть карта с несколькими типами кнопок (если вы создадите тот же вид, что и кнопки в osX, вы можете использовать их как таковые (поскольку вы также можете назначать им действия))   -  person Blaatz0r    schedule 22.08.2014
comment
@SirRufo OP пытается имитировать внешний вид оконной рамки OS X в Windows. Это больше, чем просто размещение кнопок. (В полноэкранном режиме панель инструментов вверху и панель запуска внизу также исчезают. Сколько эмуляции действительно нужно?)   -  person David Schwartz    schedule 22.08.2014
comment
@DavidSchwartz пока меня бы устроили только кнопки слева и текст справа. Если возникнут еще вопросы, всегда могу задать новый вопрос :)   -  person Blaatz0r    schedule 22.08.2014
comment
Вероятно, стоит переоценить почему вы это делаете. Как правило, пытаться изменить поведение, которого ожидают люди, - плохая идея. Есть причина, по которой пользователи Mac и Windows часто не любят (и считают их сложными в эксплуатации) операционные системы своих аналогов - потому что ничто не находится там, где они ожидают, и не делает того, чего они ожидают! Если вы сделаете приложение Windows похожим на приложение Mac, пользователи Windows будут в значительной степени ненавидеть вас за это и не захотят получать удовольствие от использования вашего приложения. Я бы серьезно пересмотрел это.   -  person J...    schedule 22.08.2014
comment
@J ... Твоя точка зрения действительно верна. Хотя причина, по которой я исследую возможности, я просто с точки зрения знаний и понимаю пределы этой системы. Так что мой вопрос все еще в силе.   -  person Blaatz0r    schedule 22.08.2014


Ответы (1)


То, что вы хотите выполнить, не связано с VCL Style Designer, вместо этого вы должны создать обработчик пользовательского стиля формы.

Следуй этим шагам.

  1. Создайте (и зарегистрируйте) новый хук стиля формы, производный от класса TFormStyleHook.
  2. Переопределите метод PaintNC для рисования кнопок заголовка в новых позициях.
  3. Обработайте сообщения WM_NCMOUSEMOVE, WM_NCLBUTTONDOWN и WM_WM_NCLBUTTONUP, чтобы определить состояние кнопок заголовка (горячие, нажатые) и активировать действия (закрыть, восстановить, развернуть, свернуть).
person RRUZ    schedule 22.08.2014
comment
Хорошо, спасибо за ответ RRUZ. Есть ли идеи, когда embarcadero может реализовать такую ​​функцию в Style Designer? - person Blaatz0r; 25.08.2014
comment
Как я сказал в своем ответе, это не связано с дизайнером стилей. Это можно сделать с помощью ловушки нестандартного стиля. - person RRUZ; 25.08.2014
comment
Я знаю, что вы имели в виду РРУЗ. И поймите «текущие ограничения» дизайнера стиля. Но в своем предыдущем комментарии я имел в виду, что эмбаркадеро планирует реализовать такую ​​функцию, чтобы упростить ее (меньше кода). - person Blaatz0r; 26.08.2014