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

gonzales

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

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

  • Посещение

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

    27

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

  1. Очередной update. Обновился iphone до версии 13.5, соответственно XCode говорит что нет у него DeviceSupport файлов, соответственно Делфа не может запустить проект на телефоне, нет отладки и все такое. При попытке скачать новый XCode АппСтор говорит, хрен тебе, обнови-ка сначала MacOS до версии 10.15. Но при попытке обновить МакОсь вылезает ошибка, что мол на твою железку 10.15 поставить нельзя. И все, никаких вариантов решения не предлагается. Очередной танец с бубном привел к следующему решению такой проблемы 1. Скачиваем свежий XCode по прямой ссылке https://developer.apple.com/download/more/ 2. Разархивируем скаченный архив 3. XCode конечно не открывается, кликаем правой кнопкой, выбираем пункт "показать содержимое пакета" 4. Идем по пути Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport, видим там папки со всеми версиями платформ. 5. Копируем нужные версии в тот же каталог рабочей версии XCode. 6. Запускаем XCode, подключаем телефон, убеждаемся, что XCode больше не ругается. 7. Скаченный XCode можно удалить На данный момент опробовано для Delphi 10.3.3, XCode 10.1. Скачивал XCode версии 11.5.
  2. gonzales

    потоки в ios

    Переделал вот так procedure TForm5.Button16Click(Sender: TObject); begin TTask.Run( procedure begin //действия end); end; и заработало. Странно, я всегда думал, что TTask и TThread - это одно и то же.
  3. gonzales

    потоки в ios

    Доброго всем времени суток. При переходе на 10.3.3. на iOS стало крошится приложение при использовании потока, причем не всегда, иногда отрабатывает, иногда даже несколько раз, но однозначно падает с третьего, четвертого раза. Конструкция вот такая procedure TForm5.Button16Click(Sender: TObject); var thread1: TThread; begin thread1 := TThread.CreateAnonymousThread( procedure begin //действия end); thread1.freeonterminate := true; thread1.start; end; сами действия в потоке работают нормально, проверял. если убрать поток и оставить только действия, то все работает нормально, но заворачиваю в поток и все. Причем это не только конкретно в одном месте, а везде, где используется поток. Если кто знает, подскажите, что не так. Заранее спасибо
  4. Работает только в одном случае, если стиль TSwitchObject положить в Layout. Но пропадает свойство IsChecked, компонент становится неработоспособен.
  5. Нашел. FMX.Styles.Switch Но такой вариант работает только на Винде, на Андроид не пашет. Style:=FMX.Types.FindStyleResource('switchstyledark'); TSwitchObject(Style).Fill.Color:=TAlphaColorRec.Yellow; Switch1.StyleLookup := 'switchstyledark';
  6. Может Вы знаете, какой юнит надо прицепить, где содержится TSwitchObject
  7. Только он не знает, что такое TSwitchObject, этот фокус я тоже пробывал
  8. А там гора файлов, FMX.Controls.***.pas. Если я буду для андроида такой фокус делать, нужно ли тянуть с собой FMX.Controls.Android.pas?
  9. поставил Breakpoint на процедуру TStyledControl.StyleDataChanged. Так он вообще в нее не заходит((
  10. Спасибо, но не сработало. ReleSwitch.StylesData['self.Fill.Color'] возвращает 0 procedure TStyledControl.StyleDataChanged(const Index: string; const Value: TValue); var Obj: TObject; InstanceName, PropertyName: string; PropertyValue: TValue; begin PropertyName := Index; InstanceName := GetToken(PropertyName, '.'); if SameText(InstanceName,'self') then Obj:=FResourceLink else Obj := FindStyleResource(InstanceName); if Obj <> nil then begin if not PropertyName.IsEmpty then begin PropertyValue := Value; FindProperty(Obj, PropertyName, procedure (Instance: TObject; Prop: TRttiProperty) begin Prop.SetValue(Instance, PropertyValue); end); end else TFmxObject(Obj).Data := Value; end end;
  11. Я положил стиль в TLayout, но теперь сам Switch перестал работать, не фурычит IsChecked, соответственно на мышку тоже не отрабатывает))
  12. gonzales

    Свойства стиля у TSwitch

    Доброго времени суток! Подскажите, как добраться до свойств стиля компонента TSwitch. Конкретно задача в рантайме изменять цвета у переключателя. В стиле есть свойства Fill, FillOn типа TBrush, соответственно у них есть свойство Color К сожалению не могу достучаться до них ни через StylesData, ни через FindStyleResource. Судя по всему я что-то не так делаю ReleSwitch := TSwitch.Create(form1); ReleSwitch.Parent := form1; ReleSwitch.StyleLookup := 'switchstyledark'; ReleSwitch.StylesData['Fill.Color'] := TAlphaColorRec.Yellow; //не отрабатывает c:=ReleSwitch.StylesData['Fill.Color'].AsExtended; //возвращает 0 StyleObject := ReleSwitch.FindStyleResource('switchstyledark') //возвращает null Да, скорее всего важная ремарка, что я пытаюсь изменить элемент стиля прямо в конструкторе. Вот тут Ярослав Бровин указывает, что необходимо явно загрузить стиль, или использовать переопределение OnApplyStyleLookup. Делал и так и так, не помогает Если кто знает, в какую сторону копать, пните плиз
  13. Вставлю свои пять копеек, потому что также решал схожую с ТС задачу. Оказывается можно "штатными средствами" запускать потоки поочередно, точнее, дождаться в последующем потоке выполнения предыдущего. Вот пример unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo; type TForm1 = class(TForm) Timer1: TTimer; CornerButton1: TCornerButton; ProgressBar1: TProgressBar; Memo1: TMemo; procedure Timer1Timer(Sender: TObject); procedure CornerButton1Click(Sender: TObject); procedure Procedure1(i: integer); procedure Procedure2(i: integer); procedure Procedure3; procedure ThreadProcedure(t: TThread); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.Procedure1(i: integer); begin Form1.Memo1.lines.add('Thread2 - ' + inttostr(i)); end; procedure TForm1.Procedure2(i: integer); begin Form1.Memo1.lines.add('Thread3 - ' + inttostr(i)); end; procedure TForm1.Procedure3; begin Form1.Memo1.lines.add('Thread1 - OK'); end; procedure TForm1.ThreadProcedure; var i: integer; begin for i := 0 to 5 do begin TThread.synchronize(t, procedure begin Form1.Procedure1(i); end); sleep(500); end; end; procedure TForm1.CornerButton1Click(Sender: TObject); var thread1: TThread; thread2: TThread; thread3: TThread; begin Timer1.Enabled := true; thread1 := TThread.CreateAnonymousThread( procedure begin thread2 := TThread.CreateAnonymousThread( procedure begin ThreadProcedure(thread2); end); thread2.freeonterminate := false; thread2.start; thread3 := TThread.CreateAnonymousThread( procedure var i: integer; begin thread2.WaitFor; //ожидаем завершения потока 2 thread2.Free; for i := 0 to 5 do begin TThread.synchronize(thread3, procedure begin Form1.Procedure2(i); end); sleep(500); end; end); thread3.freeonterminate := false; thread3.start; thread3.WaitFor; //ожидаем завершения потока 3 thread3.Free; TThread.synchronize(thread1, procedure begin Form1.Procedure3; Timer1.Enabled := false; end); end); thread1.freeonterminate := true; thread1.start; end; procedure TForm1.Timer1Timer(Sender: TObject); begin ProgressBar1.Value := ProgressBar1.Value + 1; end; end. Проверил на Windows и Андроид, работает штатно
  14. Нащупал решение, можно использовать FormStyle:=Popup, тогда прозрачность применяется, но не могу заставить форму развернуться на весь экран. Можно еще вот так procedure TForm1.CornerButton1Click(Sender: TObject); var pform:TCustomPopupForm; r:trectangle; rect:TRectF; color:TAlphacolor; begin rect.Left:=0; rect.Top:=0; rect.Width:=form1.ClientWidth; rect.Height:=form1.ClientHeight; pform:=TCustomPopupForm.Create(form1); pform.BorderStyle:=TFMXFormBorderStyle.None; pform.BorderIcons:=[]; pform.PlacementRectangle.Rect:=rect; pform.Placement:=TPlacement.Absolute; r:=TRectangle.Create(pform); color:=$32000000; r.Fill.Color:=color; r.Stroke.Color:=TAlphacolorRec.White; r.Stroke.Thickness:=1; r.Parent:=pform; r.Align:=TAlignlayout.Client; r.Visible:=true; pform.Visible:=true; end; Но получается тогда надо всю форму создавать в рантайме, что не очень то хочется.
  15. да. достаточно две формы и кнопку, одну сделать прозрачной, из первой вызвать ту, которая прозрачная
  16. На 10.3.3. имеется проблема с прозрачностью, диалоговое окно воспроизводится на черном фоне. Как исправить пока не нашел(((
  17. При переезде приложения с 10.1 на 10.3 заметил, что перестало на Андроид отрабатывать свойство формы transparency. Не получается вывести прозрачную форму. Уже все перепробывал и через стили задавал прозрачность и через fill, результат один. Кто-нибудь сталкивался с подобным? На винде все работает как надо, проблема только на Андроид
  18. gonzales

    multicast udp

    Да, вчера в ночи тоже это вычитал))) Осталось понять как это сделать на Инди
  19. gonzales

    multicast udp

    Доброго времени суток!! Подскажите знатоки, уже мозг себе сломал. Имеется устройство Xiaomi Mi Gateway - что-то наподобие шлюза умного дома от Xiaomi. Эта приблуда шлет в локалку мультикаст репорты по адресу 224.0.0.50 на порт 9898. В Wirenshark я все это прекрасно вижу. Но не могу настроить UDPServer на прием этих пакетов. Вопросов по существу несколько, если у меня вот такой мультикаст, как настроить UDPServer на прием, нужно ли создавать какой-то binding или нужно настроить default port? Я пробовал и то и другое, но так ничего и не увидел. Если у кого-то есть какие-то мысли, буду рад услышать!
  20. Доброго всем времени суток. Не нашел куда написать, поэтому решил сюда. Если модераторы посчитают этот раздел неуместным, прошу не пинать)) Есть стандартный компонент TArcDial, это такой лимб, вращая который можно получать градусы вращения. Задача ограничить вращение определенными углами, это должен быть регулятор громкости, соответственно он должен вращаться от минимума к максимуму. Если кто знает как это сделать или в какую сторону копать, буду признателен за любую информацию. ЗЫ. Конечно можно все сделать руками, из двух TCircle и кучи кода (MouseDown, MouseMove, MouseUp), но мне кажется, что должно быть какое-то простое решение))
  21. Для этого достаточно TGridLayout, мне то как раз нужно использовать сортировку "в процессе"))
  22. Вот моя переписка. Прислали вот такое письмо с вопросами Hello Alexey, Thanks for contacting Google Play Developer Support. Apologies for the delayed response. I understand you would like an extension to become 64-bit compliant. In order to submit your request, can you please provide the following: Reason for not being able to be compliant in time (if there’s a dependency on third party tools, please specify it) Reason for your request and your plan for migration Specific plan on how you will become compliant, with an estimation date for building 64-bit support that you can commit (For example: The app will be compliant 2 weeks after Embarcadero is compliant.) I look forward to your reply and assisting you further. Regards, Liz Google Play Developer Support я ответил так Hello Liz! Thank you for your letter. In answer to your questions, i provide that as soon as Embarcadero will make a 64x-compiler for Android, i will use it and make a compatible application. I hope, that it won't take long, i dont use any third party tools, only Embarcadero RAD Studio. I'm disappointed, that Embarcadero do not release a new version in time, like they still don't announce it. Also to this I want to ask, if i need to update my application in Google Play Market, i need to reques this extension every time, or only onсe? My application is made for users of our smart home system, and I'm very worried, that our new customers can't download it from Play Market, so I hope for a positive decision of my request!
  23. Очень интересует данная тема, конкретно нужно раскодировать h264 поток с ip-камер, разумеется для мобильных платформ (Android iOS). По взаимодействию с камерами по RTSP все написано и уже готово, готов RTP-клиент получающий на вход поток от камеры. Задача этот поток визуализировать. Как я понял, оптимальным было бы использование бибилиотек FFMPEG, в интернете есть уже скомпилированные .so библиотеки. http://megadarja.blogspot.com/2010/09/ffmpeg-android.html https://habr.com/ru/post/254737/ http://writingminds.github.io/ffmpeg-android-java/ Если я правильно понимаю, то подключение библиотек динамически не вызывает затруднений DocDir := IncludeTrailingPathDelimiter(System.IOUtils.TPath.GetLibraryPath); //* BASS BASSLibraryHandle := LoadLibrary(PChar(DocDir + 'libbass.so')); if BASSLibraryHandle = 0 then begin ShowMessage( 'libbass.so load FAIL'); end; if BASSLibraryHandle <> 0 then begin @BASS_Init := GetProcAddress(BASSLibraryHandle, ('BASS_Init')); @BASS_StreamCreateFile := GetProcAddress(BASSLibraryHandle, ('BASS_StreamCreateFile')); @BASS_ChannelPlay := GetProcAddress(BASSLibraryHandle, ('BASS_ChannelPlay')); @BASS_FXGetParameters := GetProcAddress(BASSLibraryHandle, ('BASS_FXGetParameters')); Result := True; end; а вот, что делать дальше, пока не понятно. Нужны описания библиотек с функциями и хоть какие-то наработки, как это добро использовать. Если есть кто-то, кому эта тема тоже была бы интересна, готов поработать совместно!!! Или может кто-то уже имел дело с FFMPEG, пните в нужную сторону, где чего почитать. Всем заранее спасибо
  24. Доброго времени всем! Не могу понять, как динамически создать компоненты в этой панели. Задача следующая, создать сетку (несколько колонок и рядов) и в эту сетку уложить компоненты соблюдая индекс сортировки. Разумеется, если компонентов много, должен работать скролл. Я делаю так, положил GridPanelLayout на VertScrollBox. Перед созданием сетки очищаю RowCollection RoomsScrollBox.RowCollection.Clear; Добавляю новый ряд with form1.RoomsScrollBox.RowCollection.Add do begin SizeStyle:= TGridPanelLayout.TSizeStyle.Absolute; Value:=form1.SkinSettings.Height + 10; end; А вот дальше затык, как положить компонент в рантайме в определенную ячейку? inherited Create(form1.RoomsScrollBox); Parent := form1.RoomsScrollBox; Такой вариант не подходит, так как нужно использовать сортировку. У GridPanelLayout есть свойство ControlCollection, у которого есть координаты на сетке, Column, Row и ссылка а объект Control, только я не пойму, как их использовать. Буду рад любой помощи!
×
×
  • Создать...