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

kami

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

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

  • Посещение

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

    41

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

  1. Ярослав, а в каких Delphi будет поддерживаться? Только XE8, или захватит и XE7 ?
  2. Логика несколько хромает. Код в OnClose - это хорошо. А кто будет делать этой форме Close? Показ новой формы не закрывает текущую.
  3. Так не делайте там Close. Показывайте форму3, а форму2.Release.
  4. Так удалите эту форму вообще. Судя по тому, что я накопал - у FMX свой механизм определения активной формы. Смотреть function TScreen.NextActiveForm
  5. Использование Indy в VCL и FMX ничем не отличается.
  6. Тогда уже панель, т.к. Layout сам по себе прозрачен чуть более чем полностью. Но вообще - да.
  7. Смотрите, что за StyleLookup у кнопки отмена, скорее всего именно он меняет размеры кнопки. А вообще - поместить все контролы на Layout, и ему сделать Align = TAlignLayout.Center.
  8. На всякий случай уточню: ShowModal(Callback) - это не всем привычный ShowModal, как его обычно понимают - внутри этого метода просто запоминается Callback и вызывается Show. А когда вы присвоите показанной форме какой-нибудь ModalResult, то будет вызыван Callback и форма закроется. Т.е. в действительности это Show/Close с доп. "фишками". Поэтому на такой вызов не распространяется ограничение из хелпа
  9. Пардон... я сужу со своей колокольни, у меня XE7 Upd1. Не обратил внимание сразу на версию...
  10. Ну почему... вместо Align есть DrawerOptions.Placement и SplitViewOptions.Placement. Крайне странно - у меня приложение 1:1 такого же построения, и никаких проблем с MultiView не было. Ну, за исключением, когда я забыл переназначить TargetControl и MasterButton. А пример из Documents\Embarcadero\Studio\xxx\Samples\Object Pascal\Mobile Samples\User Interface\MultiView\ не пробовали запускать?
  11. TeamViewer, для справки, использует очень хорошие алгоритмы сжатия и передачи изображения/звука. Для последнего, думаю, используется что-то вроде надстройки над RTP. ... Я могу только повторить - afaik, Tethering не предназначен для передачи realtime-данных. Ожидание подтверждения каждого отправленного пакета станет бутылочным горлышком вашего приложения.
  12. Что указано в качестве TargetControl?
  13. Хммм. если у вас что-то не получается, попробуйте что-нибудь исправить. FreeOS, вы предоставили максимально полное описание проблемы, с которой вам пришлось столкнуться.
  14. kami

    GCM

    JSONData в своих "внутренностях" все равно перекодирует из UTF8 куда надо, уберите это преобразование. Сохранить содержимое итогового JSON в текстовый файл пробовали? Что там будет отображаться? В дополнение: покажите, как отправляется получившийся JSON - возможно, там и зарыто решение.
  15. Теоретически - да, возможно. Практически - нецелесообразно для передачи realtime потока задействовать компоненты, использующие протокол с подтверждением - у вас будут огромные задержки в воспроизведении и в конце концов приложение свалится из-за нехватки памяти. А может и не свалится, но приятного все равно будет мало.
  16. Господа, спасибо за участие! zairkz, упростил и немного подправил ваш код, вот что получилось: procedure TSiteExchangerThread.RescalePhoto(const FileName: string); const DefaultHeight = 300; var Bitmap: TBitmap; Thumb: TBitmap; BSS: TBitmapCodecSaveParams; xScale: Double; newWidth, newHeight: integer; begin Bitmap := TBitmap.Create; try try Bitmap.LoadFromFile(FileName); if Bitmap.Height <> DefaultHeight then begin xScale := Bitmap.Height / DefaultHeight; newHeight := DefaultHeight; newWidth := Round(Bitmap.Width / xScale); Thumb := Bitmap.CreateThumbnail(newWidth, newHeight); // далее работаем с Thumb, а не с Bitmap try BSS.Quality := 90; Thumb.SaveToFile(FileName, @BSS); // все менеджеры и surface не нужны, они есть внутри Save-метода finally Thumb.Free; end; end; except DeleteFile(FileName); raise; end; finally Bitmap.Free; end; end; Кстати, весьма удивился, что результат получился нужный: TBitmap.Resize использует тот же самый CreateThumbnail. Единственное отличие - в Resize-методе используется Assign получившегося thumb-а в себя же. А вот в самом assign какие-то непонятные манипуляции со счетчиками ссылок FImage. Имхо, именно здесь и возникает проблема с белым прямоугольником, ибо все остальное - 1:1 уже используемое в методах TBitmap
  17. Доброго времени суток, уважаемые! Есть код: procedure TmyThread.RescalePhoto(const FileName: string); const DefaultHeight = 300; var Bitmap: TBitmap; xScale: Double; newWidth, newHeight: integer; begin Bitmap := TBitmap.Create; try try Bitmap.LoadFromFile(FileName); // установим высоту в 300 пикселей. if Bitmap.Height <> DefaultHeight then begin xScale := Bitmap.Height / DefaultHeight; newHeight := DefaultHeight; newWidth := Round(Bitmap.Width / xScale); Bitmap.Resize(newWidth, newHeight); Bitmap.SaveToFile(FileName); end; except DeleteFile(FileName); raise; end; finally Bitmap.Free; end; end; В Windows все отлично, а вот на симуляторе есть проблемы. Проблема №1: вместо некоторых отмасштабированных jpg-файлов - белый прямоугольник корректного размера. Проблема №2: размер итогового файла (если не наблюдается проблемы №1) значительно больше, чем при запуске в Windows, хотя размеры правильные. (к примеру 96кб vs 19кб) Где моя ошибка? Пример файла, масштабируемого в белый прямоугольник прилагаю. P.S. iOS 7.1 (iPad), Win8, Delphi XE7Upd1. PHOTO_original.zip
  18. не будет*. Планировщик потоков - штука очень умная. *При условии, что Ваш код не глючит сам по себе.
  19. Попробовал разобраться, что же происходит во внутренностях idHTTPServer. Ну, что могу сказать - индейцы со времен D2010 далеко продвинулись в плане запутывания кода Оберните приведенный код в Synchronize, в качестве первого параметра можно передать nil.
  20. То же событие есть и у FMX.Application, тут ничего не поменялось. For example: procedure TMyForm.OnCreate(...) Application.OnIdle:=myOnApplicationIdle;
  21. А я думал, что IDE Fix Pack - это must have для любой Delphi и ее ставят сразу после установки IDE Наравне c DDevExtensions.
  22. kami

    TetheringManager

    Потому что вам нужно асинхронное поведение. Его вы можете достаточно просто реализовать, используя другой поток. Мне нужно синхронное, какое есть сейчас. Если компонент изначально будет асинхронен, то переделать его на синхронный режим работы гораздо сложнее, не? Ну, а основная причина, я думаю, в том, что Tethering использует внутри себя Indy (если я ничего не путаю).
×
×
  • Создать...