Перейти к содержанию
Fire Monkey от А до Я

Dmitry_4501

Пользователи
  • Постов

    73
  • Зарегистрирован

  • Посещение

  • Победитель дней

    12

Dmitry_4501 стал победителем дня 13 июня

Dmitry_4501 имел наиболее популярный контент!

Посетители профиля

6 079 просмотров профиля
  1. Компонент TPanel в своём стиле строится на компоненте TRectangle, который в свою очередь имеет два прекрасных свойства XRadius и YRadius, которые и отвечают за степень закруглённости углов. Выбираете нужную панель, правая кнопка мыши -> Edit Custom Style
  2. В общем. Я решил тоже установить RedOS. Установил на виртуалку. Собрал SDK в Delphi. Попробовал собрать проект - не получилось Тогда я начал искать в сети решения. Нашел как установить gcc и прочие утилиты и библиотеки для разработки. (при помощи команды dnf groupinstall "Development Tools" После установки я решил обновить SDK при помощи кнопки Update Local File Cache По итогу ничего не получилось. Тогда я решил при помощи Beyond Compare сравнить файлы и папки моих SDK (один для RedOS не работающий и второй для Ubuntu полностью рабочий). Я заметил различие в том что в SDK для RedOS отсутствовала папка gcc. Я полез искать эту папку в самой RedOS и нашел её, но почему-то PAServer её не передал во время создания SDK. Зайдя в папку я нашел причину проблемы. Для Ubuntu папка с gcc называется вот так - x86_64-linux-gnu А для RedOS папка с gcc называется вот так - x86_64-redsoft-linux Вот и вся причина. PAServer ничего не знает ни о какой x86_64-redsoft-linux и поэтому при создании SDK её не копирует. Отсюда и ошибка сборки проекта на стадии линковки. В общем, решил эту проблему самым простым способом - создал символическую ссылку ln -s ./x86_64-redsoft-linux ./x86_64-linux-gnu А затем ещё раз в Delphi нажал на кнопку Update Local File Cache После того как процесс обновления файлов SDK завершился я попробовал собрать проект и... Краткое руководство как получить рабочий SDK для RedOS. 1. Загружаем PAServer в систему 2. Выполняем команду dnf groupinstall "Development Tools" 3. В терминале переходим по пути из / в /usr/lib/gcc 4. Создаем символическую ссылку ln -s ./x86_64-redsoft-linux ./x86_64-linux-gnu 5. В Delphi создаем\обновляем (при помощи Update Local File Cache) SDK для RedOS Готово
  3. Может поможет создание еще одного SDK но уже для RedOS?
  4. Уже давно замечаю такое странное поведение, но увы, отловить пока причину так и не смог. Не сказать бы что это хоть как-то влияет на работу самой IDE. В общем. При открытии и установке пакетов иногда среда может поломать пути в настройках в секции Library, исключительно для Windows 32-bit, для остальных платформ всё нормально. Вот как это выглядит. А вот как выглядит на Windows 64 Разницу заметили? Если нет, то вот в чём она выражается Среда, с какого-то момента изменяет пути таким образом, чтобы ни одной переменной не было. Причём, если добавить новый путь с использованием переменных, то спустя какое-то время и он изменится.
  5. Попробуйте вот так (не самый идеальный вариант, но он работает и ошибок не выдает). procedure TForm1.Button1Click(Sender: TObject); begin var selectedItems: TArray<TListBoxItem>; // Объявляем массив из объектов TListBoxItem for var item: TFMXObject in ListBox1.Children.Items[1].Children do // Перебираем каждый дочерний компонент в ListBox, который является экземпляром класса TListBoxItem. begin if item is TListBoxItem then // Проверяем, является ли item экземпляром класса TListBoxItem if TListBoxItem(item).IsChecked then // Проверяем, является ли элемент отмеченным галочкой begin System.SetLength(selectedItems, System.Length(selectedItems) + 1); // Увеличиваем длину массива selectedItems[High(selectedItems)] := TListBoxItem(item); // Вставляем элемент в массив end; end; DeleteAllCheckedFiles(selectedItems); end; procedure TForm1.DeleteAllCheckedFiles(items: TArray<TListBoxItem>); begin if System.Length(items) < 1 then Exit; for var i: Integer := 0 to System.Length(items) - 1 do begin var item: TListBoxItem := items[i]; if Assigned(item) then begin // TFile.Delete(item.Text); item.Free(); // Освобождаем память, тем самым объект уничтожится и больше не будет находиться в списке элементов TListBox end; end; end;
  6. Можно увидеть вашу реализацию безрамочной формы и вашей WindowProc?
  7. Оконные сообщения в FMX можно обрабатывать так же как и в VCL. Достаточно в вашу WindowProc добавить это: var Message: TMessage; Message.Msg := uMsg; Message.WParam := wParam; Message.LParam := lParam; Message.Result := 0; frm.Dispatch(Message); Тогда потом можно будет смело написать что-то вроде procedure WMNCPaint(var Message: TWMNCPaint); message WM_NCPAINT; И оно будет работать.
  8. Кажется я понял в чем причина. Попробуйте заменить SendMessage на PostMessage, у меня после этого окно развернулось на весь экран.
  9. Да. Окно на FireMonkey не реагирует на это сообщение. Странно, я точно помню что делал уже такое на FireMonkey и оно работало. Правда было это давно, попробую еще поковыряться, может получится.
  10. Хм, странно. Должно работать. Сейчас открою проект еще раз у себя. Гляну.
  11. Подключусь к теме... Как-то пытался сделать подобное и в принципе получилось, безрамочное окно, которое по-нативному работает, что удалось заставить работать: Если взять окно за заголовок и начать двигать им туда-сюда, то все остальные окна свернутся - нативное поведение Если взять окно за заголовок то в Windows 11 появляется верхнее меню с макетами отображения на экране - нативное поведение Если взять окно за заголовок и перетащить его к одному из краев экрана, то появится макет для отображения окна - нативное поведение Нативным образом реализовано изменение размера за все края формы, включая диагональные. Так же окно имеет нативные анимации появления\исчезания, разворачивания\сворачивания Так же имеется нативная тень А на Windows 11 имеются закруглённые края окна Что не получилось: Не получилось реализовать нативное поведение, когда в Windows 11 наводишь курсор на кнопку "развернуть окно", там появляется небольшое меню с макетами отображения на экране. Нормально реализовать границы для изменения размеров окна, ибо из-коробки они находятся за пределами окна в поле где тень у окна (в Windows 10 и Windows 11 так), у меня же они внутри окна. Как-то делал и получалось, но уже не помню. Код несложно адаптировать и под FireMonkey BorderlessWindowWithAeroSnap.zip
  12. Проходишь циклом по всему списку и у каждого элемента проверяешь свойство IsChecked, если оно true, то тогда при помощи TFile.Delete удаляешь файл. Как-то так: procedure DeleteAllCheckedFiles(); begin if ListBox1.Count < 1 then Exit; // Если количество элементов меньше 1, то выходим из процедуры for var I: Integer := 0 to ListBox1.Count - 1 do if ListBox1.ListItems[I].IsChecked then // Проверяем свойство IsChecked (т.е отмечен ли элемент) TFile.Delete(ListBox1.ListItems[I].Text); // Удаляем файл (только в том случае, если в тексте элемента записан путь до файла, иначе придется переделать эту строчку под свои нужды) end; Для TFile.Delete необходимо подключить юнит System.IOUtils
  13. Ну так хотя бы до Windows 10 нужно обновиться.
  14. Не проще ли использовать простой TImage? TImageControl тоже можно заставить работать с прозрачностью, для этого придется создать свой стиль для него при помощи Edit Custom Style c прозрачным фоном
  15. Это добавлено специально чтобы в дизайнере форм случайно не переместить компонент. Очень удобно, в VCL такого нет и порой это может вылиться в мороку, когда вместо одного компонента выбрал другой и перетащил, тем самым поломав весь UI.
×
×
  • Создать...