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

giveaway

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

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

  • Посещение

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

    1

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

  1. Like
    giveaway получил реакцию от Ingalime в Деплой приложения на iOS (Delphi 10.3.3 в связке с macOS Catalina)   
    И вдогонку вопрос - а Каталину только версия для Delphi поддерживает? А С++ нет? В описании к нему ни строчки о поддержке.
  2. Like
    giveaway отреагировална Losev Andrei в Деплой приложения на iOS (Delphi 10.3.3 в связке с macOS Catalina)   
    Ответ положительный, но без танцев с бубном, как я уже писал, не обошлось. Приложение писал для себя, теперь живет у меня на iPhone 6s с iOS 13.3.
  3. Like
    giveaway получил реакцию от Ingalime в Захват скриншота не работает в Маке   
    Привожу кусок кода, в котором я захватываю в скриншот то, что отображает бразуер. Под Виндой все прекрасно работает, а вот в Маке скриншоты создаются пустыми. Что может быть не правильно?
     
    TBitmap* TForm1::getScreenshotWebBrowser() { TBitmap *BitmapBuffer; TBitmap *bmp_Scrhot = new TBitmap; // Фиксируем размер снимаемой области TRectF SourceRect(0, 0, WebBrowser1->Width, WebBrowser1->Height); TRect Rect_bmp(0, 0, WebBrowser1->Width, WebBrowser1->Height); // Создаем временный буфер для получения скриншота BitmapBuffer = new TBitmap(SourceRect.Width(), SourceRect.Height()); try { // Переводим канву в режим отрисовки - начинаем процесс отрисовки сцены if (BitmapBuffer->Canvas->BeginScene()) try { // Говорим контролу отрисовать себя в канве нашего буфера в указанной области WebBrowser1->PaintTo(BitmapBuffer->Canvas, SourceRect); } __finally { // Завершаем процесс отрисовки, заканчивая формируемую сцену BitmapBuffer->Canvas->EndScene(); } BitmapBuffer->SaveToFile(GetHomePath() +"/screenshot1.png"); bmp_Scrhot->Width = Rect_bmp.Width(); bmp_Scrhot->Height = Rect_bmp.Height(); bmp_Scrhot->CopyFromBitmap(BitmapBuffer, Rect_bmp, 0, 0); bmp_Scrhot->SaveToFile(GetHomePath() +"/screenshot2.png"); } __finally { delete BitmapBuffer; } return bmp_Scrhot;  
  4. Like
    giveaway отреагировална dnekrasov в Как обратится к бинарнику внутри контейнера .app или вытащить его оттуда?   
    Вот код, который вернёт путь к исполняемому файлу (тот, который деплоится в "Contents\MacOS\")
    function GetModuleFName(AModule: Cardinal): string; begin SetLength(Result, MAX_PATH); GetModuleFileName(AModule, @Result[1], MAX_PATH); SetLength(Result, StrLen(PChar(Result))); end; function GetModuleFolder: string; begin Result := IncludeTrailingPathDelimiter(ExtractFilePath(GetModuleFolder(HInstance))); end; :
  5. Like
    giveaway отреагировална Равиль Зарипов (ZuBy) в Ищу несколько кросс-платформенных компонентов   
    чтобы прям кросс, думаю такой код подойдёт
    function StartGranted: boolean; // uses System.IOUtils begin Result := not TFile.Exists(TPath.Combine(TPath.GetDocumentsPath, 'IamStarted')); TFile.WriteAllText(TPath.Combine(TPath.GetDocumentsPath, 'IamStarted'), ''); end; в dpr пишем
    begin if StartGranted then begin Application.Initialize; Application.CreateForm(TForm2, Form2); Application.Run; end; end. ну и в дестрое главной формы
    procedure TForm2.FormDestroy(Sender: TObject); //uses  System.IOUtils; begin   TFile.Delete(TPath.Combine(TPath.GetDocumentsPath, 'IamStarted')); end; Но это не точно, может есть и  аналог mutex'a в MacOS
  6. Like
    giveaway отреагировална dnekrasov в Ищу несколько кросс-платформенных компонентов   
    По 1-му вопросу для MacOS:
    function CheckRunning: Boolean; var sl: TStringList; iCount: Integer; s: String; begin sl := TStringList.Create; try GetRunningAplications(sl); iCount := 0; for s in sl do if SameText(s, APP_BundleID) then // APP_BundleID - константа с BundleID приложения Inc(iCount); Exit(iCount < 2) finally sl.Free; end; end; procedure GetRunningAplications(AList: TStrings); var WorkSpace: NSWorkSpace; App: NSRunningApplicationEx; i: Integer; list: NSArray; begin WorkSpace := TNsWorkspace.Wrap(TNsWorkSpace.OCClass.SharedWorkspace); list := Workspace.runningApplications; if (list <> nil) and (list.count > 0) then begin for i := 0 to list.count-1 do begin App := TNSRunningApplicationEx.Wrap(list.objectAtIndex(i)); if App.bundleIdentifier <> nil then AList.Add(string(App.bundleIdentifier.UTF8String)) else AList.Add(String(App.executableURL.path.UTF8String)); end; end; end; Ответ на 3-ий вопрос сам уже долго ищу
  7. Like
    giveaway отреагировална dnekrasov в Как запустить дочерний процесс на Маке?   
    Вот пример как у меня идет добавление в архив используя zip в MacOS:
    function ZipAdd(AArchName, AFileName: String): boolean; {$IFDEF MACOS} var s, sRoot, sFileName, sArchName: String; {$ENDIF} begin Result := False; {$IFDEF MACOS} try if DirectoryExists(AFileName) then begin if AFileName[AFileName.Length] = PathDelim then System.Delete(AFileName, AFileName.Length, 1); sRoot := ExtractFilePath(AFileName); AFileName := AFileName.Remove(0, sRoot.Length); s := Format('pushd "%s"; zip -r "%s" "%s"; popd', [sRoot, AArchName, AFileName]); _system(PAnsiChar(UTF8String(s))); end else begin s := Format('zip -j "%s" "%s"', [AArchName, AFileName]); _system(PAnsiChar(UTF8String(s))); end; Result := FileExists(AArchName); except Result := False; end; {$ENDIF} end; Замените зиповские команды архивирования на раровские разархивирования, добавьте необходимую Вам логику и наслаждайтесь
  8. Like
    giveaway получил реакцию от Vitaldj в Не идет компиляция под Мак   
    Напишу как апдейт. Создал второго Админа с именем на латинице и все заработало.
×
×
  • Создать...