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

Лидеры

  1. brunnengi

    brunnengi

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


    • Баллы

      2

    • Постов

      293


  2. Евгений Корепов

    Евгений Корепов

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


    • Баллы

      2

    • Постов

      738


  3. Равиль Зарипов (ZuBy)

    Равиль Зарипов (ZuBy)

    Модераторы


    • Баллы

      1

    • Постов

      2 517


  4. #WAMACO

    #WAMACO

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


    • Баллы

      1

    • Постов

      776


Популярный контент

Показан контент с высокой репутацией 31.01.2019 во всех областях

  1. Проблемы не существует в принципе. Пытался разобраться в коде, но из за его полной не читабельности, плюнул, все удалил а написал заново. Решил для забавы использовать анонимный поток для загрузки картинки. По кнопке все грузится и сразу отображается. Никаких костылей не используется (ну кроме как AListItemImage.OwnsBitmap:=True, но и без этого все работает). Прилагаю код и архив проекта: unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.ListView.Types, FMX.ListView.Appearances, FMX.ListView.Adapters.Base, System.Net.HttpClient, FMX.Controls.Presentation, FMX.StdCtrls, FMX.Layouts, FMX.ListView; const ListViewItemImageEmpy = -1; ListViewItemImageLoading = 0; ListViewItemImageLoaded = 1; type TForm1 = class(TForm) ListView1: TListView; Layout1: TLayout; Button1: TButton; procedure Button1Click(Sender: TObject); procedure ListView1UpdatingObjects(const Sender: TObject; const AItem: TListViewItem; var AHandled: Boolean); procedure FormCreate(Sender: TObject); private { Private declarations } FListViewUpdating : Boolean; procedure LoadImage(const AItemIndex : Integer; AURL : String); public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); begin FListViewUpdating:=False; end; procedure TForm1.Button1Click(Sender: TObject); var i:integer; item:TListViewItem; begin listview1.ItemIndex:=0; listview1.ItemAppearance.ItemAppearance:='Custom'; listview1.ItemAppearanceObjects.ItemObjects.Accessory.Visible:=false; //Очистка ListView for i := Listview1.ItemCount-1 downto 0 do ListView1.Items.Delete(i); //Формирование нового списка for i := 1 to 10 do begin Item:=listview1.Items.Add; item.Height:=45; FListViewUpdating:=true; item.data['ImageURL']:='http://fire-monkey.ru/uploads/monthly_2016_03/5-icon-29796ebcb510717e74ed258822feb2cc.png.365100cc218fe330c717aa80384fa4aa.png'; Item.Data['ImageState']:=ListViewItemImageEmpy; FListViewUpdating:=false; item.Adapter.ResetView(item); end; end; procedure TForm1.LoadImage(const AItemIndex : Integer; AURL : String); Var AHTTPClient : THTTPClient; AHTTPResponse : IHTTPResponse; begin AHTTPClient:=THTTPClient.Create(); AHTTPResponse:=AHTTPClient.Get(AURL); AHTTPClient.Free; if AHTTPResponse.StatusCode <> 200 then exit; TThread.Synchronize(Nil, procedure Var AListItemImage : TListItemImage; begin AListItemImage:=TListItemImage(ListView1.Items.Item[AItemIndex].View.FindDrawable('s_image')); if Assigned(AListItemImage) then begin AListItemImage.Bitmap:=TBitmap.Create; AListItemImage.Bitmap.LoadFromStream(AHTTPResponse.ContentStream); end; end ); end; procedure TForm1.ListView1UpdatingObjects(const Sender: TObject; const AItem: TListViewItem; var AHandled: Boolean); function SetupImageObject(const AName : String; AWidth, AHeight, X , Y : Single; AAlign, AVertAlign: TListItemAlign) : TListItemImage; Var AImageState : Integer; AImageURL : String; AListItemImage : TListItemImage; begin AListItemImage:=TListItemImage(AItem.View.FindDrawable(AName)); if AListItemImage = Nil then begin AListItemImage:=TListItemImage.Create(AItem); AListItemImage.Name:=AName; AListItemImage.Bitmap:=Nil; AListItemImage.OwnsBitmap:=True; end; if AListItemImage.Bitmap=Nil then begin AImageState:=AItem.Data['ImageState'].AsInteger; if AImageState=ListViewItemImageEmpy then begin AImageURL:=AItem.Data['ImageURL'].AsString; if Not AImageURL.IsEmpty then begin AItem.Data['ImageState']:=ListViewItemImageLoading; TThread.CreateAnonymousThread( procedure begin LoadImage(AItem.Index, AImageURL); end).Start; end; end; end; AListItemImage.Width:=AWidth; AListItemImage.Height:=AHeight; AListItemImage.PlaceOffset.X:=X; AListItemImage.PlaceOffset.Y:=Y; AListItemImage.Align:=AAlign; AListItemImage.VertAlign:=AVertAlign; AListItemImage.ScalingMode:=TImageScalingMode.StretchWithAspect; AListItemImage.Visible:=True; Result:=AListItemImage; end; begin if FListViewUpdating then exit; SetupImageObject('s_image', 35, 35, 0 , 0, TListitemalign.Leading, TListItemAlign.Center); AHandled:=true; end; end. LoadBitmaps.zip
    1 балл
  2. Я бы рекомендовал, как вам уже подсказывали, использовать готовые механизмы уведомлений. Или вариант с TNotificationCenter - над треем будет появляться окошко с вашим уведомлением, клик по окошку вы можете произвольно обработать в приложении. Этот механизм "написан по быстрому" через пень-колоду, просто создает окно, не пытаясь взаимодействовать с платформой. Или использовать родной механизм Windows - winapi Shell_NotifyIcon, тогда вы получите еще и уведомления в центре уведомлений Windows Второй способ можно использовать с помощью многочисленных компонентов TTrayIcon: procedure TForm1.SetNotification(const ATitle, AMessage : String); begin FTrayIcon.BalloonTitle:=ATitle; FTrayIcon.BalloonHint:=AMessage; FTrayIcon.ShowBalloonHint; end;
    1 балл
  3. Скриншоты с планшета добавлены в ГуглПлей?
    1 балл
  4. brunnengi

    Анимированная смена форм

    Да, я тоже пытался сделать через TabControl.. каждый раз с него начинаю но потом отказываюсь. В самом телеграмме, там новое окно как бы "наплывает" сбоку на основное. И при возврате назад, "сплывает" обратно. Пришлось реализовать такой же подход, через TLayput'ы и анимацию. При переходе в чат, новое окно двигается справа на лево и одновремено Opacity приходит к 1. Ну думаю смысл понятен.
    1 балл
  5. brunnengi

    Странный баг с TMultiView 2

    Кинь на форму Layount. Сделай HitTest = true; Когда MultiView "активен" выводи Layout поверх всех компонентов кроме Multiview. Делай Layout visile true, hittest=true, BringFront; Тогда если Нажимать "мимо" multiview то отрабатывать нажатие будет имено layout а не какой либо другой компонент
    1 балл
  6. Используйте механизм уведомлений, которые всплывают внизу, в трее.
    1 балл
  7. Dev

    Анимированная смена форм

    https://www.youtube.com/watch?v=YU7MlY58n9U&t=59s
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...