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

Archi_Ku

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

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

  • Посещение

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

  1. 1 час назад, krapotkin сказал:

    я бы все-таки рекомендовал пользоваться моей техникой 

    
    procedure TForm1.ThreadEnd(Sender:TObject);
    var th: TMyThread absolute Sender;
    begin

    вместо поля формы TH

    В чем прелесть? Может есть ссылка что почитать на эту тему?

  2. 49 минут назад, krapotkin сказал:

    if not Assigned(FFGActionDialog) then

    Взял кусок кода из стандартного примера.

    А так вобще верное замечание!

    Откровенно да, выглядит всё сложно, если не сказать хуже...

    Буду думать над оптимизацией. (У меня опыта работы  с потоками однозначно мало. Плаваю в том что касается передачи в поток, ожидания потока, возврата из потока)

     

    Наткнулся на интересную(для меня) реализацию возврата переменной из потока.

    unit uAwait;
    
    interface
    
    uses
      System.Classes
      ;
    
    type
      TAwaitableProc<T> = reference to function : T;
    
      IAwaitable<T> = interface
        function Value: T;
      end;
    
      TAwaitable<T> = class(TInterfacedObject, IAwaitable<T>)
      private
        FThread: TThread;
        FValue: T;
      public
        constructor Create(AwaitableProc: TAwaitableProc<T>); reintroduce;
        destructor Destroy; override;
    
        function Value: T;
      end;
    
    implementation
    
    constructor TAwaitable<T>.Create(AwaitableProc: TAwaitableProc<T>);
    begin
      inherited Create;
    
      FThread := TThread.CreateAnonymousThread(
        procedure begin
          FValue := AwaitableProc;
        end);
    
      FThread.FreeOnTerminate := False;
      FThread.Start;
    end;
    
    destructor TAwaitable<T>.Destroy;
    begin
      FThread.Free;
      inherited;
    end;
    
    function TAwaitable<T>.Value: T;
    begin
      FThread.WaitFor;
      Result := FValue;
    end;
    
    end.

    и сам вызов

    procedure TForm1.Button1Click(Sender: TObject);
    var
      Wait: TAwaitable<string>;
    begin
      Wait := TAwaitable<string>.Create(
        function : string
        begin
          Sleep(2500);
          Result := 'ewrewefewfrwe';
        end
      );
    
      ShowMessage(Wait.Value);
    end;

     

  3. Доброго времени суток коллеги!

     

    Прошу подсказать или выручить примером реализации окна "Подождите пожалуйста"/"Please wait". (Желательно стандартными компонентами)

    Приложение планирую запускать на Android и IOS.

    В дескопном клиенте делал Show и Hide (для того чтобы отобразить/спрятать окно), а для Android в частности аналогичное реализовать не удается, или может frame или layout использовать необходимо а я через form пытаюсь.

    Третий день бьюсь над этим вопросом, Господа выручайте.

     

    Читал вот эту статью ( http://fire-monkey.ru/topic/83-fgx-индикация-хода-выполнения-длительных-операций-виртуальная-клавиатура-и-actionsheet/ )

    Почти всё меня устраивало, только вот достичь желаемого результата не удалось:

    - поднять окно "Подождите пожалуйста"

    - выполнить запрос к серверу(получить ответ сервера)

    - по окончанию открыть другое окно(зависит от результата)

    - закрыть окно "подождите пожалуйста"

     

    Прошу поправить или подсказать как реализовать задуманное?! (если выручите примером буду премного благодарен)

    -------------------------------------------------------------------------------------------

    RAD Studio 10.2.2, Android SDK 24.0, IOS 11.3

     

     

    PleaseWait.7z

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