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

AngryOwl

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

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

  • Посещение

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

    45

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

  1. Like
    AngryOwl получил реакцию от noisy в TImage в Base64   
    {$IFDEF ANDROID} function Encode_Stream( AStream: TStream ): string; var LStream: TMemoryStream; begin AStream.Position:= 0; LStream := TMemoryStream.Create; TNetEncoding.Base64.Encode( AStream, LStream ); LStream.Position := 0; Result := ReadStringFromStream(LStream, -1, IndyTextEncoding_8Bit); end; function Decode_Stream( enc_str: string ): TMemoryStream; var LStream: TStringStream; begin Result:= TMemoryStream.Create; LStream:= TStringStream.Create; LStream.WriteString( enc_str ); LStream.Position:= 0; TNetEncoding.Base64.Decode( LStream, Result ); end; {$ELSE} function Encode_Stream(AStream: TStream): string; begin AStream.Position:= 0; Result:= TIdEncoderMIME.EncodeStream(AStream); end; function Decode_Stream(enc_str: string): TMemoryStream; begin Result:= TMemoryStream.Create; TIdDecoderMIME.DecodeStream(enc_str, Result); end; {$ENDIF} function LoadBitmapFromStream(const AStream: TStream; const Bitmap: TBitmap): Boolean; var Bmp: TBitmapSurface; begin Result := False; Bmp := TBitmapSurface.Create; try Bmp.Assign(Bitmap); Result := TBitmapCodecManager.LoadFromStream(AStream, Bmp); Bitmap.Assign(Bmp); finally FreeAndNil(Bmp); end; end; function SaveBitmapToStream(const AStream: TStream; const Bitmap: TBitmap; const Extension: string; SaveParams: PBitmapCodecSaveParams = nil): Boolean; var surf: TBitmapSurface; begin Result := False; surf := TBitmapSurface.Create; surf.Assign(Bitmap); try Result := TBitmapCodecManager.SaveToStream(AStream, surf, Extension, SaveParams); finally surf.Free; end; end; function Bitmap_To_Base64(bmp: TBitmap; const AQuality: Integer = 85): string; var eStream: TMemoryStream; SaveParams: TBitmapCodecSaveParams; begin eStream:= TMemoryStream.Create; SaveParams.Quality := AQuality; SaveBitmapToStream(eStream, bmp, '.jpg', @SaveParams); Result:= Encode_Stream(eStream); eStream.Free; end; function Bitmap_From_Base64(b64_string: string): TBitmap; var eStream: TMemoryStream; begin Result := TBitmap.Create; eStream := Decode_Stream(b64_string); if Assigned(eStream) then try eStream.Position := 0; LoadBitmapFromStream(eStream, Result); finally eStream.free; end; end; Скинул как есть. На цэ желания переводить нет, так-что смотрите сами... Надеюсь разберетесь
  2. Like
    AngryOwl получил реакцию от zairkz в TImage в Base64   
    {$IFDEF ANDROID} function Encode_Stream( AStream: TStream ): string; var LStream: TMemoryStream; begin AStream.Position:= 0; LStream := TMemoryStream.Create; TNetEncoding.Base64.Encode( AStream, LStream ); LStream.Position := 0; Result := ReadStringFromStream(LStream, -1, IndyTextEncoding_8Bit); end; function Decode_Stream( enc_str: string ): TMemoryStream; var LStream: TStringStream; begin Result:= TMemoryStream.Create; LStream:= TStringStream.Create; LStream.WriteString( enc_str ); LStream.Position:= 0; TNetEncoding.Base64.Decode( LStream, Result ); end; {$ELSE} function Encode_Stream(AStream: TStream): string; begin AStream.Position:= 0; Result:= TIdEncoderMIME.EncodeStream(AStream); end; function Decode_Stream(enc_str: string): TMemoryStream; begin Result:= TMemoryStream.Create; TIdDecoderMIME.DecodeStream(enc_str, Result); end; {$ENDIF} function LoadBitmapFromStream(const AStream: TStream; const Bitmap: TBitmap): Boolean; var Bmp: TBitmapSurface; begin Result := False; Bmp := TBitmapSurface.Create; try Bmp.Assign(Bitmap); Result := TBitmapCodecManager.LoadFromStream(AStream, Bmp); Bitmap.Assign(Bmp); finally FreeAndNil(Bmp); end; end; function SaveBitmapToStream(const AStream: TStream; const Bitmap: TBitmap; const Extension: string; SaveParams: PBitmapCodecSaveParams = nil): Boolean; var surf: TBitmapSurface; begin Result := False; surf := TBitmapSurface.Create; surf.Assign(Bitmap); try Result := TBitmapCodecManager.SaveToStream(AStream, surf, Extension, SaveParams); finally surf.Free; end; end; function Bitmap_To_Base64(bmp: TBitmap; const AQuality: Integer = 85): string; var eStream: TMemoryStream; SaveParams: TBitmapCodecSaveParams; begin eStream:= TMemoryStream.Create; SaveParams.Quality := AQuality; SaveBitmapToStream(eStream, bmp, '.jpg', @SaveParams); Result:= Encode_Stream(eStream); eStream.Free; end; function Bitmap_From_Base64(b64_string: string): TBitmap; var eStream: TMemoryStream; begin Result := TBitmap.Create; eStream := Decode_Stream(b64_string); if Assigned(eStream) then try eStream.Position := 0; LoadBitmapFromStream(eStream, Result); finally eStream.free; end; end; Скинул как есть. На цэ желания переводить нет, так-что смотрите сами... Надеюсь разберетесь
  3. Like
    AngryOwl отреагировална Равиль Зарипов (ZuBy) в Скорость обновления окна программы   
    Во первых все зависит от размеров формы
    Во вторых тень сделанная с помощью PNG работает быстрей, чем тень отрисованная эффектами FMX
    В третьих чисто теоретически работа со стилями, тем более 9.png, будет кушать больше ресурсов чем залить область через FillRect 
    Я бы реализовывал первым вариантом (более гибкий и простой в реализации)
  4. Like
    AngryOwl отреагировална noisy в Вопрос кодировки   
    Вы меня извините, что я не по теме... но ...
    Перестаньте работать с мобильной платформой как с десктопом.
    Не нужно работать с базой напрямую, делайте промежуточное звено и общайтесь с базой через него (API). Да это сложнее, но так правильней.
  5. Like
    AngryOwl получил реакцию от Pax Beach в [Android] Как скрыть/показать системный Status Bar?   
    Не работает!
    В режиме DesignTime (в IDE) при изменении свойтва формы BorderStyle = TFmxFormBorderStyle.bsNone StatusBar пропадает. Но он остается при запуске приложения на смарте.
    В "Project / Options / Uses Permissions" установлены свойства:
    Expand status bar = True
    Advanced / Status bar = True
    (пробовал и другие варианты)
     
    При запуске приложения Status bar не пропадает.
     
    Но вопрос стоял иначе - "скрыть/показать Status Bar в процессе работы"
  6. Like
    AngryOwl получил реакцию от zairkz в Типовые приемы работы с TListView   
    var     newLine : TListViewItem;   begin     newLine := {ваш_TListView}.Items.Add;     newLine.purpose:= TListItemPurpose.Header;     newLine.Height := 1;     newLine.Text := '';   end; вот Вам "разделитель")
     
    P.S. А в остальном, думаю, что слишком много вопросов сразу... Потому и не отвечают.
    Вот у меня, например, нет времени отвечать на все - в итоге не отвечу совсем. (просто именно этот ответ занял пару минут на все)
    А иногда было бы можно, если бы вопрос был кратко и четко сформулирован.
  7. Like
    AngryOwl отреагировална Равиль Зарипов (ZuBy) в Редактор ListView 2 - DynamicAppearance   
    как-то так
    var   iTitle: TListItemText; begin   iTitle := AItem.Objects.FindDrawable('Text1') as TListItemText;   if iTitle <> nil then iTitle.Width:=ListView5.Width-85; end;
  8. Like
    AngryOwl отреагировална Равиль Зарипов (ZuBy) в Редактор ListView 2 - DynamicAppearance   
    всегда присваивайте в переменную, проверьте на валидность, а потом проводите с ней различные операции. у меня много раз было AV, т.к. "контрол" не был создан
  9. Like
    AngryOwl отреагировална Sergionn в RAD 11 на подходе?   
    "Ответ" ms на бесплатную редакцию Xamarin!
    p.s. число пользователей сокращается, а показатели держать надо - это пожалуй единственное, пришедшее на ум логичное объяснение этого абсурда, ну а отсутствие x86 поддержки в android и медленная работа с мультимедией (камера и тп) - это вообще отдельная "песня".
  10. Like
    AngryOwl отреагировална Kitty в RAD 11 на подходе?   
    Найден PDF на другом форуме: https://yadi.sk/i/A-uJEmd7qSdbx
  11. Like
    AngryOwl отреагировална Andrey Efimov в RAD 11 на подходе?   
    Официально - наверно 21 апреля.
    А не официально - уже доступна для скачивания.
  12. Like
    AngryOwl отреагировална Rusland в Скачать курс валют через THTTPClient   
    Проблема решена.
    Оказалось что там кодировка Win1251, а я указал 
    TStringStream.Create('', TEncoding.UTF8); вместо
    TStringStream.Create(''); И парсер на всякий случай:
    uses msxml; procedure GetKursValutAndDate(XML:String; var KDollar,KEuro:Double); var XMLDoc: IXMLDOMDocument; Subnodes: IXMLDOMNodeList; AttributeNode: IXMLDOMNode; OperationNode: IXMLDOMNode; i:integer; begin KDollar:=0; KEuro:=0; try XMLDoc:=CoDOMDocument.Create; if Assigned(XMLDoc) and XMLDoc.loadXML(XML) then begin Subnodes:=XMLDoc.selectNodes('//ValCurs/node()'); if Assigned(Subnodes) then begin for I := 0 to Subnodes.length - 1 do begin AttributeNode := Subnodes[I].attributes.getNamedItem('ID'); if Assigned(AttributeNode) then if (AttributeNode.nodeValue='R01235') then begin // доллар OperationNode:=Subnodes[I].selectSingleNode('.//Value'); if Assigned(OperationNode) then KDollar:=StrToFloat(OperationNode.text); end else if (AttributeNode.nodeValue='R01239') then begin // евро OperationNode:=Subnodes[I].selectSingleNode('.//Value'); if Assigned(OperationNode) then KEuro:=StrToFloat(OperationNode.text); end end; end; end; except Raise Exception.Create('Не удалось получить курс валют'); end; end;  
  13. Like
    AngryOwl отреагировална Равиль Зарипов (ZuBy) в RAD 11 на подходе?   
    1) Кастомный стиль в виде плитки *
    2) ListView с горизонтальной прокруткой, профиксил баги, которые появились из-за этого *
    3) Отступ сверху от первого Itema, задается вручную. (нужно было сделать, чтобы решить без многочисленных костылей одну ситуацию)
    4) Кастомные цвета для отдельных Item'ов
    5) разные хелперы и внутренние настройки
    * можно посмотреть тут
    скрин выполненной работы

  14. Like
    AngryOwl отреагировална rareMax в RAD 11 на подходе?   
    The Berlin release contains the following new and improved features.
  15. Like
    AngryOwl отреагировална Alex Bozhko в RAD 11 на подходе?   
    Конечно надо! Но прежде всего надо, что бы команда разработчиков, в том числе и создатель этого форума, имели ресурс на развитие качественного продукта. А вот как это сделать (что бы и овцы целы и волки сыты) думают специально обученные люди из команды маркетологов.
     
  16. Like
    AngryOwl отреагировална Равиль Зарипов (ZuBy) в Тормоза при первом переключении вкладок TTabControl   
    Решение Ярослава
  17. Like
    AngryOwl отреагировална noisy в Какие статьи вы хотели бы видеть в блогах?   
    Рассмотрение подходов создания мобильного приложения со многими формами
    табы, формы, фрэймы. Плюсы и минусы того и иного подхода.
  18. Like
    AngryOwl получил реакцию от Alex7wrt в Воспроизведение одного видео в двух окнах, Windows   
    Вот, кстати, Андрей Ефимов создал тему. Вот и сформулируйте правильно вопрос, на который бы Вы хотели получить полноценный и развернутый ответ.
    Вдруг наши гуру обратят на него внимание!? )))
    Ну а если нет - будем ждать..
    Все-таки работа с видео, в частности его скоростное воспроизведение средствами FMX, - "больная" тема...
  19. Like
    AngryOwl отреагировална Andrey Efimov в Какие статьи вы хотели бы видеть в блогах?   
    [Статья][Android][AlarmManager] Простой пример использования в RAD Studio
    Берите за основу
     
     
    Добавлено в 17:15
     
    Так совпало, что Ярослав тоже написал статью на эту тему, держите ссылку [Статья][Android] Приложение будильник. Использование AlarmManager в FireMonkey на Андроиде
     
    p.s. Рекомендую к прочтению, обе статьи, т.к. они очень хорошо дополняют друг-друга .
  20. Like
    AngryOwl отреагировална GASCHE в Какие статьи вы хотели бы видеть в блогах?   
    OC: Android. Многопоточные приложения, синхронизация потоков, создание потоконезависимых компонентов.
  21. Like
    AngryOwl получил реакцию от Равиль Зарипов (ZuBy) в access violation TImage   
    Попробуйте сделать просто:
    improgressbar.Bitmap.Canvas.BeginScene; try   improgressbar.Bitmap.LoadFromFile(........................ finally   improgressbar.Bitmap.Canvas.EndScene; end;
  22. Like
    AngryOwl получил реакцию от Равиль Зарипов (ZuBy) в access violation TImage   
    С TLabel ситуация точно та же.
    Сначала BeginUpdate, потом EndUpdate.
    А если проблема не в этом - тогда все (вывод в GUI) загнать в
    TThread.Syncronize(TThread.CurrentThread, procedure begin ................. end); С мерцанием - не понял, что именно и когда мерцает?
  23. Like
    AngryOwl отреагировална Равиль Зарипов (ZuBy) в Странные глюки ProgressBar'ов в ListBox   
    Мы не злые, ответили на ваш вопрос. Нет смысла дублировать ответы, если на них уже даны исчерпывающие ответы. Переходим по ссылкам и читаем, там все написано
  24. Like
    AngryOwl отреагировална Brovin Yaroslav в Шрифт с обводкой   
    Есть в стилевых объектах специальный объект с тенью. Он называется: TStyleTextObject. Он не использует эффект тени, а делает это при помощи двойной отрисовки текста. По умолчанию он не доступен на панели инструментов, но его можно добавить установив библиотеку FGX.
  25. Like
    AngryOwl отреагировална Brovin Yaroslav в Можно ли прокрутить TScrollBox программно?   
    Без анимации можно любым из этих способов:
    // Установка координат окна просмотра (Левый верхний угол) ScrollBox.ViewportPosition := TPointF.Create(0,0); ScrollBox1.ScrollTo(0, 0); // Аналог ViewportPosition // Сдвиг на вектор ScrollBox.ScrollBy(-10, -10); С анимацией так:
    procedure TForm3.FormCreate(Sender: TObject); begin ScrollBox1.AniCalculations.Animation := True; ScrollBox1.AniCalculations.BoundsAnimation := True; ScrollBox1.AniCalculations.TouchTracking := [ttVertical, ttHorizontal]; end; // Сам сдвиг ScrollBox1.AniCalculations.MouseWheel(5, 10);
×
×
  • Создать...