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

AngryOwl

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

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

  • Посещение

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

    45

Активность репутации

  1. Like
    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); создайте все формы вашего приложения...
     
    З.Ы. как пример можете посмотреть тут. просто иначе объяснить не вижу возможности...
  2. Like
    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
  3. Like
    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); создайте все формы вашего приложения...
     
    З.Ы. как пример можете посмотреть тут. просто иначе объяснить не вижу возможности...
  4. Like
    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; рассчитывает отрезок по прямой, не по дороге!
  5. Like
    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
  6. Like
    AngryOwl отреагировална Brovin Yaroslav в Как закрасить имеющийся рисунок?   
    Можно сделать маску, содержащую ту часть футболки, которую нужно закрашивать. А далее по маске попиксельно менять цвет.
  7. Like
    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
  8. Like
    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
  9. Like
    AngryOwl получил реакцию от Alex7wrt в Использование OpenGL?   
    В итоге не совсем понятно - чего же Вы хотите добиться?
    Если перевести проект из VCL в Firemonkey, то посмотрите данную ссылочку (и соответственно)
     
    OpenGL?
    Если Вы используете в своем проекте, созданном под VCL, библиотеку OpenGL, то, думаю, будет немного сложнее...
    Если нет, то Вам ничего не нужно "делать". С Firemonkey Вам не нужно задумываться над тем - что и где используется. Потому-что создавая FMX проект, все происходит "автоматически". В смысле - под Windows Ваш проект сбилдится так, что будет работать с DirectX, под остальное - OpenGL. (в общем виде)
     
    Так-что либо уточните свой вопрос, либо более четко его сформулируйте. Иначе, не понятно, что Вы хотите узнать.
  10. Like
    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; Извините, некоторые фрагменты кода удалены... Но думаю и так будет все понятно.
  11. Like
    AngryOwl отреагировална FIL в Вторичное окно программы без передачи ему фокуса   
    Идея тут следующая (если требуется именно StayOnTop):
    Форма создается как StayOnTop и прячется за пределы экрана.
    Приведенный мною код меняет значение соответствующего поля формы, не вызывая при этом реакции на изменение значения св-ва (пересоздание формы как Popup и т.п.).
    Т.е. форма остается StayOnTop, но когда дельфийский код принимает решение об ее активации и т.п. действиях, то он "видит" ее как Popup, т.к. FormStyle = Popup.
     
    Тестовый проект прилагаю (проверял на Win7 x64):
    NotActiveStayOnTopForm.zip
  12. Like
    AngryOwl получил реакцию от Евгений Корепов в [TListBox] Как отобразить итемы в виде панелей?   
    Не в первый раз вижу эту тему...
    TGridPanelLayout - далеко не предпочтительный вариант. Совсем.
    У ListBox с его Item'ами намного больше возможностей.
    С [xenon54] соглашусь, но не полностью. ListView действительно хорош (для мобильной платформы), однако он намного сложнее.
     
    Примеры применения стилей для ListBoxItem (не сочтите за рекламу, так проще было... нащелкал скринов для примера):
     

     
    Везде - ListBox.
    На последнем скрине - всплывающие сообщения на экране. Реализовано так же - прозрачная форма, ListBox и Item'ы со своим стилем В ВИДЕ ПАНЕЛЕК )
     

  13. Like
    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.
    Например:

  14. Like
    AngryOwl отреагировална Равиль Зарипов (ZuBy) в [TListBox] Как отобразить итемы в виде панелей?   
    я же наоборот использую ListView, для достижении своих целей


  15. Like
    AngryOwl получил реакцию от Kitty в [XE7-XE8] [Android] Highscreen Spider   
    Были проблемы с поиском драйверов для этого устройства под Windows 7/8/10 (x64)
    Поэтому выложу сюда дрова, для тех кому могут понадобиться.
    AndroidUSB Google (x86-64).zip
     
  16. Like
    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.
    Например:

  17. Like
    AngryOwl получил реакцию от Kitty в [XE7-XE8] [Android] Fly IQ4516 Tornado Slim Octa   
    Аналогично, как и с другими "нестандартными" девайсами - почти пол дня потратил на поиски дров под Windows 7/8/10 для данного девайса. Ничего не помогло, кроме данной программки.
    Устанавливаем ее - она дает возможность работать с тел.: контакты, файловый менеджер и т.д. и т.п.
    А главное - ставит драйвера для него!
    mobilego_setup_full818.zip
     
    З.Ы. после установки программу можно и удалить - главное дрова поставит...
  18. Like
    AngryOwl получил реакцию от Belov.V. в [TListBox] Как отобразить итемы в виде панелей?   
    Не в первый раз вижу эту тему...
    TGridPanelLayout - далеко не предпочтительный вариант. Совсем.
    У ListBox с его Item'ами намного больше возможностей.
    С [xenon54] соглашусь, но не полностью. ListView действительно хорош (для мобильной платформы), однако он намного сложнее.
     
    Примеры применения стилей для ListBoxItem (не сочтите за рекламу, так проще было... нащелкал скринов для примера):
     

     
    Везде - ListBox.
    На последнем скрине - всплывающие сообщения на экране. Реализовано так же - прозрачная форма, ListBox и Item'ы со своим стилем В ВИДЕ ПАНЕЛЕК )
     

  19. Like
    AngryOwl получил реакцию от xenon54 в [XE7-XE8] [Android] Highscreen Spider   
    Были проблемы с поиском драйверов для этого устройства под Windows 7/8/10 (x64)
    Поэтому выложу сюда дрова, для тех кому могут понадобиться.
    AndroidUSB Google (x86-64).zip
     
  20. Like
    AngryOwl получил реакцию от alex_gulich в [TListBox] Как отобразить итемы в виде панелей?   
    Не в первый раз вижу эту тему...
    TGridPanelLayout - далеко не предпочтительный вариант. Совсем.
    У ListBox с его Item'ами намного больше возможностей.
    С [xenon54] соглашусь, но не полностью. ListView действительно хорош (для мобильной платформы), однако он намного сложнее.
     
    Примеры применения стилей для ListBoxItem (не сочтите за рекламу, так проще было... нащелкал скринов для примера):
     

     
    Везде - ListBox.
    На последнем скрине - всплывающие сообщения на экране. Реализовано так же - прозрачная форма, ListBox и Item'ы со своим стилем В ВИДЕ ПАНЕЛЕК )
     

  21. Like
    AngryOwl получил реакцию от enatechno в [TListBox] Как отобразить итемы в виде панелей?   
    Не в первый раз вижу эту тему...
    TGridPanelLayout - далеко не предпочтительный вариант. Совсем.
    У ListBox с его Item'ами намного больше возможностей.
    С [xenon54] соглашусь, но не полностью. ListView действительно хорош (для мобильной платформы), однако он намного сложнее.
     
    Примеры применения стилей для ListBoxItem (не сочтите за рекламу, так проще было... нащелкал скринов для примера):
     

     
    Везде - ListBox.
    На последнем скрине - всплывающие сообщения на экране. Реализовано так же - прозрачная форма, ListBox и Item'ы со своим стилем В ВИДЕ ПАНЕЛЕК )
     

  22. Like
    AngryOwl получил реакцию от uakmal в [TListBox] Как отобразить итемы в виде панелей?   
    Не в первый раз вижу эту тему...
    TGridPanelLayout - далеко не предпочтительный вариант. Совсем.
    У ListBox с его Item'ами намного больше возможностей.
    С [xenon54] соглашусь, но не полностью. ListView действительно хорош (для мобильной платформы), однако он намного сложнее.
     
    Примеры применения стилей для ListBoxItem (не сочтите за рекламу, так проще было... нащелкал скринов для примера):
     

     
    Везде - ListBox.
    На последнем скрине - всплывающие сообщения на экране. Реализовано так же - прозрачная форма, ListBox и Item'ы со своим стилем В ВИДЕ ПАНЕЛЕК )
     

  23. Like
    AngryOwl отреагировална Кривяков Виталий в TUITabControl   
    Добрый день!
     
    В теме про наш продукт http://fire-monkey.ru/topic/1519-1c-papyc-mobilnoe-prilozhenie-dlia-masterov-priemschiko/ меня просили поделиться исходным кодом компонента TabControl с поддержкой слайда табов пальцем. С удовольствием делюсь
    В составе архива сам компонент и пример его использования.
    FMXUI.zip
  24. Like
    AngryOwl отреагировална Brovin Yaroslav в [1C-Papyc] Мобильное приложение для мастеров-приемщиков сервсиных автоцентров на ОС Android   
    Официальный сайт: https://rarus.ru/1c-auto/alfa-avto-mobilnyy-priemshchik/ Автор: 1C-Pарус Ссылки на приложение: Google Play Подробное описание: 1С_Рарус.pdf  
     




  25. Like
    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); Думаю, что корректно описал - как. Но было бы более точно и правильно, если бы на ваш вопрос ответил непосредственно Ярослав Бровин. Он все-таки более компетентен.
×
×
  • Создать...