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

Astghik

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

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

  • Посещение

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

  1. Like
    Astghik отреагировална vic85 в встраивание Fire Monkey в Windows приложение   
    Делаем так, в dll метод создания формы может быть таким
    procedure Init(ParentWindow: HWND; const Rect: Windows.TRect); stdcall; begin try StartupInput.DebugEventCallback := nil; StartupInput.SuppressBackgroundThread := False; StartupInput.SuppressExternalCodecs := False; StartupInput.GdiplusVersion := 1; GdiplusStartup(gdiplusToken, @StartupInput, nil); Form1 := TForm1.Create(nil); Form1.Show; if ParentWindow <> 0 then begin //Скроем иконку приложения с панели задач ShowWindow(ApplicationHWND, SW_HIDE); //Сменим стиль окна что бы оно не перехватывало фокус с родительского окна SetWindowLong(FmxHandleToHWND(Form1.Handle), GWL_STYLE, GetWindowLong(FmxHandleToHWND(Form1.Handle), GWL_STYLE) and (not WS_POPUP) OR WS_CHILD); //Встроим окно в родительское Windows.SetParent(FmxHandleToHWND(Form1.Handle), ParentWindow); //Установим размеры окна такими которыми инициализирована DLL SetWindowPos(FmxHandleToHWND(Form1.Handle), 0, Rect.Left, Rect.Top, RectWidth(Rect), RectHeight(Rect), 0); end; except on E: Exception do MessageBox(0, PChar(E.Message), '', 0); end; end; Эта функция создаст форму и встроит ее на хост в vcl приложении. У формы в dfm должен быть убраны границы что бы оно вписалось. Так же для того что бы форма изменяла размеры вписываясь в хост экспортируем функцию получения хэндла
    function GetFormHandle: HWND; stdcall; begin Result := 0; try Result := FormToHWND(Form1); except on E: Exception do MessageBox(0, PChar(E.Message), '', 0); end; end; Собственно в хосте загружаем dll, и создаем форму кидая ее на панель 
    Init(panel1.Handle, panel1.ClientRect); Что бы форма меняла размер как и панель - нужно создать обработчик изменения размеров панели и там менять размер встроенной формы
    procedure THostForm.Panel1Resize(Sender: TObject); var h: HWND; Rect: Windows.TRect; begin h := 0; Rect := Panel1.ClientRect; if Assigned(FGetFormHandleProc) then h := FGetFormHandleProc; if h <> 0 then SetWindowPos(h, 0, Rect.Left, Rect.Top, RectWidth(Rect), RectHeight(Rect), 0); end;  
    Вот так получается втсроить FMX форму из Dll в VCL приложение
  2. Sad
    Astghik отреагировална Barbanel в Rad Studio C++ Android 64-bit requirement   
    - Когда будет реализована эта фича?
    - Я думаю, что ближе к никогда. Никогда вас устроит?
    ?
  3. Like
    Astghik отреагировална denprox в Эффект тумана   
    не то ... туман же не делает картинку размытой... 
    Пока что вижу выход только такой - кинуть текстуру облачности поверх основной картинки, и подобрать прозрачность 
  4. Like
    Astghik отреагировална krapotkin в Print from Android(IOS)   
    it isn't an usual printer, so printing on it isn't usual too ))
    This kind of printers have a special escape codes (as like an old good Epson matrix one) to change a print mode, so you have to get a documentation from manufacturer, where there are described
    After that you can fully control your printing as you've show above - simply sending the text strings with control codes to your printer over the network.
    Fast search brings this to me.
    https://www.manualslib.com/manual/132455/Posiflex-Pp3000-Series.html?page=52
    i guess you can send codes someway like this Socket->Write(0x9); ...
  5. Like
    Astghik отреагировална ENERGY в Проверить состояние сети   
    Вот вариант предложенный Равилем (я его немного изменил):
    Кстати на Android есть методы ОС для этого, они гораздо быстрее.
    uses System.Net.HttpClient
    function CheckInternet: boolean; begin   Result := false; with THTTPClient.Create do   try     try       Result := Head('http://google.com').StatusCode < 400;     except     end;   finally     Free;   end; end;      
  6. Like
    Astghik отреагировална ENERGY в Руководства RAD Studio Mobile Tutorials - Free eBook   
    Кстати там уже новая версия для Берлина появилась: http://docs.embarcadero.com/products/rad_studio/radstudioBerlin/Mobile_Tutorials_en.pdf
  7. Like
    Astghik отреагировална Fedor K в Открытие "своего" файла из приложения   
    Для открытия файла лучше пользоваться не:
    TNSURL.Wrap (TNSURL.OCClass.URLWithString (StrToNSStr (PChar (URL)))); а:
    TNSUrl.Wrap(TNSUrl.OCClass.fileURLWithPath(StrToNSStr(path)));  
  8. Like
    Astghik отреагировална Brovin Yaroslav в Фоновое выполнение операции без "замораживания" отрисовки   
    Вся отрисовка выполняется в главном потоке приложения. Поэтому, если вы пытаетесь выполнить скачивание файла в основном потоке, то вся отрисовка приостановится до момента окончания вашей операции. Поэтому правило хорошего тона - это вынесение долгих операций (загрузка, ответ авторизации и тд) в отдельный поток. 
     
    Примерный код приведен ниже:
    1. Создаем отдельный поток, в котором вы будите скачивать файл (я поставил для эмуляции скачивания просто паузу на 5 секунд):
    type TMyTask = class (TThread) protected FOnTaskStarted: TThreadMethod; FOnTaskFinished: TThreadMethod; procedure DoStarted; procedure DoFinished; procedure Execute; override; public property OnTaskStarted: TThreadMethod read FOnTaskStarted write FOnTaskStarted; property OnTaskFinished: TThreadMethod read FOnTaskFinished write FOnTaskFinished; end; Реализация:
    { TMyTask } procedure TMyTask.DoFinished; begin if Assigned(OnTaskFinished) then OnTaskFinished; end; procedure TMyTask.DoStarted; begin if Assigned(OnTaskStarted) then OnTaskStarted; end; procedure TMyTask.Execute; begin Synchronize(DoStarted); try Sleep(5000); // Эмуляция выполнения 5 Секундной задачи finally Synchronize(DoFinished); end; end; Само использование такого потока будет следующим (в моем примере после выполнения операции, появится сообщение):
    TForm3 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private FMyTask: TMyTask; public procedure DoTaskStarted; // Callback, вызываемый в начале старта операции procedure DoTaskFinished; // Callback, вызываемый в конце выполнения операции. Аналог OnTerminate procedure StartMyTask; // Запуск задачи end; procedure TForm3.Button1Click(Sender: TObject); begin StartMyTask; end; procedure TForm3.DoTaskStarted; begin end; procedure TForm3.DoTaskFinished; begin ShowMessage('Выполнение задачи окончено'); end; procedure TForm3.StartMyTask; begin if FMyTask <> nil then begin FMyTasl.OnTaskStarted := nil; FMyTasl.OnTaskFinished := nil; FMyTask.Free; end; FMyTask := TMyTask.Create(True); FMyTask.OnTaskStarted := DoTaskStarted; FMyTask.OnTaskFinished := DoTaskFinished; FMyTask.Start; end; При таком подходе главный поток не будет блокироваться и будет корректно отрисовываться и работать.
  9. Like
    Astghik получил реакцию от Kitty в Как программно обновить и запустить другое приложение (Андроид)?   
    #include <Androidapi.JNI.JavaTypes.hpp>
    #include <Androidapi.Helpers.hpp>
    #include <Androidapi.JNI.Embarcadero.hpp>
    #include <Androidapi.JNI.GraphicsContentViewText.hpp>
    for Rad Studio 10
  10. Like
    Astghik получил реакцию от Rusland в Как программно обновить и запустить другое приложение (Андроид)?   
    _di_JIntent newIntent = TJIntent::Create();
        newIntent->setAction(TJIntent::JavaClass->ACTION_VIEW);
        _di_JMimeTypeMap mime = TJMimeTypeMap::JavaClass->getSingleton();
        _di_JString ExtToMime = mime->getMimeTypeFromExtension(StringToJString(L"apk"));
        String pth = System::Ioutils::TPath::GetPublicPath() + L"/app.apk";   // path app.apk
        _di_JFile my_file = TJFile::JavaClass->init(StringToJString(pth));
        _di_Jnet_Uri uri = TJnet_Uri::JavaClass->fromFile(my_file);
        newIntent->setDataAndType(uri,ExtToMime);
        int my_flag = TJIntent::JavaClass->FLAG_ACTIVITY_NEW_TASK;
        newIntent->setFlags(flag);
        SharedActivity()->startActivity(newIntent);
  11. Like
    Astghik получил реакцию от Kitty в Как программно обновить и запустить другое приложение (Андроид)?   
    _di_JIntent newIntent = TJIntent::Create();
        newIntent->setAction(TJIntent::JavaClass->ACTION_VIEW);
        _di_JMimeTypeMap mime = TJMimeTypeMap::JavaClass->getSingleton();
        _di_JString ExtToMime = mime->getMimeTypeFromExtension(StringToJString(L"apk"));
        String pth = System::Ioutils::TPath::GetPublicPath() + L"/app.apk";   // path app.apk
        _di_JFile my_file = TJFile::JavaClass->init(StringToJString(pth));
        _di_Jnet_Uri uri = TJnet_Uri::JavaClass->fromFile(my_file);
        newIntent->setDataAndType(uri,ExtToMime);
        int my_flag = TJIntent::JavaClass->FLAG_ACTIVITY_NEW_TASK;
        newIntent->setFlags(flag);
        SharedActivity()->startActivity(newIntent);
×
×
  • Создать...