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

Vizit0r

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

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

  • Посещение

Весь контент Vizit0r

  1. вопрос решился переходом на OSX64 и нотаризацией приложения, после этого скрипт работает как часы.
  2. Vizit0r

    выполнение скрипта installer-pkg

    доброго времени суток! выполняю скрипт 'do shell script "installer-pkg /Users/alex/Library/Containers/stealth/Data/Public/ Stealth.pkg -target /" with administrator privileges' (код ниже). Долго и нудно пытался выяснить, почему на девелоперской машине то работает, то нет, а у обычного пользователя всегда нет. Пришел к тому, что при установленном приложении в /Applications скрипт не срабатывает вообще, запроса пароля нет, при этом в словаре errorInfo нет ключа NSAppleScriptErrorNumber, eventResult = nil. причина не ясна вообще. На девелоперской же машине, оно нормально выкидывает окно запроса пароля, при отмене обрабатывает ошибку, при вводе пароля - не задумываясь обновляет stealth.app в scratch-dir от paserver'а, а не в /Applications. Естественно, что из того же ScriptEditor этот же скрипт отлично обновляет приложение, установленное в /Applications. Есть четкое ощущение, что это маковские заморочки с правами, подскажите, куда копать? Приложение подписанное обоими сертификами, но не нотаризовано, ибо x32. Delphi Rio, MacOs Mojave 10.14.3 P.S. Собственно, для чего это всё: По согласию пользователя качается файл обновления (.pkg) с сайта, обновляется (желательно в тихом режиме, программа перезапускается). Запуск обновления в ручном режиме я давно сделал, но хотелось бы делать это в автомате, а от пользователя только ввод пароля. Код: function runProcessAsAdministrator(const scriptPath: string; Parameters: array of string; out OutputText : String) : Boolean; var appleScript : NSAppleScript; I : Integer; eventResult : NSAppleEventDescriptor; errorInfo : NSDictionary; cb_ptr : Pointer; errorNumber : NSNumber; allArgs,fullScriptLine : String; scriptExecLine : NSString; arr : NSArray; begin if Length(Parameters) > 0 then begin for I := 0 to Length(Parameters)-1 do allArgs := allArgs + Parameters[i] + ' '; allArgs := allArgs.TrimRight; end; fullScriptLine := scriptPath + ' ' + allArgs; scriptExecLine := StrToNSStr('do shell script "' + fullScriptLine +'" with administrator privileges'); appleScript := TNSAppleScript.Wrap(TNSAppleScript.Alloc.initWithSource(scriptExecLine)); eventResult := TNSAppleEventDescriptor.Alloc; eventResult := appleScript.executeAndReturnError(@cb_ptr); errorInfo := TNSDictionary.Wrap(cb_ptr); Result := Assigned(eventResult); if Result then OutputText := NSStrToStr(eventResult.stringValue) else begin if Assigned(errorInfo) then begin cb_ptr := errorInfo.valueForKey(NSAppleScriptErrorNumber); if Assigned(cb_ptr) then begin errorNumber := TNSNumber.Wrap(cb_ptr); if errorNumber.intValue = -128 then OutputText := 'The administrator password is required to do this.' else OutputText := NSStrToStr(TNSString.Wrap(cb_ptr)); end else //debug purpose only!!! begin i := errorInfo.count; //if we have real error - here will be 5, else 4 cb_ptr := errorInfo.allKeys;//if Dict is empty, this pointer will be zero if Assigned(cb_ptr) then begin arr := TNSArray.Wrap(cb_ptr); //result looks like incorrect i := arr.Count; //this will return AV always! for I := 0 to arr.Count - 1 do OutputText:= NSStrToStr(TNSString.Wrap(arr.objectAtIndex(i))); end; end; end; ShowMessageMultiplatform('Returnval = ' + Boolean.ToString(Result,TUseBoolStrs.True) + sLineBreak + 'OutText = ' + OutputText); end; end;
  3. действительно, ReadWrite не затирает. А я его банально не проверил Спасибо, помогло.
  4. Тестовый пример - вычитываю во временый битмап картинку из файла. Потом временный битмап рисую на полотне битмапа от Image1. Потом еще рисую на полотне, например эллипс. На этом этапе все хорошо. А дальше достаточно сделать Image1.Bitmap.Map - Unmap, и все, изображение пустое. Если писать через BitmapData напрямую в пикселы - оно показывается на экране. При этом каким-то странным образом эффект стирания битмапа убирается путем вызова Image1.Bitmap.SaveToFile перед вызовом Map-Unmap, Исходники пытался читать, причины не нашел. Кто в курсе, подскажите - что я делаю не так? P.S. Если читать из файла напрямую в Image1.Bitmap - то при Map-Unmap затираются только изменения полотна, а загруженный рисунок остается. Явно какие-то недокументированные особенности вызова Map-Unmap.. P.P.S. Зло где-то в районе вызова if H.FAccess in [TMapAccess.ReadWrite, TMapAccess.Write] then SharedDevice.CopyResource(H.Texture, H.FMapBuffer); при Unmap. Осталось придумать, как это побороть и совместить рисование на полотне с прямым доступом к пикселам. procedure TForm2.Button1Click(Sender: TObject); var Bmp1 : Tbitmap; BitmapData : TBitmapData; begin Bmp1 := Tbitmap.Create; Bmp1.CreateFromFile('c:\123.bmp'); Image1.Bitmap.Width := Bmp1.Width; Image1.Bitmap.Height := Bmp1.Height; Image1.Bitmap.Canvas.BeginScene; Image1.Bitmap.Canvas.DrawBitmap(Bmp1,TRectF.Create(0,0,Bmp1.Width,Bmp1.Height), TRectF.Create(0,0,Image1.Bitmap.Width,Image1.Bitmap.Height), 1); Image1.Bitmap.Canvas.Stroke.Color := TAlphaColorRec.Red; Image1.Bitmap.Canvas.DrawEllipse(TRectF.Create(10, 10, 20,20), 1); Image1.Bitmap.Canvas.EndScene; // Image1.Bitmap.SaveToFile('c:\0001.bmp'); //если это закомментировать, то //при вызове Map-Unmap в Image будет пусто Image1.Bitmap.Map(TMapAccess.Write,BitmapData); // здесь была работа с пикселами напрямую - замена цветов в нескольких точках. Image1.Bitmap.Unmap(BitmapData); Bmp1.Free; // BMPTest(Image1.Bitmap); end;
  5. вот это не понял, но скинуть всё на Layout помогло. Спасибо.
  6. Добрый вечер. есть MultiView. есть TabControl с Align = Client. есть Panel с Align = Bottom, растянута на часть экрана, где-то треть. При этом MultiView при показе (когда выезжает слева) - отображается только на той части экрана, где TabControl, и не показывается на части, занятой Panel. В какую сторону стоит копать, чтобы добиться сдвигания этой нижней панели при выезде MultiView? Менять Align у нижней панели нельзя, иначе вся структура окна уплывет.
  7. а ты умеешь аргументировать свою точку зрения.
  8. да легко комментарии и мысли по теме - внутри исходника. P := BitmapData.GetScanline(Y); - это VCL? Битмап вычитывается из файла, попутно преобразовывается из 15б формата в 32, но это отношения к теме не имеет. Project2.rar
  9. Delphi Seattle, Android 5.0.1 Формирую картинку через ScanLine. На выходе полученный битмап рисуется на полотне TImage, на котором перед этим был нарисован Rect. GlobalBitmap - формированный tbitmap. with ObjectPreviewImage.Bitmap.Canvas do begin BeginScene; Clear(TAlphaColorRec.White); DRect := TRectF.Create(0, 0, GlobalBitmap.Width + 8, GlobalBitmap.Height + 8); DrawRect(DRect, 0, 0, AllCorners, StealthForm.ObjectPreviewImage.AbsoluteOpacity); DRect := TRectF.Create(0, 0, GlobalBitmap.Width, GlobalBitmap.Height); DrawBitmap(GlobalBitmap,DRect, TRectF.Create(2, 2, GlobalBitmap.Width + 2, GlobalBitmap.Height + 2), 1); EndScene; end; Проблема собственно в чем - в андроидной версии слева и внизу рамка "съедается". В Win32 версии все отлично. На прилагаемых скриншотах это четко видно. Документацию читал, гугл гуглил. Что я делаю не так? Или это неизвестные подводные камни андроидного рисования на полотне? P.S. Картинка одинаковая, цвет к определенной области применяется не верно. Походу тоже андроидные приколы. Но с этим я уже разберусь. P.P.S. Уже разобрался с цветом - под андроидом Blue и Red в пикселе надо поменять местами. А насчет канвы - не получается никак. P
  10. лови P.S. Спасибо братьям-китайцам 10_Seattle_Update_1_ModernTheme_Hotfix.zip
×
×
  • Создать...