Nick Peterson Опубликовано 17 ноября, 2018 Поделиться Опубликовано 17 ноября, 2018 (изменено) Всем привет! Имеется приложение под винду на VCL (торговый терминал). Возникло желание перевести на FMX для сборки под MacOS (это основная цель). Неделя тестов, мида конвертер и ручное ковыряние и правка кода и вуаля, приложение скомпилировалось:) Однако при первом взгляде на свеже-испеченную прогу меня охватил ужас! Хотя нет, ужас охватил еще раньше, когда в одном из тестов мемо с коротеньким текстом на 2 страницы загрузило ЦПУ на 20% при скролле... Тогда я решил, что вобщем-то мои пользователи редко будут мемо скролить. Но вот общий вид приложения, эти стремные шрифты, несоразмерные кнопочки и тп, едва не отбили желание продолжать:) Теперь от лирики к существу: нужна консультация по вопросу, стоит ли вообще и если да, то какие подводные камни могут еще встретится и как обходить. Дельные консультации, а также практическую помощь (стили, советы, куски кода) готов хорошо оплатить. Изменено 17 ноября, 2018 пользователем Nick Peterson Цитата Ссылка на комментарий
dnekrasov Опубликовано 18 ноября, 2018 Поделиться Опубликовано 18 ноября, 2018 12 часов назад, Nick Peterson сказал: когда в одном из тестов мемо с коротеньким текстом на 2 страницы загрузило ЦПУ на 20% при скролле Вряд ли это проблема FMX. Создайте новый проект, киньте мемо и попробуйте поскроллить - я уверен, что такой загрузки ЦПУ не будет. 12 часов назад, Nick Peterson сказал: Но вот общий вид приложения, эти стремные шрифты, несоразмерные кнопочки и тп Непонятно что Вы имеете ввиду. Всё это очень просто настраивается или стилем или на самой форме. 12 часов назад, Nick Peterson сказал: Теперь от лирики к существу По-моему, единственная Ваша проблема - это мида конвертер. По собственному опыту перевода могу сказать, что если создавать формы вручную и переносить в них логику, то всё получается довольно просто и проблем особых не возникает. Да и на MacOS практически всё работает без проблем. 12 часов назад, Nick Peterson сказал: Дельные консультации, а также практическую помощь (стили, советы, куски кода) Сначала опишите конкретную проблему (желательно с кусками кода), а после этого вы получите дельные консультации и, заметьте, совершенно бесплатно. А пользуясь поиском по форуму - Вы найдёте решение подавляющего числа проблем, которые у Вас возникнут. Цитата Ссылка на комментарий
Nick Peterson Опубликовано 18 ноября, 2018 Автор Поделиться Опубликовано 18 ноября, 2018 (изменено) Пока что разбираюсь со стилями, форум читал, все равно не понимаю пару вопросов: 1) Как отредактировать битмап в стиле? к примеру, беру стиль Diamond из премиум пака для 10.2. Хочу в нем поменять цвет Progressbar'a. На поиск решения и на исполнение ушло 3 часа:)) (сделал как тут пишут https://stackoverflow.com/questions/27876780/how-to-extract-and-replace-png-images-in-tstylebook путем редактирования файла со стилем и формы в блокноте. Т.е. берешь кусок текста из файла стиля, копируешь его на форму в TImage оттуда сохраняешь, правишь в фотошопе и тп) Более простого способа нет? 2) Как поменять дефолтный шрифт во всех элементах сразу? В файле со стилем не нашел записи Segoe UI, где вообще это прописано? Т.е. я хочу чтобы все Segoe UI заменились на скажем Tahoma В интернете нашел только решение через подмену IFMXSystemFontService 3) Вообще не понял идеологию StyleBook'ов, Кинул на форму два стайлбука, в один загрузил Diamond , другой оставил как есть, ничего не трогал. Делаю все в режиме Windows - Master, (пока только для винды), View других не создавал. 3.1) Надо ли создавать View и загружать в них стили заново в стайлбуки, как пишется в справке? 3.2) Выбрал стайлбук с Diamond и отредактировал в нем 2 Custom стиля для прогрессбаров Применяю другой стайлбук, где у меня дефолтный стиль, но прогрессбары все равно остаются цветными! Как сделать, чтобы при применении другого стиля в StyleBook2 элементы также меняли свой вид (на дефолтный для StyleBook2 в данном случае) ? Изменено 18 ноября, 2018 пользователем Nick Peterson Цитата Ссылка на комментарий
OnePeople Опубликовано 19 ноября, 2018 Поделиться Опубликовано 19 ноября, 2018 (изменено) Не знаю куда уж проще? Кидаешь на форму StyleBook и в свойствах формы выставляешь его. Создаешь свой прогрессбар например. Кликаешь по нему правой кнопкой мыши и выбираешь изменить стиль по умолчанию или же создать свой новый стиль для компонента. Затем редактируешь его как компонент содержащий в себе другие компоненты, причем не обязательно как я сделал для примера из прямоугольников, можно сделать и из картинок, главное чтобы названия StyleName совпадали c родными. Изменено 19 ноября, 2018 пользователем OnePeople Anatoliy 1 Цитата Ссылка на комментарий
Nick Peterson Опубликовано 19 ноября, 2018 Автор Поделиться Опубликовано 19 ноября, 2018 4 часа назад, OnePeople сказал: Не знаю куда уж проще? Вы наверное даже не прочитали вопрос. Как же я сделаю два разных стиля прогрессбаров с одинаковым названием? Цитата Ссылка на комментарий
dnekrasov Опубликовано 19 ноября, 2018 Поделиться Опубликовано 19 ноября, 2018 8 минут назад, Nick Peterson сказал: Как же я сделаю два разных стиля прогрессбаров с одинаковым названием А зачем с одинаковым? Даёте каждому своё имя, а у контрола указываете какой использовать с помощью свойства StyleLookup Цитата Ссылка на комментарий
dnekrasov Опубликовано 19 ноября, 2018 Поделиться Опубликовано 19 ноября, 2018 (изменено) 12 часов назад, Nick Peterson сказал: 2) Как поменять дефолтный шрифт во всех элементах сразу? В файле со стилем не нашел записи Segoe UI, где вообще это прописано? Т.е. я хочу чтобы все Segoe UI заменились на скажем Tahoma Прописан дефолтный шрифт в FMX.Platform.Win.pas function TPlatformWin.GetDefaultFontFamilyName: string; begin if TOSVersion.Check(6) then Result := 'Segoe UI' else Result := 'Tahoma'; end; Копируете этот юнит к себе в папку проекта и меняете название шрифта на нужный Вам. Более простого пути нет. Изменено 19 ноября, 2018 пользователем dnekrasov Nick Peterson 1 Цитата Ссылка на комментарий
dnekrasov Опубликовано 19 ноября, 2018 Поделиться Опубликовано 19 ноября, 2018 12 часов назад, Nick Peterson сказал: Надо ли создавать View и загружать в них стили заново в стайлбуки, как пишется в справке View менять не обязательно (только если у Вас отличается внешний вид окна на разных платформах). Главное чтобы стиль поддерживал нужную Вам платформу. У меня прекрасно работает с одним View Master и на винде и на маке. А вообще, я уже отказался от StyleBook-ов, практика показала, что они нужны только в дизайне, чтобы правильно расположить контролы. Лучше добавить файл стиля в ресурсы проекта и грузить его динамически var Style: TFmxObject; begin Style := TStyleManager.GetStyleResource(AResName); TStyleManager.SetStyle(Style); end; Цитата Ссылка на комментарий
dnekrasov Опубликовано 19 ноября, 2018 Поделиться Опубликовано 19 ноября, 2018 12 часов назад, Nick Peterson сказал: ...путем редактирования файла со стилем и формы в блокноте. Т.е. берешь кусок текста из файла стиля, копируешь его на форму в TImage оттуда сохраняешь, правишь в фотошопе и тп) Более простого способа нет? Есть. У любого TStyleObject есть свойство SourceLookup в котором указывается название стиля в котором хранится изображение. Ищем его в дереве стилей и уже с ним работаем как с обычным TImage (находим свойство MultyResBitmap и с его помощью сохраняем или загружаем изображение). А с помощью свойства SourceLink (ActiveLink, HotLink и т.д.) указываем область изображения из которой берётся вид контрола для нужного состояния. Вы вполне можете добавить свой стиль (TImage), чтобы не редактировать исходное изображение, и использовать его в качестве SourceLookup для своих стилей Nick Peterson 1 Цитата Ссылка на комментарий
dnekrasov Опубликовано 19 ноября, 2018 Поделиться Опубликовано 19 ноября, 2018 13 часов назад, Nick Peterson сказал: 3.2) Выбрал стайлбук с Diamond и отредактировал в нем 2 Custom стиля для прогрессбаров Хотелось бы исходники глянуть Цитата Ссылка на комментарий
Nick Peterson Опубликовано 19 ноября, 2018 Автор Поделиться Опубликовано 19 ноября, 2018 1 час назад, dnekrasov сказал: Хотелось бы исходники глянуть Добрый день! Благодарю за ответы! Исходников пока нет, я эксперементирую на чистом проекте. Сделал два стайлбука, в одном из них сделал два стиля прогрессбарам - зеленый и красный (ProgressBar1Style1, ProgressBar1Style2) В другом стайлбуке не делал, как видно на скрине, там только дефолтный стиль, несмотря на это, прогрессбары все равно рисуются со стилем из другого стайлбука (который в данный момент неактивен). Вобщем тут понял, надо в другом стайлбуке сделать стили с такими же именами, тогда все ок 2 часа назад, dnekrasov сказал: Лучше добавить файл стиля в ресурсы проекта и грузить его динамически Верно ли я понял, что можно редактировать стиль в стайлбуке в IDE, затем сохранить его в .style файл и засунуть в ресурсы в таком виде, удалив стайлбуки с формы? Подскажите еще вопрос, привожу внешний вид интерфейса в порядок после преобразования из VCL, очень раздражает вид сплиттера между двумя мемо (на скрине увеличение x8). Есть какой-то простой способ это победить? Я имею в виду эти 2 черные линии. Если уменьшать толщину сплиттера, тогда его сложно ухватить мышкой)) Пробовал вставлять TLine с белой кистью между мемо, не получается Цитата Ссылка на комментарий
dnekrasov Опубликовано 19 ноября, 2018 Поделиться Опубликовано 19 ноября, 2018 27 минут назад, Nick Peterson сказал: Верно ли я понял, что можно редактировать стиль в стайлбуке в IDE, затем сохранить его в .style файл и засунуть в ресурсы в таком виде, удалив стайлбуки с формы? Совершенно верно Nick Peterson и Anatoliy 1 1 Цитата Ссылка на комментарий
Nick Peterson Опубликовано 20 ноября, 2018 Автор Поделиться Опубликовано 20 ноября, 2018 (изменено) Такой вопрос , сделал TStringGrid для Sqlite таблицы через лайфбиндинг Как сделать сортировку? на VCL работал такой код, на FMX не работает ("сортирует" только первую строку, остальные без изменений): procedure TRepForm.Grid1HeaderClick(Column: TColumn); var FieldName: string; begin FieldName:=Column.Header; If FSortField=FieldName then FSortField:=FieldName+':D' else FSortField:=FieldName; If MainQuery.Active then begin MainQuery.IndexFieldNames:=FSortField; MainQuery.First; end; end; Изменено 20 ноября, 2018 пользователем Nick Peterson Цитата Ссылка на комментарий
Nick Peterson Опубликовано 20 ноября, 2018 Автор Поделиться Опубликовано 20 ноября, 2018 Методом тыка нашел вариант, не знаю, насколько он корректен? procedure TForm8.Grid1HeaderClick(Column: TColumn); var FieldName: string; begin FieldName:=Column.Header; If FSortField=FieldName then FSortField:=FieldName+':D' else FSortField:=FieldName; If MainQuery.Active then begin MainQuery.IndexFieldNames:=FSortField; MainQuery.First; end; MainQueryBinding.BeginLayout; MainQueryBinding.EndLayout; end; Цитата Ссылка на комментарий
Nick Peterson Опубликовано 9 декабря, 2018 Автор Поделиться Опубликовано 9 декабря, 2018 По итогу месяца работы на FMX хочу сказать - это глюкодром адский!:)) Вернулся бы обратно на VCL, но жаль потраченного месяца работы :)) Несколько моментов, может кому будет интересно, кто пойдет по этому пути перевода проекта с VCL: 1) рисование в буфере перед выводом на PaintBox (знаю что не обязательно, но именно в моей проге нужно, разные куски картинки готовятся в разное время) Инфы в одном месте не найти. Даже на этом форуме она не полна и в одном месте ошибочна:) XScale := GetWndScale(FormToHWND(OwnerForm)); // только так! Другие методы получения Scale не работают при // перетаскивании проги на другой монитор. w:=trunc(XScale * Image.Width); h:=trunc(XScale * Image.Height); // при перетаскивании на второй мониторе с другим масштабом Image.Width и Image.Height могут станут неверными. // Помогает только пересоздание хэндла формы (баг) If (bm.Width<>w) or (bm.Height<>h) then bm.SetSize(w,h); bm.Canvas.BeginScene; bm.Canvas.SetMatrix(TMatrix.CreateScaling( XScale, XScale) * Matrix); 1.1) Как нарисовать линию толщиной 1 пиксель? Этот простой вопрос отнял у меня пол дня:) Пришлось править код FMX.Canvas.D2D, по-другому никак не отключить антиалиасинг в битмапе. На форме его можно отключить свойством Quality, вот только его значения перепутаны - HighQuality на самом деле означает худшее качество с размытой графикой. Даже после отключения AA нужна еще 1 хитрость - чтобы линия (горизонтальная или вертикальная) получилась толщиной ровно 1 пиксель, у меня получился примерно такой код procedure TCanvasHelper.LineToPix(xFrom, yFrom, xTo, yTo, Opacity: single); var pFrom, pTO: TPointF; xs: single; begin xs := Max(1, Matrix.m11); If xs > 1.1 then begin pFrom := PointF(xFrom, yFrom).Round; pTO := PointF(xTo, yTo).Round; end else begin pFrom := PointF(round(xFrom) + 0.5, round(yFrom) + 0.5); pTO := PointF(round(xTo) + 0.5, round(yTo) + 0.5); end; Stroke.Thickness := 1/xs; DrawLine( pFrom, pTO, Opacity); end; 2) Шрифты. Это жуть!:) Впрочем об этом пишут везде. Заставить в D2D канве (винда) работать ClearType не удалось (хотя при рисовании в битмапе как написано выше он у меня заработал, путем очередной правки FMX.Canvas.D2D. Надо еще отметить, что править системные коды я никогда не любил, и на VCL приходилось всего 1 раз, тут же у меня исходники очень быстро лишились девственности:)) 2.2) Шрифты и так выглядят не очень, но еще круче их портит свойство TAlign.Scale, из-за которого позиции контролов принимают не целые значения. Просто киньте на форму пару Label'ов с TAlign.Scale , запустите и начните медленно растягивать, наблюдая как мерцают и размыливаются буковки:)) Вообще по итогу шрифты оказались самым неприятным моментом, все остальное кое-как правится, кроме внешнего вида приложения с замыленными шрифтами... (отключать D2D канву не предлагать!) Почему не доделали SetTextRenderingParams в FMX.Canvas.D2D.pas, почему не работает SetTextAntialiasMode - для меня пока загадка. 3) Сворачивание приложения кликом по таскбару. Оно не работает:) (Почему за столько лет существования FMX никто этого не заметил? всем плевать, или никто не пользуется?) Да, на форуме есть пара решений, но они не идеальны, если у вас внимательные юзеры, они обязательно заметят странное мелькание приложения при разворачивании. Очередная правка системных кодов. 4) FMX.TrayIcon.Win - штатного нет, но код выложенный на этом форуме работает идеально. Респект его автору. С ужасом думаю, что буду делать на MacOS..:) 5) Если в TEdit нажать CTRL-V при пустом буфере, вылезает AV:) Правится не сложно, но блин, очередной системный юнит легко лишился девственности:)) 6) Выделение дабл-кликом на TEdit не работает..... (10.3) Хорошо что FMX.Edit.pas уже лежит в папке с проектом, долго искать не пришлось:)) 7) А на этот с виду несложный вопрос я так и не нашел ответа.. Anatoliy, Mars M и Barbanel 3 Цитата Ссылка на комментарий
GASCHE Опубликовано 9 декабря, 2018 Поделиться Опубликовано 9 декабря, 2018 (изменено) 6 часов назад, Nick Peterson сказал: но жаль потраченного месяца работы Зато столько интересного для себя обнаружили и сколько обнаружите потом при переходе на новую версию Изменено 9 декабря, 2018 пользователем GASCHE Цитата Ссылка на комментарий
Barbanel Опубликовано 10 декабря, 2018 Поделиться Опубликовано 10 декабря, 2018 В 09.12.2018 в 01:09, Nick Peterson сказал: По итогу месяца работы на FMX хочу сказать - это глюкодром адский!:)) Вы случайно не картографическое приложение пишете? Такой use case знакомый))) Цитата Ссылка на комментарий
Nick Peterson Опубликовано 10 декабря, 2018 Автор Поделиться Опубликовано 10 декабря, 2018 15 часов назад, Barbanel сказал: Вы случайно не картографическое приложение пишете? Такой use case знакомый))) Близко:) У меня анализ данных, графики и прочее Цитата Ссылка на комментарий
#WAMACO Опубликовано 11 декабря, 2018 Поделиться Опубликовано 11 декабря, 2018 Не знаю, я как то переводил старое VCL приложением на FireMonkey, все прошло очень гладко, добавил новых "красивых" фич! Были вопросы, но они все замечательно решились. Клиенты довольны! Странно, что у вас опыт отрицательный. dnekrasov 1 Цитата Ссылка на комментарий
Nick Peterson Опубликовано 11 декабря, 2018 Автор Поделиться Опубликовано 11 декабря, 2018 2 часа назад, #WAMACO сказал: Были вопросы, но они все замечательно решились. Вот наткнулся на очередной баг, его исправить быстро уже не удается.. Вы как это решили? или просто не заметили? Суть бага: берем TVertScrollBox кидаем в него кучу кнопок (так, чтобы не все кнопки были в видимой части скролбокса) Запускаем, жмем 1 кнопку. Затем скролим пару раз, и видим что нажато стало много кнопок:) 1) Запустили, нажали SpeedButton9 2) покрутили скролл туда-сюда, и видим (багрепорт https://quality.embarcadero.com/browse/RSP-22933?filter=-2 ) Цитата Ссылка на комментарий
#WAMACO Опубликовано 11 декабря, 2018 Поделиться Опубликовано 11 декабря, 2018 (изменено) 49 минут назад, Nick Peterson сказал: Вот наткнулся на очередной баг, его исправить быстро уже не удается.. Вы как это решили? или просто не заметили? может у меня просто нет кучи кнопок со скролбоксом... и почему SpeedButton, а не Button? и как Вы нажали и зафиксировали фокус на SpeedButton, она же не держит фокус. воспроизвел у себя - все отлично! Проверил, как у Вас - тоже все отлично! не знаю, что у вас там глючит. скиньте проект, для удивления этому всему! Изменено 11 декабря, 2018 пользователем #WAMACO Цитата Ссылка на комментарий
Nick Peterson Опубликовано 11 декабря, 2018 Автор Поделиться Опубликовано 11 декабря, 2018 1 час назад, #WAMACO сказал: и почему SpeedButton, а не Button? Почему? да просто накидал по быстрому тестовый пример. В реальном проекте нет кучи кнопок, там даже при 2х кнопках вылезает баг, но редко. Если кинуть 20 кнопок , то баг вылезет сразу же Фокус он держит Тестовый проект для удивления прикладываю:)) Bugs.zip Цитата Ссылка на комментарий
GASCHE Опубликовано 11 декабря, 2018 Поделиться Опубликовано 11 декабря, 2018 У меня на Berlin все нормально. Цитата Ссылка на комментарий
dnekrasov Опубликовано 11 декабря, 2018 Поделиться Опубликовано 11 декабря, 2018 Tokyo, Rio 3000 кнопок - всё отлично работает. #WAMACO 1 Цитата Ссылка на комментарий
#WAMACO Опубликовано 11 декабря, 2018 Поделиться Опубликовано 11 декабря, 2018 1 час назад, Nick Peterson сказал: Почему? да просто накидал по быстрому тестовый пример. В реальном проекте нет кучи кнопок, там даже при 2х кнопках вылезает баг, но редко. Если кинуть 20 кнопок , то баг вылезет сразу же Фокус он держит Тестовый проект для удивления прикладываю:)) Bugs.zip у меня все отлично! на будущее вам совет, не держите состояния в ui, сделайте модель, а ui только для отрисовки используйте. меньше будет глюков и таких вопросов. Цитата Ссылка на комментарий
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.