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

AlexG

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

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

  • Посещение

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

    45

Ответы сообщества

  1. Пост AlexG - сообщение в Отпечатки пальцев был отмечен как ответ   
    Посмотрите в сторону "оберток". Например тут. Там есть файл android.hardware.fingerprint.pas (и не только). Вроде бы, есть все, что нужно. А уж как все это использовать - это другой вопрос, смотрите примеры.
  2. Пост AlexG - сообщение в Не происходит событие отжатия кнопки мыши был отмечен как ответ   
    Можно. Используйте события не OnClick или OnItemClick и т.д., а событие OnMouseUp у самого TListBox.
    Типа так:
    procedure TfmMain.lbxMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); var LI : TListBoxItem; p : TPointF; begin if Assigned(Sender as TListBox) then begin LI := TListBox(Sender).ItemByPoint(X, Y); if Assigned(LI as TListBoxItem) then begin LI.IsSelected := True; TTask.Run(procedure begin if Button = TMouseButton.mbLeft then Do_какая-то_процедура(LI.Index) // просто пример else if Button = TMouseButton.mbRight then TThread.Synchronize(nil, procedure begin p := MessageEvent.GetMousePos; PopupMenu1.Popup(p.X, p.Y); // для вызова контекстного меню выделенного ListBoxItem end); end); end; end; end; P.S. Отмечу, что использовал TTask и TThread.Synchronize далеко не случайно!
    Во-первых TTask.Run запустит ваш обработчик нажатия на выделенный элемент в отдельном потоке, что не будет "тормозить" "выделение" самого ListBoxItem и вообще), а во-вторых - "внутри" вызванного потока сделал синхронизацию с основным потоком, при выводе контекстного меню для ListBoxItem, так как это гарантирует корректную работу с GUI в FMX.
  3. Пост AlexG - сообщение в FMX + OSX + NSWindow был отмечен как ответ   
    "Ищите и обрящите" (с)))
    На форуме есть темы, связанные с этим вопросом. В том числе и я где-то тут описывал - как делать такие формы.
  4. Пост AlexG - сообщение в Прозрачный TListbox был отмечен как ответ   
    Примените стиль 'transparentlistboxstyle' для TListBox.
  5. Пост AlexG - сообщение в Всплывающее сообщение был отмечен как ответ   
    Это Toast. Смотрите тут.
  6. Пост AlexG - сообщение в Убрать стандартный PopupMenu у TEdit был отмечен как ответ   
    А в чем проблема?
    Создайте свое TPopupMenu и привяжите его к свойству PopupMenu у TEdit...
  7. Пост AlexG - сообщение в Загрузка PNG в Image из Deployment был отмечен как ответ   
    Попробуйте загрузку ваших картинок оформить в:
    TThread.Synchronize(TThread.CurrentThread, procedure begin // тут загрузка ваших картинок end);  
  8. Пост AlexG - сообщение в access violation TImage был отмечен как ответ   
    С TLabel ситуация точно та же.
    Сначала BeginUpdate, потом EndUpdate.
    А если проблема не в этом - тогда все (вывод в GUI) загнать в
    TThread.Syncronize(TThread.CurrentThread, procedure begin ................. end); С мерцанием - не понял, что именно и когда мерцает?
  9. Пост AlexG - сообщение в Как свернуть форму, находящуюся в режиме FullScreen? был отмечен как ответ   
    unit uHelpers; interface uses   FMX.Forms; type   TForm_Helper = class helper for TForm      procedure Minimize;      procedure SendToTaskbar;   end; implementation uses System.UITypes{$IFDEF MSWINDOWS}, Winapi.Windows, FMX.Platform.Win{$ENDIF}; { TForm_Helper } procedure TForm_Helper.Minimize; begin   Application.MainForm:= nil;   WindowState := TWindowState.wsMinimized; end; procedure TForm_Helper.SendToTaskbar; begin {$IFDEF MSWINDOWS}   SetWindowLong(WindowHandleToPlatform(Handle).Wnd, GWL_EXSTYLE,     GetWindowLong(WindowHandleToPlatform(Handle).Wnd, GWL_EXSTYLE) or WS_EX_APPWINDOW); {$ENDIF} end; end. у Вашей формы пишем
    type   TForm1 = class(TForm)   ........   protected     procedure CreateHandle; override;   private     ........   public   ......   end; implementation uses   uHelpers; {$R *.fmx} {это позволит сворачивать ваше окно на панель задач, независимо от количества окон в приложении} procedure TForm1.CreateHandle; begin   inherited CreateHandle;   SendToTaskbar; end; а Minimize свернет все как надо, независимо от того - какое у него "состояние".
  10. Пост AlexG - сообщение в Отрисовка скрытых контролов был отмечен как ответ   
    Я бы советовал Вам посмотреть ответ Ярослава.
    procedure PreloadContent(const Control: TControl); Не уверен, но думаю он Вам поможет.
  11. Пост AlexG - сообщение в Скрытие приложения с панели задач. был отмечен как ответ   
    Попробуйте
    uses   {$IFDEF MSWINDOWS}, Winapi.Windows, FMX.Platform.Win{$ENDIF}; {$IFDEF MSWINDOWS} ShowWindow(ApplicationHWND, SW_HIDE); {$ENDIF}
  12. Пост AlexG - сообщение в Прозрачность в стилях был отмечен как ответ   
    Ссылку, которую я Вам дал, решает именно этот вопрос и именно реализацией стилей. Создается стиль. Форма делается прозрачной, размещается на нее панель и задается ей соответственно стиль. И все - нужная форма готова.
  13. Пост AlexG - сообщение в Как программно отмасштабировать TImage был отмечен как ответ   
    Если попроще, то я бы сделал так:
    - один TListBox (с выравниванием либо Bottom, либо Client)
    - с нужным количеством TListBixItem, соответственно кол-ву "фигур"
    - у TListBox Columns = кол-ву TListBixItem, либо ListStyle = Horizontal
    - ну и соответственно все настройки по высоте и т.п.
    - TListBox.StyleLookup = 'transparentlistboxstyle'
    - поместил бы в каждый TListBixItem по картинке (TImage) с выравниванием Bottom
    и менял бы высоту этих картинок.......
     
    З.Ы. Если Вам не нужно что-то более "красивое"
     
    З.З.Ы. А можно сделать свой дополнительный стиль для TListBixItem, взяв за основу стандартный стиль и изменив в нем объект 'icon'. Тогда не нужен будет TImage для каждого TListBixItem, и можно будет управлять им через StylesData['icon.....']...
  14. Пост AlexG - сообщение в Как нарисовать круглый TImage был отмечен как ответ   
    var   BmpNew     : TBitmap; begin     BmpNew := TBitmap.Create;     BmpNew.SetSize({нужный размер}, {нужный размер});     BmpNew.Canvas.BeginScene;     try       BmpNew.Canvas.Fill.Kind := TBrushKind.Bitmap;       BmpNew.Canvas.Fill.Bitmap.WrapMode := TWrapMode.TileStretch;       BmpNew.Canvas.Fill.Bitmap.Bitmap := {ваш битмап};       BmpNew.Canvas.Clear(0);       BmpNew.Canvas.FillEllipse(RectF(0, 0, {нужный размер}, {нужный размер}), 1);     finally       BmpNew.Canvas.EndScene;     end;     TImage{ваш объект}.Bitmap.Assign(BmpNew); end; думаю так
  15. Пост AlexG - сообщение в Недостающий вариант Image WrapMode был отмечен как ответ   
    Особо править нет времени, разберетесь. Все просто - это компонент, унаследованный от стандартного TImage, с теми свойствами, которые Вам нужны.
    unit Sphere.ImageEx; interface uses   System.Classes, System.Types, FMX.Types, FMX.Objects, FMX.Graphics;   type     TBitmapFit = (bfDefault, bfWidth, bfHeight, bfBoth);     TImageEx = class(TImage)     private       FBitmapDisplayRect: TRectF;       procedure SetBitmapFit(const Value: TBitmapFit);     protected       FBitmapFit: TBitmapFit;       procedure Paint; override;     public       constructor Create(AOwner: TComponent); override;       function ImagePointToBitmap(const APoint: TPointF): TPointF;       property BitmapDisplayRect: TRectF read FBitmapDisplayRect;     published       property BitmapFit: TBitmapFit read FBitmapFit write SetBitmapFit;     end; implementation { TImageEx } constructor TImageEx.Create(AOwner: TComponent); begin   inherited;   FBitmapFit := bfDefault;   FBitmapDisplayRect := TRectF.Empty; end; function TImageEx.ImagePointToBitmap(const APoint: TPointF): TPointF; begin   Result := APoint;   if not (BitmapDisplayRect.IsEmpty) and Assigned(Bitmap) then   begin     Result.X := Result.X - Trunc(BitmapDisplayRect.Left);     if Bitmap.Width > BitmapDisplayRect.Width then       Result.X := Result.X / (BitmapDisplayRect.Width / Bitmap.Width );     Result.Y := Result.Y - Trunc(BitmapDisplayRect.Top);     if Bitmap.Height > BitmapDisplayRect.Height then       Result.Y := Result.Y / (BitmapDisplayRect.Height / Bitmap.Height );   end; end; procedure TImageEx.Paint; begin {весь код - в прикрепленном файлике}   // всегда центрируем для этих методов отрисовки   else if FBitmapFit <> bfDefault then   begin     // растягиваем по ширине с обрезкой верхнего/нижнего краев     Canvas.BeginScene();     try       Coef := B.Width / B.Height;       R := RectF(0, 0, B.Width, B.Height);       if FBitmapFit = bfWidth then         R := RectF(0, 0, Width, Width / Coef)         else         if FBitmapFit = bfHeight then           R := RectF(0, 0, Height * Coef, Height)           else           if FBitmapFit = bfBoth then           begin             if Coef >= 1 then               R := RectF(0, 0, Height * Coef, Height)               else               R := RectF(0, 0, Width, Width / Coef);           end;       RectCenter(R, LocalRect);       Canvas.DrawBitmap(B, RectF(0, 0, B.Width, B.Height), R, AbsoluteOpacity, DisableInterpolation);       FBitmapDisplayRect := R;     finally       Canvas.EndScene();     end;   end; end; procedure TImageEx.SetBitmapFit(const Value: TBitmapFit); begin   if FBitmapFit <> Value then   begin     FBitmapFit := Value;     Paint();   end; end; //initialization //  RegisterFMXClasses([TImageEx]); end. Sphere.ImageEx.zip
  16. Пост AlexG - сообщение в [TCameraComponent] [XE7] Как поменять разрешение получаемой картинки через CameraComponent? был отмечен как ответ   
    Замените у себя модуль FMX.Media.Android.pas (файлик прилагаю)
    смотрите в нем новые свойства и процедуры
        property VideoWidth: Integer read FVideoWidth write FVideoWidth;     property VideoHeight: Integer read FVideoHeight write FVideoHeight;     property VideoBitCount: Integer read FVideoBitCount write FVideoBitCount;     property VideoFPS: Integer read FVideoFPS write FVideoFPS; // auto constructor TAndroidVideoCaptureDevice.Create(const AManager: TCaptureDeviceManager; const ADefault: Boolean); procedure TAndroidVideoCaptureDevice.SetQuality(const Value: TVideoCaptureQuality); procedure TAndroidVideoCaptureDevice.DoStartCapture; допустим на форме fmMain есть компонент камеры ccMain_Camera, тогда
    предварительно выключим камеру если она включена
    fmMain.ccMain_Camera.Active := False; затем меняем "качество"
    fmMain.ccMain_Camera.Quality := TVideoCaptureQuality.MediumQuality; {включит 640*480} затем включаем камеру
    fmMain.ccMain_Camera.Active := True; типа так можно.
    FMX.Media.Android.zip
     
    З.Ы. и в OnSampleBufferReady надо обрабатывать уже полученное изображение, а не пытаться переключать камеру.
     
    P.P.S. это под XE7
  17. Пост AlexG - сообщение в Для чего нужен Keystore файл? был отмечен как ответ   
    Это "подпись" приложения.
    Думаю Вам нужно посмотреть Android Mobile Application Development и Creating a Keystore File
  18. Пост AlexG - сообщение в [TTabControl] Поддерживает ли компонент отображение вкладок слева или справа? был отмечен как ответ   
    Нет. Вам придется создавать либо свой новый, унаследованный от TTabControl, либо поступить проще - использовать два компонента. Один - TTabControl, но вкладки сделать невидимыми, а второй - любой другой, типа TListBox или TPanel с кнопками (и т.д. и т.п.), где второй - будет переключать вкладки...
  19. Пост AlexG - сообщение в Диалог-окна в 4.4.x стиле (Android) был отмечен как ответ   
    Если я Вас правильно понял, то:
    - нужно создать файлик style.xml
    - содержимое файла должно быть типа
    <resources> <style name="MyTheme.NoTitleBar.CustomBackground" parent="@android:Theme.Holo">   <item name="android:windowBackground">@drawable/splash_centered</item>   <item name="android:windowNoTitle">true</item>   <item name="android:windowFullscreen">false</item> </style> </resources> где в Вашем случае главное - @android:Theme.Holo
    - далее этот файл (style.xml) надо задеплоить

     
    Вот. Думаю это то что Вам нужно было.
    Остальные параметры - на Ваше усмотрение.
  20. Пост AlexG - сообщение в Как задать windowborderstyle был отмечен как ответ   
    Ответы есть, конечно.
    Но Вам нужно их задавать отдельно. Внимательно читать, и, главное, с уважением относиться ко всем участникам. У большинства из нас просто нет времени, и стараемся отвечать кратко, только когда есть свободная минутка и знаем ответ.
     
    По поводу TWebBrowser - дождитесь ответа. Я, к сожалению, не могу ничего сказать, не пробовал.
     
    Что касается перемещения формы за любой элемент:
    - во-первых элемент, за который будете перемещать, должен иметь свойство HitTest = True
    - во вторых, в обработчике события этого элемента OnMouseDown ставьте StartWindowDrag
    - и в-третьих, чтобы менять размер формы, при этом не имея рамок и имея вид как был описан выше - разместите на форме элемент TSizeGrip
     
    все
  21. Пост AlexG - сообщение в Как сделать выравнивание нескольких кнопок TSpeedButton, расположенных в TEdit? был отмечен как ответ   
    Создайте TListBox с нужной высотой, и свойству ItemHeight задайте то же значение.
    StyleLookup = 'transparentlistboxstyle'
    ShowScrollBars = False
    Columns = кол-во кнопок
     
    Создайте нужное количество TListBoxItem, равное кол-ву кнопок.
    У каждого TListBoxItem свойство Selectable = False, Text = ''.
    Разместите ваши кнопки в TListBoxItem со свойством Align = Client (можете добавить Margins для кнопок...).
     
    При изменении размеров TListBox, будут пропорционально меняться размеры всех TListBoxItem, и, конечно, размеры всех кнопок, расположенных в них...
     
    Типа так. Это простой вариант, где не надо ничего "считать"... Надеюсь все ясно объяснил.
  22. Пост AlexG - сообщение в [Windows] Можно ли получить Handle компонента в FMX? был отмечен как ответ   
    Никак. В FMX не может быть как такового Handle у TPanel.
    Если Вам очень нужно, то, думаю, можно как-то очень исхитриться и сделать типа так:
    - создать в RealTime панель (TPanel) подключив VCL (uses Vcl.Controls, Vcl.ExtCtrls и ряд других...)
    - получить хэндл окна и поместить панель на это окно
    - ну и дальше работать с ней как с панелью из VCL.
    Но не уверен, что все получится... И не уверен, что если получится, то результат Вас устроит.
     
    Я так понимаю - Вы пытаетесь вывести видео в "окно панели" передав хэндл панели для вывода видео фильтру из DirectX или VFW, как это делалось под VCL.
    В данном случае - у Вас ничего не получится таким образом. А если получится, то будет все очень "криво". Поверьте)
    Вам нужно использовать либо свой механизм вывода, либо использовать тот же Mitov VideoLab или подобные библиотеки.
  23. Пост AlexG - сообщение в Эффект - невидимка был отмечен как ответ   
    Не получится. Это "фича" такая)
    По крайней мере не получится - пока не исправят все баги с отрисовкой "невидимых" или совсем "прозрачных" компонентов.
    Если получится каким-либо образом, дайте знать - будет весьма занятно...)
     
    Для форм выполненных в своем стиле, создание "теней" лучше делать с помощью собственного стиля с использованием 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 изображение тени будет работать наааамного быстрее эффекта тени или подобного.
  24. Пост AlexG - сообщение в Сохранение значений был отмечен как ответ   
    Ну без записи в файл/БД сложно себе представить - куда можно сохранить значение, кроме как следующие варианты:
    если речь идет о Windows - сохраняйте в реестр. если речь о Android - SharedPreferences.
  25. Пост AlexG - сообщение в Как воспроизвести avi файл? был отмечен как ответ   
    Добрый день!
    Во-первых - стоит посмотреть примеры (папка ..Embarcadero\Studio\15.0\Samples\Object Pascal\FireMonkey Desktop\MediaPlayerHD).
    Во-вторых - указывайте поточнее: среда (XE6? XE7?), и, конечно, формат файла. AVI, в наше время, весьма абстрактное понятие. Опишите контейнер видео (формат видео). Переименнованное в *.avi это может быть и mp4, и mkv  и что угодно. Нужно понимать более точно - что это за файл?
    Если у Вас вообще все видео-файлы не открываются... Ну, вполне возможно, что у Вас просто кодеков нет.
    И еще проще - взглянуть на сам проект, если он не приватный. Либо попробуйте запустить пример MediaPlayerHD и посмотреть - он открывает файлы или нет.
×
×
  • Создать...