-
Постов
394 -
Зарегистрирован
-
Посещение
-
Победитель дней
45
Ответы сообщества
-
Пост AngryOwl - сообщение в Отпечатки пальцев был отмечен как ответ
Посмотрите в сторону "оберток". Например тут. Там есть файл android.hardware.fingerprint.pas (и не только). Вроде бы, есть все, что нужно. А уж как все это использовать - это другой вопрос, смотрите примеры.
-
Пост AngryOwl - сообщение в Не происходит событие отжатия кнопки мыши был отмечен как ответ
Можно. Используйте события не 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.
-
Пост AngryOwl - сообщение в FMX + OSX + NSWindow был отмечен как ответ
"Ищите и обрящите" (с)))
На форуме есть темы, связанные с этим вопросом. В том числе и я где-то тут описывал - как делать такие формы.
-
Пост AngryOwl - сообщение в Прозрачный TListbox был отмечен как ответ
Примените стиль 'transparentlistboxstyle' для TListBox.
-
Пост AngryOwl - сообщение в Убрать стандартный PopupMenu у TEdit был отмечен как ответ
А в чем проблема?
Создайте свое TPopupMenu и привяжите его к свойству PopupMenu у TEdit...
-
Пост AngryOwl - сообщение в Загрузка PNG в Image из Deployment был отмечен как ответ
Попробуйте загрузку ваших картинок оформить в:
TThread.Synchronize(TThread.CurrentThread, procedure begin // тут загрузка ваших картинок end);
-
Пост AngryOwl - сообщение в access violation TImage был отмечен как ответ
С TLabel ситуация точно та же.
Сначала BeginUpdate, потом EndUpdate.
А если проблема не в этом - тогда все (вывод в GUI) загнать в
TThread.Syncronize(TThread.CurrentThread, procedure begin ................. end); С мерцанием - не понял, что именно и когда мерцает?
-
Пост AngryOwl - сообщение в Как свернуть форму, находящуюся в режиме 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 свернет все как надо, независимо от того - какое у него "состояние".
-
Пост AngryOwl - сообщение в Отрисовка скрытых контролов был отмечен как ответ
Я бы советовал Вам посмотреть ответ Ярослава.
procedure PreloadContent(const Control: TControl); Не уверен, но думаю он Вам поможет.
-
Пост AngryOwl - сообщение в Скрытие приложения с панели задач. был отмечен как ответ
Попробуйте
uses {$IFDEF MSWINDOWS}, Winapi.Windows, FMX.Platform.Win{$ENDIF}; {$IFDEF MSWINDOWS} ShowWindow(ApplicationHWND, SW_HIDE); {$ENDIF} -
Пост AngryOwl - сообщение в Прозрачность в стилях был отмечен как ответ
Ссылку, которую я Вам дал, решает именно этот вопрос и именно реализацией стилей. Создается стиль. Форма делается прозрачной, размещается на нее панель и задается ей соответственно стиль. И все - нужная форма готова.
-
Пост AngryOwl - сообщение в Как программно отмасштабировать TImage был отмечен как ответ
Если попроще, то я бы сделал так:
- один TListBox (с выравниванием либо Bottom, либо Client)
- с нужным количеством TListBixItem, соответственно кол-ву "фигур"
- у TListBox Columns = кол-ву TListBixItem, либо ListStyle = Horizontal
- ну и соответственно все настройки по высоте и т.п.
- TListBox.StyleLookup = 'transparentlistboxstyle'
- поместил бы в каждый TListBixItem по картинке (TImage) с выравниванием Bottom
и менял бы высоту этих картинок.......
З.Ы. Если Вам не нужно что-то более "красивое"
З.З.Ы. А можно сделать свой дополнительный стиль для TListBixItem, взяв за основу стандартный стиль и изменив в нем объект 'icon'. Тогда не нужен будет TImage для каждого TListBixItem, и можно будет управлять им через StylesData['icon.....']...
-
Пост AngryOwl - сообщение в Как нарисовать круглый 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; думаю так
-
Пост AngryOwl - сообщение в Недостающий вариант 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
-
Пост AngryOwl - сообщение в [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
-
Пост AngryOwl - сообщение в Для чего нужен Keystore файл? был отмечен как ответ
Это "подпись" приложения.
Думаю Вам нужно посмотреть Android Mobile Application Development и Creating a Keystore File
-
Пост AngryOwl - сообщение в [TTabControl] Поддерживает ли компонент отображение вкладок слева или справа? был отмечен как ответ
Нет. Вам придется создавать либо свой новый, унаследованный от TTabControl, либо поступить проще - использовать два компонента. Один - TTabControl, но вкладки сделать невидимыми, а второй - любой другой, типа TListBox или TPanel с кнопками (и т.д. и т.п.), где второй - будет переключать вкладки...
-
Пост AngryOwl - сообщение в Диалог-окна в 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) надо задеплоить
Вот. Думаю это то что Вам нужно было.
Остальные параметры - на Ваше усмотрение.
-
Пост AngryOwl - сообщение в Как задать windowborderstyle был отмечен как ответ
Ответы есть, конечно.
Но Вам нужно их задавать отдельно. Внимательно читать, и, главное, с уважением относиться ко всем участникам. У большинства из нас просто нет времени, и стараемся отвечать кратко, только когда есть свободная минутка и знаем ответ.
По поводу TWebBrowser - дождитесь ответа. Я, к сожалению, не могу ничего сказать, не пробовал.
Что касается перемещения формы за любой элемент:
- во-первых элемент, за который будете перемещать, должен иметь свойство HitTest = True
- во вторых, в обработчике события этого элемента OnMouseDown ставьте StartWindowDrag
- и в-третьих, чтобы менять размер формы, при этом не имея рамок и имея вид как был описан выше - разместите на форме элемент TSizeGrip
все
-
Пост AngryOwl - сообщение в Как сделать выравнивание нескольких кнопок TSpeedButton, расположенных в TEdit? был отмечен как ответ
Создайте TListBox с нужной высотой, и свойству ItemHeight задайте то же значение.
StyleLookup = 'transparentlistboxstyle'
ShowScrollBars = False
Columns = кол-во кнопок
Создайте нужное количество TListBoxItem, равное кол-ву кнопок.
У каждого TListBoxItem свойство Selectable = False, Text = ''.
Разместите ваши кнопки в TListBoxItem со свойством Align = Client (можете добавить Margins для кнопок...).
При изменении размеров TListBox, будут пропорционально меняться размеры всех TListBoxItem, и, конечно, размеры всех кнопок, расположенных в них...
Типа так. Это простой вариант, где не надо ничего "считать"... Надеюсь все ясно объяснил.
-
Пост AngryOwl - сообщение в [Windows] Можно ли получить Handle компонента в FMX? был отмечен как ответ
Никак. В FMX не может быть как такового Handle у TPanel.
Если Вам очень нужно, то, думаю, можно как-то очень исхитриться и сделать типа так:
- создать в RealTime панель (TPanel) подключив VCL (uses Vcl.Controls, Vcl.ExtCtrls и ряд других...)
- получить хэндл окна и поместить панель на это окно
- ну и дальше работать с ней как с панелью из VCL.
Но не уверен, что все получится... И не уверен, что если получится, то результат Вас устроит.
Я так понимаю - Вы пытаетесь вывести видео в "окно панели" передав хэндл панели для вывода видео фильтру из DirectX или VFW, как это делалось под VCL.
В данном случае - у Вас ничего не получится таким образом. А если получится, то будет все очень "криво". Поверьте)
Вам нужно использовать либо свой механизм вывода, либо использовать тот же Mitov VideoLab или подобные библиотеки.
-
Пост AngryOwl - сообщение в Эффект - невидимка был отмечен как ответ
Не получится. Это "фича" такая)
По крайней мере не получится - пока не исправят все баги с отрисовкой "невидимых" или совсем "прозрачных" компонентов.
Если получится каким-либо образом, дайте знать - будет весьма занятно...)
Для форм выполненных в своем стиле, создание "теней" лучше делать с помощью собственного стиля с использованием 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 изображение тени будет работать наааамного быстрее эффекта тени или подобного.
-
Пост AngryOwl - сообщение в Сохранение значений был отмечен как ответ
Ну без записи в файл/БД сложно себе представить - куда можно сохранить значение, кроме как следующие варианты:
если речь идет о Windows - сохраняйте в реестр. если речь о Android - SharedPreferences. -
Пост AngryOwl - сообщение в Как воспроизвести avi файл? был отмечен как ответ
Добрый день!
Во-первых - стоит посмотреть примеры (папка ..Embarcadero\Studio\15.0\Samples\Object Pascal\FireMonkey Desktop\MediaPlayerHD).
Во-вторых - указывайте поточнее: среда (XE6? XE7?), и, конечно, формат файла. AVI, в наше время, весьма абстрактное понятие. Опишите контейнер видео (формат видео). Переименнованное в *.avi это может быть и mp4, и mkv и что угодно. Нужно понимать более точно - что это за файл?
Если у Вас вообще все видео-файлы не открываются... Ну, вполне возможно, что у Вас просто кодеков нет.
И еще проще - взглянуть на сам проект, если он не приватный. Либо попробуйте запустить пример MediaPlayerHD и посмотреть - он открывает файлы или нет.