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

lala4a

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

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

  • Посещение

Сообщения, опубликованные lala4a

  1. Доброе время суток .  2 вопроса по Tedit . Помогите , пожалуйста )

    1) Притормаживает ввод текста и выделения .

    2) Внешний вид меню Вставить при длительном тапе по Tedit  отличается от всех других приложений .

     

    делфи.png

    как  в смс.png

  2. procedure ThreadHTTP.Execute;
    var
     j:integer;
       idhttp : TIdHTTP;
       ms:tmemorystream;
       png:tbitmap;
    begin
      ms := TMemoryStream.Create;
      IdHTTP := TIdHTTP.Create(nil);
      url:=TIdURI.URLEncode(url);
    
        try
    idhttp.Get(url,ms);
        ms.Position := 0;
      finally
     TThread.Synchronize(nil, procedure
               begin
                  bmp.LoadFromStream(ms);
               end);
    
        idhttp.Free;
        ms.Free;
    
      end;
    end;

    Хм . Вот так работает на Android  .

  3. 1 час назад, Brovin Yaroslav сказал:

    После окончания метода 

    
    getpic

    ARC удаляет ваш поток, так как ссылок на него нету. Нужно вынести переменную потока в поле класса, чтобы гарантировать наличие одной ссылки на ваш поток.

    Подскажите пожалуйста примером .

    43 минуты назад, GASCHE сказал:

    И работать будет коряво :( TImage не поток безопасный компонент поэтому присваивать ему значение в потоке без синхронизации нельзя.

    А если Tbitmap ?

    Я читал про потоки , но так и не понял как синхронизировать графический компонент .   Попробую описать , для чего конкретно мне надо , может направите в другое русло .

    С сервера получаем список вещей . К каждой вещи есть картинка .  Для отображения списка используется компонент

    Цитата

    tkstableview

     В процессе заполнения списка загружаются картинки .

    Цитата

    AItem: tkstableviewitem;

    pic:string;

    getpic(pic,AItem.Image.bitmap);

    В главном потоке это очень долго и подвисает основная форма . 

    Цитата

    application.HandleMessage;

    Не спасает .

    Поэтому хочу сначала получить список , а потом плавненько загрузить изображения .

    Пробовал через глобальные переменные - изображения вроде как загружаются, но получается бардак - они то повторяются , то перемешиваются , а то вообще их  нет .

    Вот накатал пример с использованием Timage , так сказать для пробы и дальнейшего переноса в основную программу , но с потоками дел до этого не имел . В интернете уйма примеров по скачке и сохранению файлов , по расчетам  и прочему . По своей задаче не нашел .  Надеюсь вы мне поможите )

     

  4. Доброе время суток .

    Я только начал знакомится с потоками , не судите строго .

    Вот код . Смысл которого через отдельный поток загружать изображение с сервера .

    unit Unit5;
    
    interface
    
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,iduri,idhttp,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects,
      FMX.Controls.Presentation, FMX.StdCtrls;
        type
     ThreadHTTP=class(TThread)
     private
      Stream:TMemoryStream;
      bmp:tbitmap;
      url:string;
     public
        constructor Create(abmp:tbitmap; aurl: String);
      procedure Execute;override;
     // procedure ShowResult;
    end;
    type
      TForm5 = class(TForm)
        Button1: TButton;
        Image1: TImage;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        procedure getpic(pic: string; img: Tbitmap);
      end;
    
    var
      Form5: TForm5;
    
    implementation
    
    {$R *.fmx}
    constructor ThreadHTTP.Create(abmp:tbitmap;aurl:string);
    begin
     inherited Create(false);
      bmp := abmp;
      url:=aurl;
    end;
    
    procedure ThreadHTTP.Execute;
    var
     j:integer;
       idhttp : TIdHTTP;
       ms:tmemorystream;
       png:tbitmap;
    begin
      ms := TMemoryStream.Create;
      IdHTTP := TIdHTTP.Create(nil);
      url:=TIdURI.URLEncode(url);
    
        try
    idhttp.Get(url,ms);
        ms.Position := 0;
      finally
      bmp.LoadFromStream(ms);
    
        idhttp.Free;
        ms.Free;
    
      end;
    end;
    
    
    procedure TForm5.Button1Click(Sender: TObject);
    begin
    getpic('krovat1',form5.Image1.Bitmap);
    end;
    
    procedure TForm5.getpic(pic: string; img: Tbitmap);
    var
    zapros:string;
    idhttp:tidhttp;
    MyHTTP:ThreadHTTP;
    begin
    zapros:='http://127.0.0.1/getimage_'+pic;
    MyHTTP:=ThreadHTTP.Create(img,zapros);
    MyHTTP.FreeOnTerminate := true;
    MyHTTP.resume;
    end;
    
    end.

    Код корявый , но работает в win32 .  В Android ничего не происходит .

    Помогите разобраться , пожалуйста .

     

×
×
  • Создать...