-
Постов
394 -
Зарегистрирован
-
Посещение
-
Победитель дней
45
Активность репутации
-
AngryOwl получил реакцию от zairkz в Заставка приложения до Form1.Show
Все "быстренько" бывает только если приложение простое "как две копейки"...
В реальности - это действительно напрягает.
Извернуться можно примерно так:
- создайте форму (например fmSplash) и на ее событие OnFormCreate делаете все что вам нужно
- создайте TfgProgressDialog (например), который будет отображать процесс загрузки приложения и инициализацию переменных, модулей и т.п.
- подготовьте все что вам нужно для вашего приложения, до создания главной формы (и других)
- все что требует отображения в TfgProgressDialog помещайте в блоки
TThread.Synchronize(TThread.CurrentThread, procedure begin {....} end); - все что не требует отображения в GUI и никак не связано с компонентами других форм, и что может выполняться "постольку-поскольку" помещайте в блоки
TThread.CreateAnonymousThread(procedure begin {...} end).Start; - и когда, на ваш взгляд, уже пора создать главную форму приложения - обновите информацию в TfgProgressDialog и в блоке
TThread.Synchronize(TThread.CurrentThread, procedure begin {....} end); создайте все формы вашего приложения...
З.Ы. как пример можете посмотреть тут. просто иначе объяснить не вижу возможности...
-
AngryOwl получил реакцию от Alex7wrt в Недостающий вариант Image WrapMode
Особо править нет времени, разберетесь. Все просто - это компонент, унаследованный от стандартного TImage, с теми свойствами, которые Вам нужны.
unit Sphere.ImageEx; interface uses System.Classes, System.Types, FMX.Types, FMX.Objects, FMX.Graphics; type TBitmapFit = (bfDefault, bfWidth, bfHeight, bfBoth); TImageEx = class(TImage) private FBitmapDisplayRect: TRectF; procedure SetBitmapFit(const Value: TBitmapFit); protected FBitmapFit: TBitmapFit; procedure Paint; override; public constructor Create(AOwner: TComponent); override; function ImagePointToBitmap(const APoint: TPointF): TPointF; property BitmapDisplayRect: TRectF read FBitmapDisplayRect; published property BitmapFit: TBitmapFit read FBitmapFit write SetBitmapFit; end; implementation { TImageEx } constructor TImageEx.Create(AOwner: TComponent); begin inherited; FBitmapFit := bfDefault; FBitmapDisplayRect := TRectF.Empty; end; function TImageEx.ImagePointToBitmap(const APoint: TPointF): TPointF; begin Result := APoint; if not (BitmapDisplayRect.IsEmpty) and Assigned(Bitmap) then begin Result.X := Result.X - Trunc(BitmapDisplayRect.Left); if Bitmap.Width > BitmapDisplayRect.Width then Result.X := Result.X / (BitmapDisplayRect.Width / Bitmap.Width ); Result.Y := Result.Y - Trunc(BitmapDisplayRect.Top); if Bitmap.Height > BitmapDisplayRect.Height then Result.Y := Result.Y / (BitmapDisplayRect.Height / Bitmap.Height ); end; end; procedure TImageEx.Paint; begin {весь код - в прикрепленном файлике} // всегда центрируем для этих методов отрисовки else if FBitmapFit <> bfDefault then begin // растягиваем по ширине с обрезкой верхнего/нижнего краев Canvas.BeginScene(); try Coef := B.Width / B.Height; R := RectF(0, 0, B.Width, B.Height); if FBitmapFit = bfWidth then R := RectF(0, 0, Width, Width / Coef) else if FBitmapFit = bfHeight then R := RectF(0, 0, Height * Coef, Height) else if FBitmapFit = bfBoth then begin if Coef >= 1 then R := RectF(0, 0, Height * Coef, Height) else R := RectF(0, 0, Width, Width / Coef); end; RectCenter(R, LocalRect); Canvas.DrawBitmap(B, RectF(0, 0, B.Width, B.Height), R, AbsoluteOpacity, DisableInterpolation); FBitmapDisplayRect := R; finally Canvas.EndScene(); end; end; end; procedure TImageEx.SetBitmapFit(const Value: TBitmapFit); begin if FBitmapFit <> Value then begin FBitmapFit := Value; Paint(); end; end; //initialization // RegisterFMXClasses([TImageEx]); end. Sphere.ImageEx.zip
-
AngryOwl получил реакцию от Alex Bozhko в Заставка приложения до Form1.Show
Все "быстренько" бывает только если приложение простое "как две копейки"...
В реальности - это действительно напрягает.
Извернуться можно примерно так:
- создайте форму (например fmSplash) и на ее событие OnFormCreate делаете все что вам нужно
- создайте TfgProgressDialog (например), который будет отображать процесс загрузки приложения и инициализацию переменных, модулей и т.п.
- подготовьте все что вам нужно для вашего приложения, до создания главной формы (и других)
- все что требует отображения в TfgProgressDialog помещайте в блоки
TThread.Synchronize(TThread.CurrentThread, procedure begin {....} end); - все что не требует отображения в GUI и никак не связано с компонентами других форм, и что может выполняться "постольку-поскольку" помещайте в блоки
TThread.CreateAnonymousThread(procedure begin {...} end).Start; - и когда, на ваш взгляд, уже пора создать главную форму приложения - обновите информацию в TfgProgressDialog и в блоке
TThread.Synchronize(TThread.CurrentThread, procedure begin {....} end); создайте все формы вашего приложения...
З.Ы. как пример можете посмотреть тут. просто иначе объяснить не вижу возможности...
-
AngryOwl отреагировална Равиль Зарипов (ZuBy) в узнать расстояние между 2 точками
uses Math, FMX.Maps
function TMapsEngine.GetDistance(const aStart, aEnd: TMapCoordinate): Real; const Radius = 6372795; PiDiv180 = Pi / 180; var CosLatStart, SinLatStart, CosLatEnd, SinLatEnd, Delta, CosDelta, SinDelta, X, Y: Real; begin try CosLatStart := Cos(aStart.Latitude * PiDiv180); CosLatEnd := Cos(aEnd.Latitude * PiDiv180); SinLatStart := Sin(aStart.Latitude * PiDiv180); SinLatEnd := Sin(aEnd.Latitude * PiDiv180); Delta := (aEnd.Longitude * PiDiv180) - (aStart.Longitude * PiDiv180); CosDelta := Cos(Delta); SinDelta := Sin(Delta); Y := Sqrt(((CosLatEnd * SinDelta) * (CosLatEnd * SinDelta)) + ((CosLatStart * SinLatEnd - SinLatStart * CosLatEnd * CosDelta) * (CosLatStart * SinLatEnd - SinLatStart * CosLatEnd * CosDelta))); X := SinLatStart * SinLatEnd + CosLatStart * CosLatEnd * CosDelta; Result := Round(ArcTan2(Y, X) * Radius); except Result := -1; end; end; рассчитывает отрезок по прямой, не по дороге!
-
AngryOwl отреагировална bigjorj в TSearchBox кнопка очистки
procedure TMainForm.SearchChanelEditChangeTracking(Sender: TObject); var Lower: string; begin Lower := SearchChanelEdit.Text.Trim.ToLower; if Lower = '' then begin if Assigned(listView.Items.Filter) then begin // Clear filter listView.Items.Filter := nil; end; end else begin // Start or update filter listView.ItemIndex := -1; listView.Items.Filter := function(X: string): Boolean begin Result := Lower.IsEmpty or X.ToLower.Contains(Lower); end; end; end; Передача фильтра в ListView
-
AngryOwl отреагировална Brovin Yaroslav в Как закрасить имеющийся рисунок?
Можно сделать маску, содержащую ту часть футболки, которую нужно закрашивать. А далее по маске попиксельно менять цвет.
-
AngryOwl получил реакцию от Brovin Yaroslav в [TCameraComponent] [XE7] Как поменять разрешение получаемой картинки через CameraComponent?
Замените у себя модуль FMX.Media.Android.pas (файлик прилагаю)
смотрите в нем новые свойства и процедуры
property VideoWidth: Integer read FVideoWidth write FVideoWidth; property VideoHeight: Integer read FVideoHeight write FVideoHeight; property VideoBitCount: Integer read FVideoBitCount write FVideoBitCount; property VideoFPS: Integer read FVideoFPS write FVideoFPS; // auto constructor TAndroidVideoCaptureDevice.Create(const AManager: TCaptureDeviceManager; const ADefault: Boolean); procedure TAndroidVideoCaptureDevice.SetQuality(const Value: TVideoCaptureQuality); procedure TAndroidVideoCaptureDevice.DoStartCapture; допустим на форме fmMain есть компонент камеры ccMain_Camera, тогда
предварительно выключим камеру если она включена
fmMain.ccMain_Camera.Active := False; затем меняем "качество"
fmMain.ccMain_Camera.Quality := TVideoCaptureQuality.MediumQuality; {включит 640*480} затем включаем камеру
fmMain.ccMain_Camera.Active := True; типа так можно.
FMX.Media.Android.zip
З.Ы. и в OnSampleBufferReady надо обрабатывать уже полученное изображение, а не пытаться переключать камеру.
P.P.S. это под XE7
-
AngryOwl получил реакцию от neo в [TCameraComponent] [XE7] Как поменять разрешение получаемой картинки через CameraComponent?
Замените у себя модуль FMX.Media.Android.pas (файлик прилагаю)
смотрите в нем новые свойства и процедуры
property VideoWidth: Integer read FVideoWidth write FVideoWidth; property VideoHeight: Integer read FVideoHeight write FVideoHeight; property VideoBitCount: Integer read FVideoBitCount write FVideoBitCount; property VideoFPS: Integer read FVideoFPS write FVideoFPS; // auto constructor TAndroidVideoCaptureDevice.Create(const AManager: TCaptureDeviceManager; const ADefault: Boolean); procedure TAndroidVideoCaptureDevice.SetQuality(const Value: TVideoCaptureQuality); procedure TAndroidVideoCaptureDevice.DoStartCapture; допустим на форме fmMain есть компонент камеры ccMain_Camera, тогда
предварительно выключим камеру если она включена
fmMain.ccMain_Camera.Active := False; затем меняем "качество"
fmMain.ccMain_Camera.Quality := TVideoCaptureQuality.MediumQuality; {включит 640*480} затем включаем камеру
fmMain.ccMain_Camera.Active := True; типа так можно.
FMX.Media.Android.zip
З.Ы. и в OnSampleBufferReady надо обрабатывать уже полученное изображение, а не пытаться переключать камеру.
P.P.S. это под XE7
-
AngryOwl получил реакцию от Alex7wrt в Использование OpenGL?
В итоге не совсем понятно - чего же Вы хотите добиться?
Если перевести проект из VCL в Firemonkey, то посмотрите данную ссылочку (и соответственно)
OpenGL?
Если Вы используете в своем проекте, созданном под VCL, библиотеку OpenGL, то, думаю, будет немного сложнее...
Если нет, то Вам ничего не нужно "делать". С Firemonkey Вам не нужно задумываться над тем - что и где используется. Потому-что создавая FMX проект, все происходит "автоматически". В смысле - под Windows Ваш проект сбилдится так, что будет работать с DirectX, под остальное - OpenGL. (в общем виде)
Так-что либо уточните свой вопрос, либо более четко его сформулируйте. Иначе, не понятно, что Вы хотите узнать.
-
AngryOwl получил реакцию от VladimirS в [TListBox] Как отобразить итемы в виде панелей?
Проект.
Кусок стиля:
object TLayout StyleName = 'listboxitemmessagestylelight' EnableDragHighlight = False Padding.Left = 4.000000000000000000 Padding.Top = 4.000000000000000000 Padding.Right = 4.000000000000000000 Padding.Bottom = 4.000000000000000000 Position.X = 416.000000000000000000 Position.Y = 392.000000000000000000 Size.Width = 220.000000000000000000 Size.Height = 70.000000000000000000 Size.PlatformDefault = False Visible = False TabOrder = 91 object TRectangle StyleName = 'rectMain' Align = Contents Corners = [] EnableDragHighlight = False Fill.Color = claWhite HitTest = False Size.Width = 220.000000000000000000 Size.Height = 70.000000000000000000 Size.PlatformDefault = False end object TText StyleName = 'detail' Align = Client ClipChildren = True Cursor = crHandPoint EnableDragHighlight = False HitTest = False Margins.Right = 22.000000000000000000 Size.Width = 136.000000000000000000 Size.Height = 36.000000000000000000 Size.PlatformDefault = False TextSettings.Trimming = Character end object TActiveStyleTextObject StyleName = 'text' Align = Top EnableDragHighlight = False Margins.Right = 22.000000000000000000 Position.X = 58.000000000000000000 Position.Y = 4.000000000000000000 Size.Width = 136.000000000000000000 Size.Height = 26.000000000000000000 Size.PlatformDefault = False TextSettings.Font.Style = [fsBold] TextSettings.Trimming = Character TextSettings.WordWrap = False Shadow.Color = claBlack Shadow.Offset.XI = 1 Shadow.Offset.YI = 1 ShadowVisible = False ActiveTrigger = Selected ActiveColor = claBlack ActiveShadow.Color = claBlack ActiveShadow.Offset.XI = 1 ActiveShadow.Offset.YI = 1 end object TCircle StyleName = 'roundavatar' Align = MostLeft EnableDragHighlight = False Fill.Bitmap.WrapMode = TileStretch Fill.Kind = Bitmap HitTest = False Margins.Left = 2.000000000000000000 Margins.Right = 4.000000000000000000 Position.X = 6.000000000000000000 Position.Y = 4.000000000000000000 Size.Width = 48.000000000000000000 Size.Height = 62.000000000000000000 Size.PlatformDefault = False Stroke.Color = claGray Stroke.Thickness = 2.000000000000000000 end object TText StyleName = 'btnclosemessage' Anchors = [akTop, akRight] EnableDragHighlight = False Opacity = 1.000000000000000000 Position.X = 194.000000000000000000 Position.Y = 4.000000000000000000 Size.Width = 26.000000000000000000 Size.Height = 26.000000000000000000 Size.PlatformDefault = False Text = #58882 TextSettings.Font.Family = 'spherelive' TextSettings.Font.Size = 26.000000000000000000 TextSettings.WordWrap = False end end Фрагменты кода:
procedure TfmMissMessages.MissMessageApplyStyle(Sender: TObject); var StyleObject : TFmxObject; begin (Sender as TListBoxItem).OnClick := MessageItemClick; StyleObject := TListBoxItem(Sender).FindStyleResource('btnclosemessage') as TText; if Assigned(StyleObject) then TText(StyleObject).OnClick := DelMissMessageItemClick; StyleObject := TListBoxItem(Sender).FindStyleResource('roundavatar') as TCircle; if Assigned(StyleObject) then try TCircle(StyleObject).Fill.Bitmap.Bitmap.Canvas.BeginScene(); TCircle(StyleObject).Fill.Bitmap.Bitmap := {тут ваш битмап}; finally TCircle(StyleObject).Fill.Bitmap.Bitmap.Canvas.EndScene; end; end; procedure TfmMissMessages.AddMissMessageItem(......... AText: string); var newItem : TListBoxItem; newHeight : Integer; StyleObject: TFmxObject; begin .......... newItem := TListBoxItem.Create(nil); newItem.AutoTranslate := False; newItem.ClipChildren := True; newItem.CanFocus := False; newItem.EnableDragHighlight := False; newItem.Height := C_HeightItemMessage; newItem.Margins.Bottom := 5; newItem.StyledSettings := [TStyledSetting.Family, TStyledSetting.Style, TStyledSetting.FontColor]; newItem.TextSettings.HorzAlign := TTextAlign.Center; newItem.Text := AText; newItem.HitTest := True; newItem.OnClick := MessageItemClick; newItem.OnApplyStyleLookup := MissMessageApplyStyle; StyleObject := newItem.FindStyleResource('btnclosemessage') as TText; if Assigned(StyleObject) then TText(StyleObject).OnClick := DelMissMessageItemClick; StyleObject := newItem.FindStyleResource('roundavatar') as TCircle; if Assigned(StyleObject) then try TCircle(StyleObject).Fill.Bitmap.Bitmap.Canvas.BeginScene(); TCircle(StyleObject).Fill.Bitmap.Bitmap := {тут ваш битмап}; finally TCircle(StyleObject).Fill.Bitmap.Bitmap.Canvas.EndScene; end; lbxMissMessage.BeginUpdate; lbxMissMessage.AddObject(newItem); lbxMissMessage.EndUpdate; end; procedure TfmMissMessages.DelMissMessageItem(Sender: TListBoxItem); var newHeight : Integer; begin if not Assigned(Sender as TListBoxItem) then Exit; ............. lbxMissMessage.Items.Delete(TListBoxItem(Sender).Index); end; Извините, некоторые фрагменты кода удалены... Но думаю и так будет все понятно.
-
AngryOwl отреагировална FIL в Вторичное окно программы без передачи ему фокуса
Идея тут следующая (если требуется именно StayOnTop):
Форма создается как StayOnTop и прячется за пределы экрана.
Приведенный мною код меняет значение соответствующего поля формы, не вызывая при этом реакции на изменение значения св-ва (пересоздание формы как Popup и т.п.).
Т.е. форма остается StayOnTop, но когда дельфийский код принимает решение об ее активации и т.п. действиях, то он "видит" ее как Popup, т.к. FormStyle = Popup.
Тестовый проект прилагаю (проверял на Win7 x64):
NotActiveStayOnTopForm.zip
-
AngryOwl получил реакцию от Евгений Корепов в [TListBox] Как отобразить итемы в виде панелей?
Не в первый раз вижу эту тему...
TGridPanelLayout - далеко не предпочтительный вариант. Совсем.
У ListBox с его Item'ами намного больше возможностей.
С [xenon54] соглашусь, но не полностью. ListView действительно хорош (для мобильной платформы), однако он намного сложнее.
Примеры применения стилей для ListBoxItem (не сочтите за рекламу, так проще было... нащелкал скринов для примера):
Везде - ListBox.
На последнем скрине - всплывающие сообщения на экране. Реализовано так же - прозрачная форма, ListBox и Item'ы со своим стилем В ВИДЕ ПАНЕЛЕК )
-
AngryOwl получил реакцию от Равиль Зарипов (ZuBy) в [XE7-XE8] [Android] SONY
Для чего использовались драйвера (Windows 7/8/10 (x64)):
Sony Xperia SP
Sony Xperia L
Sony Xperia Tablet Z
и в архиве еще туча райверов для других девайсов от Sony ( размер архива 400 Mb !)
https://drive.google.com/open?id=0B5LS-2rAfJMDVkIycVlOQ1hqejA
P.S. Здесь и сделаю примечание по работе с данными девайсами.
В случае попытки работы с графическими примитивами, рисование закрашенных градиентом примитивов, возникает "баг" - вместо того чтобы рисовать, например, прямоугольник залитый градиентом, рисуется прямоугольник цветом "Fuchsia".
Чтобы избежать этого, рекомендую использовать обычные PNG.
Например:
-
AngryOwl отреагировална Равиль Зарипов (ZuBy) в [TListBox] Как отобразить итемы в виде панелей?
я же наоборот использую ListView, для достижении своих целей
-
AngryOwl получил реакцию от Kitty в [XE7-XE8] [Android] Highscreen Spider
Были проблемы с поиском драйверов для этого устройства под Windows 7/8/10 (x64)
Поэтому выложу сюда дрова, для тех кому могут понадобиться.
AndroidUSB Google (x86-64).zip
-
AngryOwl получил реакцию от Kitty в [XE7-XE8] [Android] SONY
Для чего использовались драйвера (Windows 7/8/10 (x64)):
Sony Xperia SP
Sony Xperia L
Sony Xperia Tablet Z
и в архиве еще туча райверов для других девайсов от Sony ( размер архива 400 Mb !)
https://drive.google.com/open?id=0B5LS-2rAfJMDVkIycVlOQ1hqejA
P.S. Здесь и сделаю примечание по работе с данными девайсами.
В случае попытки работы с графическими примитивами, рисование закрашенных градиентом примитивов, возникает "баг" - вместо того чтобы рисовать, например, прямоугольник залитый градиентом, рисуется прямоугольник цветом "Fuchsia".
Чтобы избежать этого, рекомендую использовать обычные PNG.
Например:
-
AngryOwl получил реакцию от Kitty в [XE7-XE8] [Android] Fly IQ4516 Tornado Slim Octa
Аналогично, как и с другими "нестандартными" девайсами - почти пол дня потратил на поиски дров под Windows 7/8/10 для данного девайса. Ничего не помогло, кроме данной программки.
Устанавливаем ее - она дает возможность работать с тел.: контакты, файловый менеджер и т.д. и т.п.
А главное - ставит драйвера для него!
mobilego_setup_full818.zip
З.Ы. после установки программу можно и удалить - главное дрова поставит...
-
AngryOwl получил реакцию от Belov.V. в [TListBox] Как отобразить итемы в виде панелей?
Не в первый раз вижу эту тему...
TGridPanelLayout - далеко не предпочтительный вариант. Совсем.
У ListBox с его Item'ами намного больше возможностей.
С [xenon54] соглашусь, но не полностью. ListView действительно хорош (для мобильной платформы), однако он намного сложнее.
Примеры применения стилей для ListBoxItem (не сочтите за рекламу, так проще было... нащелкал скринов для примера):
Везде - ListBox.
На последнем скрине - всплывающие сообщения на экране. Реализовано так же - прозрачная форма, ListBox и Item'ы со своим стилем В ВИДЕ ПАНЕЛЕК )
-
AngryOwl получил реакцию от xenon54 в [XE7-XE8] [Android] Highscreen Spider
Были проблемы с поиском драйверов для этого устройства под Windows 7/8/10 (x64)
Поэтому выложу сюда дрова, для тех кому могут понадобиться.
AndroidUSB Google (x86-64).zip
-
AngryOwl получил реакцию от alex_gulich в [TListBox] Как отобразить итемы в виде панелей?
Не в первый раз вижу эту тему...
TGridPanelLayout - далеко не предпочтительный вариант. Совсем.
У ListBox с его Item'ами намного больше возможностей.
С [xenon54] соглашусь, но не полностью. ListView действительно хорош (для мобильной платформы), однако он намного сложнее.
Примеры применения стилей для ListBoxItem (не сочтите за рекламу, так проще было... нащелкал скринов для примера):
Везде - ListBox.
На последнем скрине - всплывающие сообщения на экране. Реализовано так же - прозрачная форма, ListBox и Item'ы со своим стилем В ВИДЕ ПАНЕЛЕК )
-
AngryOwl получил реакцию от enatechno в [TListBox] Как отобразить итемы в виде панелей?
Не в первый раз вижу эту тему...
TGridPanelLayout - далеко не предпочтительный вариант. Совсем.
У ListBox с его Item'ами намного больше возможностей.
С [xenon54] соглашусь, но не полностью. ListView действительно хорош (для мобильной платформы), однако он намного сложнее.
Примеры применения стилей для ListBoxItem (не сочтите за рекламу, так проще было... нащелкал скринов для примера):
Везде - ListBox.
На последнем скрине - всплывающие сообщения на экране. Реализовано так же - прозрачная форма, ListBox и Item'ы со своим стилем В ВИДЕ ПАНЕЛЕК )
-
AngryOwl получил реакцию от uakmal в [TListBox] Как отобразить итемы в виде панелей?
Не в первый раз вижу эту тему...
TGridPanelLayout - далеко не предпочтительный вариант. Совсем.
У ListBox с его Item'ами намного больше возможностей.
С [xenon54] соглашусь, но не полностью. ListView действительно хорош (для мобильной платформы), однако он намного сложнее.
Примеры применения стилей для ListBoxItem (не сочтите за рекламу, так проще было... нащелкал скринов для примера):
Везде - ListBox.
На последнем скрине - всплывающие сообщения на экране. Реализовано так же - прозрачная форма, ListBox и Item'ы со своим стилем В ВИДЕ ПАНЕЛЕК )
-
AngryOwl отреагировална Кривяков Виталий в TUITabControl
Добрый день!
В теме про наш продукт http://fire-monkey.ru/topic/1519-1c-papyc-mobilnoe-prilozhenie-dlia-masterov-priemschiko/ меня просили поделиться исходным кодом компонента TabControl с поддержкой слайда табов пальцем. С удовольствием делюсь
В составе архива сам компонент и пример его использования.
FMXUI.zip
-
AngryOwl отреагировална Brovin Yaroslav в [1C-Papyc] Мобильное приложение для мастеров-приемщиков сервсиных автоцентров на ОС Android
Официальный сайт: https://rarus.ru/1c-auto/alfa-avto-mobilnyy-priemshchik/ Автор: 1C-Pарус Ссылки на приложение: Google Play Подробное описание: 1С_Рарус.pdf
-
AngryOwl получил реакцию от eser в Как программно добавить анимацию к TListBoxItem
TListBoxItem(ваш_item).Animate('Opacity', 0, 0.5); TListBoxItem(ваш_item).AnimateWait('Height', 0, 0.5); и только после этого удаляйте.
Но здесь может возникнуть ряд проблем.
Во-первых - оптимально делать синхронизацию. Во-вторых - ввиду "ряда особенностей" FMX все может работать на Windows 8, но не будет работать (или будет, но с ошибками) на Windows 7. А на Windows XP вообще может себя повести в "3-ем варианте"... ) Более стабильно будет работать на Маке и на Android ))) Вот такие чудеса могут быть.
Чтобы всего этого избежать, Вам нужно точно определить ту последовательность, которую Вы хотите воспроизвести и сделать синхронизацию.
Например, как писал выше:
TListBoxItem(ваш_item).Animate('Opacity', 0, 0.5); TListBoxItem(ваш_item).AnimateWait('Height', 0, 0.5); // тогда Animate для 'Opacity' и 'Height' выполнится параллельно // а вот следующая процедура выполнится только после окончания AnimateWait 'Height' TThread.Synchronize(TThread.CurrentThread, тут_ваша_процера_удаления_item); Думаю, что корректно описал - как. Но было бы более точно и правильно, если бы на ваш вопрос ответил непосредственно Ярослав Бровин. Он все-таки более компетентен.