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

Dmitry_4501

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

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

  • Посещение

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

    9

Dmitry_4501 стал победителем дня 9 ноября 2023

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

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

5 733 просмотра профиля
  1. Попробуйте вот так (не самый идеальный вариант, но он работает и ошибок не выдает). 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;
  2. Можно увидеть вашу реализацию безрамочной формы и вашей WindowProc?
  3. Оконные сообщения в 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; И оно будет работать.
  4. Кажется я понял в чем причина. Попробуйте заменить SendMessage на PostMessage, у меня после этого окно развернулось на весь экран.
  5. Да. Окно на FireMonkey не реагирует на это сообщение. Странно, я точно помню что делал уже такое на FireMonkey и оно работало. Правда было это давно, попробую еще поковыряться, может получится.
  6. Хм, странно. Должно работать. Сейчас открою проект еще раз у себя. Гляну.
  7. Подключусь к теме... Как-то пытался сделать подобное и в принципе получилось, безрамочное окно, которое по-нативному работает, что удалось заставить работать: Если взять окно за заголовок и начать двигать им туда-сюда, то все остальные окна свернутся - нативное поведение Если взять окно за заголовок то в Windows 11 появляется верхнее меню с макетами отображения на экране - нативное поведение Если взять окно за заголовок и перетащить его к одному из краев экрана, то появится макет для отображения окна - нативное поведение Нативным образом реализовано изменение размера за все края формы, включая диагональные. Так же окно имеет нативные анимации появления\исчезания, разворачивания\сворачивания Так же имеется нативная тень А на Windows 11 имеются закруглённые края окна Что не получилось: Не получилось реализовать нативное поведение, когда в Windows 11 наводишь курсор на кнопку "развернуть окно", там появляется небольшое меню с макетами отображения на экране. Нормально реализовать границы для изменения размеров окна, ибо из-коробки они находятся за пределами окна в поле где тень у окна (в Windows 10 и Windows 11 так), у меня же они внутри окна. Как-то делал и получалось, но уже не помню. Код несложно адаптировать и под FireMonkey BorderlessWindowWithAeroSnap.zip
  8. Проходишь циклом по всему списку и у каждого элемента проверяешь свойство 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
  9. Ну так хотя бы до Windows 10 нужно обновиться.
  10. Не проще ли использовать простой TImage? TImageControl тоже можно заставить работать с прозрачностью, для этого придется создать свой стиль для него при помощи Edit Custom Style c прозрачным фоном
  11. Это добавлено специально чтобы в дизайнере форм случайно не переместить компонент. Очень удобно, в VCL такого нет и порой это может вылиться в мороку, когда вместо одного компонента выбрал другой и перетащил, тем самым поломав весь UI.
  12. Если еще актуально, то есть TTextEditor, но он для VCL, можно попробовать переписать его для FMX, либо при помощи костылей прицепить VCL-форму с компонентом к FMX-форме. https://github.com/TextEditorPro/TTextEditor
  13. Почему нет? В случае возникновения ошибок всегда можно их исправить самостоятельно. Сейчас никаким. Поначалу было нужно, сейчас не использую FireMonkey почти нигде.
  14. Попробуйте библиотеку компонентов FGX, она содержит компонент TFgPositionAnimation, созданный для анимации свойств типа TPosition. Я сам пробовал использовать этот компонент - работал нормально.
  15. Доброго времени суток. На Embarcadero Delphi 11 Alexandria при компиляции проекта стал замечать такие сообщения: Порядок действий: Создаю проект В настройках проекта включаю параметр Link with runtime packages при использовании конфигурации All Platforms - All Configurations (этот параметр мне нужен из-за одной библиотеки, которая уже предварительно скомпилирована и у меня имеются лишь BPL и DCP файлы, без DCU) Компилирую под WIn32 (debug) - все нормально Компилирую под Win32 (release) - все нормально Компилирую под Win64 (debug) - все нормально Компилирую под Win64 (release) - все нормально Возвращаюсь обратно на Win32 Компилирую под Win32 (debug) - ошибка (первое сообщение) Компилирую под Win32 (release) - все нормально Перехожу на Win64 Компилирую под Win64 (debug) - все нормально Компилирую под Win64 (release) - ошибка (второе сообщение) Потом ошибки могут наоборот появляться например Win32 Debug нормально скомпилируется, а Win32 Release с ошибкой. То же самое касается и Win64, там такая же история. Если ошибка не появляется, то можно зайти в настройки проекта, что-нибудь изменить (например я включал\отключал Use Debug .dcu) ну или пройти зайти в настройки проекта и выйти. Тогда с большой вероятностью ошибка появится при компиляции Сообщение 1: [dcc32 Fatal Error] Project1.dpr(5): E2213 Bad packaged unit format: c:\program files (x86)\embarcadero\studio\22.0\lib\Win32\release\vcl.dcp.Vcl.Forms - Expected version: 35.0, Windows Unicode(x86) Found version: 7.54, Unk(ARM) Сообщение 2: [dcc64 Fatal Error] Project1.dpr(5): E2213 Bad packaged unit format: c:\program files (x86)\embarcadero\studio\22.0\lib\Win64\debug\vcl.dcp.Vcl.Forms - Expected version: 35.0, Windows Unicode(x64) Found version: 90.95, MaxOSX NX Language(ARM) Собственно вопрос следующий: могли бы вы, кто-нибудь проверить у себя такое же (желательно именно на Delphi 11 Alexandria), т.е проделать мой порядок действий. Обращу внимание на то, что если параметр Link with runtime packages отключить, то все сразу становится нормальным, компиляция происходит в штатном режиме и никаких сообщений с ошибкой не вываливается.
×
×
  • Создать...