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

AngryOwl

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

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

  • Посещение

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

    45

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

  1. Как раз не в отдельном, а наоборот - синхронизируем операцию с GUI с основным потоком. Ну и еще: просто надо бы тупо проверить - вывести изображение в тот же файл, локально, из Circle1.Fill.Bitmap.Bitmap. операциями типа Circle1.Fill.Bitmap.Bitmap.SaveToFile и еще попробовать сохранить поток тоже в локальный файл. ну и посмотреть содержимое. А то как-то все не понятно...
  2. Нет )) Мало того, думаю, - далеко не все перешли на XE8...
  3. Ну я бы не стал использовать лишние операции в данном случае. MS := TMemoryStream.Create; try Circle1.Fill.Bitmap.Bitmap.SaveToStream(MS); finally MS.Free; end; а на серверной стороне Form2.Image1.Picture.Bitmap.LoadFromStream(ms); что-то грузит? и еще Circle1.Fill.Bitmap.Bitmap.SaveToStream(MS); в этот момент ничего с интерфейсом происходить не может случаем? может стот сделать что-то типа Circle1.BeginUpdate и Circle1.EndUpdate ? или заключить все в TThread.Synchronize(TThread.CurrentThread, procedure begin MS := TMemoryStream.Create; try Circle1.Fill.Bitmap.Bitmap.SaveToStream(MS); finally MS.Free; end; end);
  4. Не за что в uses, соответственно, надо FMX.Graphics и FMX.Surfaces
  5. 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; ну и вызывать типа так: var tmpBitmap : FMX.Graphics.TBitmap; SaveParams : FMX.Graphics.TBitmapCodecSaveParams; Stream : TMemoryStream; // ..... tmpBitmap := TBitmap.Create; // .............. Stream := TMemoryStream.Create; try SaveParams.Quality := 85; SaveBitmapToStream(Stream, tmpBitmap, '.jpg', @SaveParams); Stream.Position := 0; // .................... // .................... finally FreeAndNil(Stream); end;
  6. [belov.V] Я согласен с Вашим подходом, что желательно добиваться "правильной" работы приложения при любых условиях. В т.ч. - даже если нам требуется просто закрыть приложение. З.Ы. SharedActivity.finish; - попробую по возможности проверить все варианты и по результатам отпишусь.
  7. [belov.V] Никакого "гадания" тут нет... Это далеко не первое обсуждение на данном форуме этой проблемы! Мало-мальски посложнее приложение и начнутся проблемы с его полным завершением. Вот здесь есть решение http://fire-monkey.ru/topic/1046-reshenie-segmentation-fault11-ili-axe-beats-in-the-balls/
  8. Библиотека Indy, модуль IdHashSHA, класс TIdHashSHA1. Надеюсь это что Вам нужно.
  9. Отредактировать стиль. Например, добавив новый для "прозрачного" TMemo. Что-то типа такого: object TLayout StyleName = 'memofreestyle' EnableDragHighlight = False Position.X = 280.000000000000000000 Position.Y = 249.000000000000000000 Size.Width = 290.000000000000000000 Size.Height = 175.000000000000000000 Size.PlatformDefault = False Visible = False TabOrder = 97 object TActiveStyleObject StyleName = 'background' Align = Contents EnableDragHighlight = False Size.Width = 290.000000000000000000 Size.Height = 175.000000000000000000 Size.PlatformDefault = False ActiveTrigger = Focused ActiveLink = < item CapInsets.Left = 7.000000000000000000 CapInsets.Top = 7.000000000000000000 CapInsets.Right = 7.000000000000000000 CapInsets.Bottom = 7.000000000000000000 SourceRect.Left = 238.000000000000000000 SourceRect.Top = 86.000000000000000000 SourceRect.Right = 318.000000000000000000 SourceRect.Bottom = 113.000000000000000000 end> SourceLink = <> object TRectangle StyleName = 'Rectangle1' Align = Contents EnableDragHighlight = False Fill.Color = x32000000 HitTest = False Sides = [] Size.Width = 290.000000000000000000 Size.Height = 175.000000000000000000 Size.PlatformDefault = False Stroke.Color = xC8282828 Visible = False end object TLayout StyleName = 'content' Align = Client EnableDragHighlight = False Size.Width = 290.000000000000000000 Size.Height = 175.000000000000000000 Size.PlatformDefault = False end end object TBrushObject StyleName = 'foreground' end object TBrushObject StyleName = 'selection' Brush.Color = x7F67A8D3 end object TFontObject StyleName = 'font' end end
  10. AngryOwl

    XE 8

    Спасибо! Сегодня попробую на устройствах с интелом. Очень заинтересовало! Если везде заработает - будет круто! (и очень интересно)) Еще раз спасибо!
  11. AngryOwl

    XE 8

    Очень интересно! Реально - был бы весьма признателен, если бы Вы смогли это как-то продемонстрировать (допустим на примере стандартных приложений-примеров. оптимально - на чем-то более "сложном" в смысле использования большого кол-ва функционала устройств. наприме - ...\Samples\Object Pascal\Mobile Snippets\CameraComponent) Видео - очень интересно! Особенно если вкупе с демонстрацией приложения показать и свойства аппарата (в настройках). Заранее благодарен! (даже если не получится с видео) З.Ы. Просто, в случае реальной работы на Intel, не задумываясь приобрету новый ведрофон с интелом.
  12. AngryOwl

    XE 8

    у меня процессор intel на планшете после обновлений Android до 4.4.2 все заработало вот про это говорю у меня заработало http://market.yandex.ru/product/10414128/spec?hid=6427100&track=char Доброй ночи! Хотелось бы подробностей! Что именно заработало? Приложения из samples. Как работает? И т.д. Потому как даже разработчики утверждают, что поддержки Intel под Android пока нет, то Ваше заявление очень интересно!
  13. Создайте TListBox с нужной высотой, и свойству ItemHeight задайте то же значение. StyleLookup = 'transparentlistboxstyle' ShowScrollBars = False Columns = кол-во кнопок Создайте нужное количество TListBoxItem, равное кол-ву кнопок. У каждого TListBoxItem свойство Selectable = False, Text = ''. Разместите ваши кнопки в TListBoxItem со свойством Align = Client (можете добавить Margins для кнопок...). При изменении размеров TListBox, будут пропорционально меняться размеры всех TListBoxItem, и, конечно, размеры всех кнопок, расположенных в них... Типа так. Это простой вариант, где не надо ничего "считать"... Надеюсь все ясно объяснил.
  14. Примерно так: function GetTextWidth(AText: string; AFont: TFont): Single; var txt: TText; begin txt := TText.Create(nil); try txt.Align := TAlignLayout.alNone; txt.VertTextAlign := TTextAlign.Leading; txt.HorzTextAlign := TTextAlign.Leading; txt.Trimming := TTextTrimming.None; txt.Font := AFont; txt.WordWrap := False; txt.BeginUpdate; txt.Text := AText; txt.EndUpdate; txt.AutoSize := True; Result := txt.Width; finally FreeAndNil(txt); end; end; Написал не проверяя, но вроде все верно. Используйте у TEdit событие OnTyping или OnKeyDown, ну или типа того.. И меняйте соответственно значению функции. P.S. Забыл добавить, что к значению функции Вам надо добавить некую X по ширине, так как сам TEdit имеет внутренний Padding.Left/Right, соответственно установленному стилю. Можно его "ручками" поставить, а можно рассчитывать программно...
  15. Ваш основной вопрос, как мне кажется, немного неуместен по отношению к FMX ) А на счет "получить позицию каретки" - у TEdit есть свойство CaretPosition, которое и возвращает требуемое Вам значение.
  16. WindowHandleToPlatform(Self.Handle) - получите хэндл текущего окна приложения
  17. Никак. В FMX не может быть как такового Handle у TPanel. Если Вам очень нужно, то, думаю, можно как-то очень исхитриться и сделать типа так: - создать в RealTime панель (TPanel) подключив VCL (uses Vcl.Controls, Vcl.ExtCtrls и ряд других...) - получить хэндл окна и поместить панель на это окно - ну и дальше работать с ней как с панелью из VCL. Но не уверен, что все получится... И не уверен, что если получится, то результат Вас устроит. Я так понимаю - Вы пытаетесь вывести видео в "окно панели" передав хэндл панели для вывода видео фильтру из DirectX или VFW, как это делалось под VCL. В данном случае - у Вас ничего не получится таким образом. А если получится, то будет все очень "криво". Поверьте) Вам нужно использовать либо свой механизм вывода, либо использовать тот же Mitov VideoLab или подобные библиотеки.
  18. AngryOwl

    Update for XE7

    Однако... Речь вообщем-то стояла именно о сервиспаке или апдейте. А тут целиком образы. Вот меня, например, тоже сильно напрягает такое отношение, что нужно скачать все целиком, и обычно все переустановить полностью. Слов нет - пол дня потеряешь... Это ведь не маленькая программулька. А если еще и кончатся попытки установок среды, то еще начнется - надо написать тикет, чтобы добавили установок к ключу.
  19. Не получится. Это "фича" такая) По крайней мере не получится - пока не исправят все баги с отрисовкой "невидимых" или совсем "прозрачных" компонентов. Если получится каким-либо образом, дайте знать - будет весьма занятно...) Для форм выполненных в своем стиле, создание "теней" лучше делать с помощью собственного стиля с использованием png изображения "тени". Насколько я помню - даже был такой пример (назывался типа HDform, или типа того...) Создайте собственный стиль, например: - FormMyStyle: TLayout -- imgbkgrnd: Image (сюда поместите png с тенью. Align - Contents) -- contlt : TLayout (сюда прямоугольники и т.п., для непосредственного вида формы) Для примера прикладываю png изображение тени, с параметрами: BitmapMargins 18,16,16,20; Margins 1,4,3,1 в итоге будет что-то типа Потом делаете вашу форму прозрачной, кидаете на нее панель TPanel, с выравниванием Align = Clients или Contents, затем придаете панельке стиль FormMyStyle. Вот и будет форма с тенью. P.S. Думаю стоит отметить, что PNG изображение тени будет работать наааамного быстрее эффекта тени или подобного.
  20. Сдается мне что все очень просто... По крайней мере я данным решением пользовался не раз и оно прекрасно работает. А именно: - во-первых - есть уже на форуме подобное обсуждение, и если мне не изменяет память, то было и еще! - во-вторых: (если очень грубо....) ........... var p : TPointF; function GetMousePos: TPointF; var Platform: IInterface; begin Result.Create(0, 0); Platform := TPlatformServices.Current.GetPlatformService(IFMXMouseService); if Platform <> nil then Result := (Platform as IFMXMouseService).GetMousePos; end; begin p := GetMousePos; ваша_форма.Left := round(p.X); // тут уж вы сами решайте - как вам ее "сдвинуть" ваша_форма.Top := round(p.Y) + ваша_форма.Height; // ну аналогично сдвинуть по вертикали..... ваша_форма.Show; end; только это все грубо. сами решайте что и куда сдвигать и что еще учитывать. Т.е. надо обрабатывать событие OnClick вашей кнопочки, а внутри обработчика то что написано выше. Типа как-то так для вашего случая)
  21. Ну без записи в файл/БД сложно себе представить - куда можно сохранить значение, кроме как следующие варианты: если речь идет о Windows - сохраняйте в реестр. если речь о Android - SharedPreferences.
  22. Немного конкретизируйте свой вопрос, так как TTimeEdit (равно как и TDateEdit) возвращает значение в свойстве DateTime в формате TDateTime, что, собственно можно сохранять и как TDateTime (каламбур)) и как Double (да можно еще тучей вариантов...) P.S. либо я Вас не правильно понял (потому и попросил уточнить, если Вам что-то иное требуется)
  23. Если речь идет об Android, то смотрим здесь. (Android.JNI.PowerManager функции AcquireWakeLock и ReleaseWakeLock соответственно)
  24. Во-первых посмотрите "Как задать форме размер больше размера экрана?", вдруг найдете там что-то интересное. Во-вторых - не понятно какая именно у Вас форма: стандартная, при которой рамка окон "нативная", либо используемая из стиля. Имеет значение, так как если рамка окна используется из стиля, то нужно копнуть сам стиль. Ну или, если Вам нужно только под Windows, то можно так: получите размер экрана и вычтите из него размер таскбара... )) А затем задайте форме соответсвующие положение и размеры. {$IFDEF MSWINDOWS} function GetTaskBarBounds : TRect; function GetTaskBarSize : TPoint; function GetTaskBarAlignment : TAlignLayout; {$ENDIF} {$IFDEF MSWINDOWS} function GetTaskBarBounds : TRect; begin WinAPI.Windows.GetWindowRect(WinAPI.Windows.FindWindow(W95_EXPLORERCLASSNAME, ''), Result); end; function GetTaskBarSize : TPoint; var TaskBarBounds : TRect; begin TaskBarBounds := GetTaskBarBounds; with TaskBarBounds do Result := Point(Right - abs(Left), Bottom - abs(Top)); end; function GetTaskBarAlignment : TAlignLayout; var TaskBarBounds : TRect; begin Result := TAlignLayout.alNone; if WinAPI.Windows.FindWindow(W95_EXPLORERCLASSNAME, '') > 0 then begin TaskBarBounds := GetTaskBarBounds; with TaskBarBounds do // At Left or at top of screen ? if (Left <= 0) and (Top <= 0) then begin if Bottom >= 480 then Result := TAlignLayout.alLeft else Result := TAlignLayout.alTop; end else begin if Left <= 0 then Result := TAlignLayout.alBottom else Result := TAlignLayout.alRight; end; end; end; {$ENDIF} Потому-что все "свисто...лки" с кодом типа TPlatformServices.Current.SupportsPlatformService(IFMXScreenService... мне понятны только в случае если Вы делаете приложение под все операционки...
  25. Не гарантирую, но попробуйте так ForceDirectories(TPath.Combine(TPath.GetHomePath, 'myDir')); и никаких "слеш". P.S. Кроме того, хотелось бы знать - устройство в этот момент подключено через USB к компу?
×
×
  • Создать...