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

AngryOwl

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

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

  • Посещение

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

    45

Сообщения, опубликованные AngryOwl

  1. Как раз не в отдельном, а наоборот - синхронизируем операцию с GUI с основным потоком.

    Ну и еще:

    просто надо бы тупо проверить - вывести изображение в тот же файл, локально, из Circle1.Fill.Bitmap.Bitmap.

    операциями типа Circle1.Fill.Bitmap.Bitmap.SaveToFile и еще попробовать сохранить поток тоже в локальный файл.

    ну и посмотреть содержимое. А то как-то все не понятно...

  2. Ну я бы не стал использовать лишние операции в данном случае.

    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);
  3. 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;
    
  4. [belov.V] Я согласен с Вашим подходом, что желательно добиваться "правильной" работы приложения при любых условиях. В т.ч. - даже если нам требуется просто закрыть приложение.

     

    З.Ы. SharedActivity.finish; - попробую по возможности проверить все варианты и по результатам отпишусь.

  5. [belov.V] Никакого "гадания" тут нет... Это далеко не первое обсуждение на данном форуме этой проблемы! Мало-мальски посложнее приложение и начнутся проблемы с его полным завершением.

     

    Вот здесь есть решение

    http://fire-monkey.ru/topic/1046-reshenie-segmentation-fault11-ili-axe-beats-in-the-balls/

  6. Отредактировать стиль. Например, добавив новый для "прозрачного" 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
    
  7. вот обещанная видео :) извините за качество просто все спят и свет не смог включить :)

     

    https://youtu.be/YhOy7sN2TOs

     

    в общем он работает я на него более сложную программу запускал и все ок 

    Спасибо!

    Сегодня попробую на устройствах с интелом. Очень заинтересовало!

    Если везде заработает - будет круто! (и очень интересно))

     

    Еще раз спасибо!

  8. добры ночи

    работает абсолютно все так же как на телефоне Samsung если хотите могу выложить видео 

    сам не мог поверить но он заработал на Android 4.4.2, а на Android 4.2 (заводском) мне писал: cannot supported device..... что то похоже если посмотрите у меня даже тема на этом форуме создано но как то сам запросил обновить систему обновил и все ок могу даже маленький фрагмент видео снять и показать

    Очень интересно!

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

    Видео - очень интересно! Особенно если вкупе с демонстрацией приложения показать и свойства аппарата (в настройках).

     

    Заранее благодарен! (даже если не получится с видео)

     

    З.Ы. Просто, в случае реальной работы на Intel, не задумываясь приобрету новый ведрофон с интелом.

  9.  

    Интересно, а проблему с поддержкой Intel под Android наконец-то решили или всё по-прежнему? :rolleyes:

    у меня процессор intel на планшете после обновлений Android до 4.4.2 все заработало

     

    вот про это говорю у меня заработало

     

    http://market.yandex.ru/product/10414128/spec?hid=6427100&track=char

     

    Доброй ночи!

    Хотелось бы подробностей! Что именно заработало? Приложения из samples. Как работает? И т.д.

    Потому как даже разработчики утверждают, что поддержки Intel под Android пока нет, то Ваше заявление очень интересно!

  10. Создайте TListBox с нужной высотой, и свойству ItemHeight задайте то же значение.

    StyleLookup = 'transparentlistboxstyle'

    ShowScrollBars = False

    Columns = кол-во кнопок

     

    Создайте нужное количество TListBoxItem, равное кол-ву кнопок.

    У каждого TListBoxItem свойство Selectable = False, Text = ''.

    Разместите ваши кнопки в TListBoxItem со свойством Align = Client (можете добавить Margins для кнопок...).

     

    При изменении размеров TListBox, будут пропорционально меняться размеры всех TListBoxItem, и, конечно, размеры всех кнопок, расположенных в них...

     

    Типа так. Это простой вариант, где не надо ничего "считать"... Надеюсь все ясно объяснил.

  11. Примерно так:

    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, соответственно установленному стилю. Можно его "ручками" поставить, а можно рассчитывать программно...

  12. Ваш основной вопрос, как мне кажется, немного неуместен по отношению к FMX )

    А на счет "получить позицию каретки" - у TEdit есть свойство CaretPosition, которое и возвращает требуемое Вам значение.

  13. Никак. В FMX не может быть как такового Handle у TPanel.

    Если Вам очень нужно, то, думаю, можно как-то очень исхитриться и сделать типа так:

    - создать в RealTime панель (TPanel) подключив VCL (uses Vcl.Controls, Vcl.ExtCtrls и ряд других...)

    - получить хэндл окна и поместить панель на это окно

    - ну и дальше работать с ней как с панелью из VCL.

    Но не уверен, что все получится... И не уверен, что если получится, то результат Вас устроит.

     

    Я так понимаю - Вы пытаетесь вывести видео в "окно панели" передав хэндл панели для вывода видео фильтру из DirectX или VFW, как это делалось под VCL.

    В данном случае - у Вас ничего не получится таким образом. А если получится, то будет все очень "криво". Поверьте)

    Вам нужно использовать либо свой механизм вывода, либо использовать тот же Mitov VideoLab или подобные библиотеки.

  14. Однако... Речь вообщем-то стояла именно о сервиспаке или апдейте. А тут целиком образы.

    Вот меня, например, тоже сильно напрягает такое отношение, что нужно скачать все целиком, и обычно все переустановить полностью. Слов нет - пол дня потеряешь... Это ведь не маленькая программулька. А если еще и кончатся попытки установок среды, то еще начнется - надо написать тикет, чтобы добавили установок к ключу.

  15. Не получится. Это "фича" такая)

    По крайней мере не получится - пока не исправят все баги с отрисовкой "невидимых" или совсем "прозрачных" компонентов.

    Если получится каким-либо образом, дайте знать - будет весьма занятно...)

     

    Для форм выполненных в своем стиле, создание "теней" лучше делать с помощью собственного стиля с использованием png изображения "тени".

    Насколько я помню - даже был такой пример (назывался типа HDform, или типа того...)

     

    Создайте собственный стиль, например:

    - FormMyStyle: TLayout

    -- imgbkgrnd: Image (сюда поместите png с тенью. Align - Contents)

    -- contlt : TLayout (сюда прямоугольники и т.п., для непосредственного вида формы)

     

    Для примера прикладываю png изображение тени, с параметрами: BitmapMargins 18,16,16,20; Margins 1,4,3,1

    post-115-0-64641000-1416745249.png

     

    в итоге будет что-то типа

    post-115-0-61437000-1416745273_thumb.jpg

     

    Потом делаете вашу форму прозрачной, кидаете на нее панель TPanel, с выравниванием Align = Clients или Contents, затем придаете панельке стиль FormMyStyle. Вот и будет форма с тенью.

     

    P.S. Думаю стоит отметить, что PNG изображение тени будет работать наааамного быстрее эффекта тени или подобного.

  16. Сдается мне что все очень просто... По крайней мере я данным решением пользовался не раз и оно прекрасно работает. А именно:

    - во-первых - есть уже на форуме подобное обсуждение, и если мне не изменяет память, то было и еще!

    - во-вторых: (если очень грубо....)

    ...........
    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 вашей кнопочки, а внутри обработчика то что написано выше.

    Типа как-то так для вашего случая)

  17. Немного конкретизируйте свой вопрос, так как TTimeEdit (равно как и TDateEdit) возвращает значение в свойстве DateTime в формате TDateTime, что, собственно можно сохранять и как TDateTime (каламбур)) и как Double (да можно еще тучей вариантов...)

     

    P.S. либо я Вас не правильно понял (потому и попросил уточнить, если Вам что-то иное требуется)

  18. Во-первых посмотрите "Как задать форме размер больше размера экрана?", вдруг найдете там что-то интересное.

    Во-вторых - не понятно какая именно у Вас форма: стандартная, при которой рамка окон "нативная", либо используемая из стиля. Имеет значение, так как если рамка окна используется из стиля, то нужно копнуть сам стиль.

     

    Ну или, если Вам нужно только под 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...

    мне понятны только в случае если Вы делаете приложение под все операционки...

×
×
  • Создать...