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

Равиль Зарипов (ZuBy)

Модераторы
  • Постов

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

  • Посещение

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

    264

Активность репутации

  1. Like
    Равиль Зарипов (ZuBy) отреагировална enatechno в Серьезно о FireMonkey на Android и iOS   
    Поддерживаю Zuby.
    Чем проще, тем стабильнее. Три параметра - номер стола и время, проверка занятости.
    P.S. устанавливал себе виджет "аналоговые часы", казалось бы.... Из 5-10 (со скачиванием 1кк) не один не показывал правильное время после "просыпания" Андроида. Остановился на виджете одного японца, скачиваний меньше 100к.  Кунг-фу решает. 
  2. Like
    Равиль Зарипов (ZuBy) получил реакцию от mrseagull в Серьезно о FireMonkey на Android и iOS   
    если выбрать правильные инструменты, то возможно.
    FMX + сервак + PHP (или любой серверный язык) всю работу с БД и с картами (такие как запросы геокодинга и прочие ssl запросы на другие сайты) на PHP, а клиент-приложение только в виде отображения контента.
    и можно делать не только одноформенные приложения, а сложные
  3. Like
    Равиль Зарипов (ZuBy) получил реакцию от enatechno в Серьезно о FireMonkey на Android и iOS   
    если выбрать правильные инструменты, то возможно.
    FMX + сервак + PHP (или любой серверный язык) всю работу с БД и с картами (такие как запросы геокодинга и прочие ssl запросы на другие сайты) на PHP, а клиент-приложение только в виде отображения контента.
    и можно делать не только одноформенные приложения, а сложные
  4. Like
    Равиль Зарипов (ZuBy) получил реакцию от zairkz в Странные глюки ProgressBar'ов в ListBox   
    Мы не злые, ответили на ваш вопрос. Нет смысла дублировать ответы, если на них уже даны исчерпывающие ответы. Переходим по ссылкам и читаем, там все написано
  5. Like
    Равиль Зарипов (ZuBy) отреагировална Andrey Efimov в Какие статьи вы хотели бы видеть в блогах?   
    [Статья][Android][AlarmManager] Простой пример использования в RAD Studio
    Берите за основу
     
     
    Добавлено в 17:15
     
    Так совпало, что Ярослав тоже написал статью на эту тему, держите ссылку [Статья][Android] Приложение будильник. Использование AlarmManager в FireMonkey на Андроиде
     
    p.s. Рекомендую к прочтению, обе статьи, т.к. они очень хорошо дополняют друг-друга .
  6. Like
    Равиль Зарипов (ZuBy) отреагировална Axbor в Ошибка при подключении к MySQL Windows   
    Проблема решилась обновлением libmysql.dll
    libmysql.zip
  7. Like
    Равиль Зарипов (ZuBy) отреагировална AngryOwl в access violation TImage   
    Попробуйте сделать просто:
    improgressbar.Bitmap.Canvas.BeginScene; try   improgressbar.Bitmap.LoadFromFile(........................ finally   improgressbar.Bitmap.Canvas.EndScene; end;
  8. Like
    Равиль Зарипов (ZuBy) отреагировална AngryOwl в access violation TImage   
    С TLabel ситуация точно та же.
    Сначала BeginUpdate, потом EndUpdate.
    А если проблема не в этом - тогда все (вывод в GUI) загнать в
    TThread.Syncronize(TThread.CurrentThread, procedure begin ................. end); С мерцанием - не понял, что именно и когда мерцает?
  9. Like
    Равиль Зарипов (ZuBy) получил реакцию от AngryOwl в Странные глюки ProgressBar'ов в ListBox   
    Мы не злые, ответили на ваш вопрос. Нет смысла дублировать ответы, если на них уже даны исчерпывающие ответы. Переходим по ссылкам и читаем, там все написано
  10. Like
    Равиль Зарипов (ZuBy) получил реакцию от d7d1cd в Простая защита программы   
    OFFTOP: то что хранится в программе можно вытащить, заменить в реестре на это значение
     
    обход защиты не обсуждаем, не превращайте тему в свалку
  11. Like
    Равиль Зарипов (ZuBy) получил реакцию от zairkz в Простая защита программы   
    procedure GetWMIInfo(mem: TMemo); // uses Winapi.ActiveX, System.Win.ComObj; const wbemFlagForwardOnly = $00000020; var FSWbemLocator: OLEVariant; FWMIService: OLEVariant; FWbemObjectSet: OLEVariant; FWbemObject: OLEVariant; oEnum: IEnumvariant; iValue: LongWord; begin FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator'); FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', ''); FWbemObjectSet := FWMIService.ExecQuery('Select * from Win32_MotherboardDevice', 'WQL', wbemFlagForwardOnly); oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumvariant; while oEnum.Next(1, FWbemObject, iValue) = 0 do begin if not VarIsNull(FWbemObject.DeviceID) then mem.Lines.Add(VarToStr(FWbemObject.DeviceID)); if not VarIsNull(FWbemObject.PrimaryBusType) then mem.Lines.Add(VarToStr(FWbemObject.PrimaryBusType)); if not VarIsNull(FWbemObject.SecondaryBusType) then mem.Lines.Add(VarToStr(FWbemObject.SecondaryBusType)); FWbemObject := Unassigned; end; end; что вы там собрались брать?
     
    Результат:
     
    я могу вам предложить вот такой вариант
    замените этими строками код выше, вы получите все устройства доступные на ПК
    FWbemObjectSet := FWMIService.ExecQuery('Select * from CIM_LogicalDevice', 'WQL', wbemFlagForwardOnly); .........   if not(VarIsNull(FWbemObject.Name) and VarIsNull(FWbemObject.DeviceID)) then     mem.Lines.Add(VarToStr(FWbemObject.Name) + ' - ' + VarToStr(FWbemObject.DeviceID)); или использовать защиту по MAC адресу
    FWbemObjectSet := FWMIService.ExecQuery ('SELECT Description,MACAddress,IPAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE', 'WQL', wbemFlagForwardOnly); .............. if not(VarIsNull(FWbemObject.MacAddress) and VarIsNull(FWbemObject.IpAddress)) then mem.Lines.Add(VarToStr(FWbemObject.MacAddress) + ' - ' + VarToStr(FWbemObject.IpAddress[0]));
  12. Like
    Равиль Зарипов (ZuBy) отреагировална Brovin Yaroslav в Шрифт с обводкой   
    Есть в стилевых объектах специальный объект с тенью. Он называется: TStyleTextObject. Он не использует эффект тени, а делает это при помощи двойной отрисовки текста. По умолчанию он не доступен на панели инструментов, но его можно добавить установив библиотеку FGX.
  13. Like
    Равиль Зарипов (ZuBy) получил реакцию от enatechno в Простая защита программы   
    procedure GetWMIInfo(mem: TMemo); // uses Winapi.ActiveX, System.Win.ComObj; const wbemFlagForwardOnly = $00000020; var FSWbemLocator: OLEVariant; FWMIService: OLEVariant; FWbemObjectSet: OLEVariant; FWbemObject: OLEVariant; oEnum: IEnumvariant; iValue: LongWord; begin FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator'); FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', ''); FWbemObjectSet := FWMIService.ExecQuery('Select * from Win32_MotherboardDevice', 'WQL', wbemFlagForwardOnly); oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumvariant; while oEnum.Next(1, FWbemObject, iValue) = 0 do begin if not VarIsNull(FWbemObject.DeviceID) then mem.Lines.Add(VarToStr(FWbemObject.DeviceID)); if not VarIsNull(FWbemObject.PrimaryBusType) then mem.Lines.Add(VarToStr(FWbemObject.PrimaryBusType)); if not VarIsNull(FWbemObject.SecondaryBusType) then mem.Lines.Add(VarToStr(FWbemObject.SecondaryBusType)); FWbemObject := Unassigned; end; end; что вы там собрались брать?
     
    Результат:
     
    я могу вам предложить вот такой вариант
    замените этими строками код выше, вы получите все устройства доступные на ПК
    FWbemObjectSet := FWMIService.ExecQuery('Select * from CIM_LogicalDevice', 'WQL', wbemFlagForwardOnly); .........   if not(VarIsNull(FWbemObject.Name) and VarIsNull(FWbemObject.DeviceID)) then     mem.Lines.Add(VarToStr(FWbemObject.Name) + ' - ' + VarToStr(FWbemObject.DeviceID)); или использовать защиту по MAC адресу
    FWbemObjectSet := FWMIService.ExecQuery ('SELECT Description,MACAddress,IPAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE', 'WQL', wbemFlagForwardOnly); .............. if not(VarIsNull(FWbemObject.MacAddress) and VarIsNull(FWbemObject.IpAddress)) then mem.Lines.Add(VarToStr(FWbemObject.MacAddress) + ' - ' + VarToStr(FWbemObject.IpAddress[0]));
  14. Like
    Равиль Зарипов (ZuBy) получил реакцию от Kitty в [TAniIndicator] Почему замораживается TAniIndicator при выполнении запроса к базе данных?   
    ShowLoad; TTask.Run(   procedure   begin     case Btn.Id of       BACK_TO_MENU_TYPES: Self.ShowMenuTypes;       BACK_TO_MENU: Self.LoadMenu(Global.CURRENT_MENU);       BACK_TO_PREV_FOLDER: Self.OpenMenuFolder(Btn.OpenFolder);       OPEN_MENU: Self.LoadMenu(Btn.OpenFolder);       OPEN_FOLDER: Self.OpenMenuFolder(Btn.OpenFolder);       OPEN_TRADE_POSITION: Self.OpenTradePosition(Btn);     end;     TThread.Synchronize(nil, procedure     begin // тут разбираем даные пришедшие с БД         HideLoad;       end); end); я правда не понимаю что происходит в этих процедурах, но там должно быть только получение данных. т.е. выполниться сам запрос в БД.
    а отрисовка/работа с визуальными компонентами должна произойти в этом блоке
    TThread.Synchronize(nil, procedure begin // тут разбираем даные пришедшие с БД HideLoad; end);
  15. Like
    Равиль Зарипов (ZuBy) получил реакцию от Kitty в Простая защита программы   
    procedure GetWMIInfo(mem: TMemo); // uses Winapi.ActiveX, System.Win.ComObj; const wbemFlagForwardOnly = $00000020; var FSWbemLocator: OLEVariant; FWMIService: OLEVariant; FWbemObjectSet: OLEVariant; FWbemObject: OLEVariant; oEnum: IEnumvariant; iValue: LongWord; begin FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator'); FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', ''); FWbemObjectSet := FWMIService.ExecQuery('Select * from Win32_MotherboardDevice', 'WQL', wbemFlagForwardOnly); oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumvariant; while oEnum.Next(1, FWbemObject, iValue) = 0 do begin if not VarIsNull(FWbemObject.DeviceID) then mem.Lines.Add(VarToStr(FWbemObject.DeviceID)); if not VarIsNull(FWbemObject.PrimaryBusType) then mem.Lines.Add(VarToStr(FWbemObject.PrimaryBusType)); if not VarIsNull(FWbemObject.SecondaryBusType) then mem.Lines.Add(VarToStr(FWbemObject.SecondaryBusType)); FWbemObject := Unassigned; end; end; что вы там собрались брать?
     
    Результат:
     
    я могу вам предложить вот такой вариант
    замените этими строками код выше, вы получите все устройства доступные на ПК
    FWbemObjectSet := FWMIService.ExecQuery('Select * from CIM_LogicalDevice', 'WQL', wbemFlagForwardOnly); .........   if not(VarIsNull(FWbemObject.Name) and VarIsNull(FWbemObject.DeviceID)) then     mem.Lines.Add(VarToStr(FWbemObject.Name) + ' - ' + VarToStr(FWbemObject.DeviceID)); или использовать защиту по MAC адресу
    FWbemObjectSet := FWMIService.ExecQuery ('SELECT Description,MACAddress,IPAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE', 'WQL', wbemFlagForwardOnly); .............. if not(VarIsNull(FWbemObject.MacAddress) and VarIsNull(FWbemObject.IpAddress)) then mem.Lines.Add(VarToStr(FWbemObject.MacAddress) + ' - ' + VarToStr(FWbemObject.IpAddress[0]));
  16. Like
    Равиль Зарипов (ZuBy) отреагировална zairkz в Ошибка сертификата Apple   
    А у меня вчера, действительно эпопея), поэтому и создал тему что бы кто нибудь не разбил свой монитор, не качал бы образ Мака гигов под 40), не убил свои клетки нервные))
  17. Like
    Равиль Зарипов (ZuBy) отреагировална enatechno в Странные глюки ProgressBar'ов в ListBox   
    тут еще:
    http://blogs.embarcadero.com/yaroslavbrovin/2012/10/11/listboxitem_styling/
    http://blogs.embarcadero.com/yaroslavbrovin/2012/10/15/listboxitem_styling_part2/
     
    тут о новом подходе (видео)
     
     
  18. Like
    Равиль Зарипов (ZuBy) отреагировална Brovin Yaroslav в Фоновое выполнение операции без "замораживания" отрисовки   
    Вся отрисовка выполняется в главном потоке приложения. Поэтому, если вы пытаетесь выполнить скачивание файла в основном потоке, то вся отрисовка приостановится до момента окончания вашей операции. Поэтому правило хорошего тона - это вынесение долгих операций (загрузка, ответ авторизации и тд) в отдельный поток. 
     
    Примерный код приведен ниже:
    1. Создаем отдельный поток, в котором вы будите скачивать файл (я поставил для эмуляции скачивания просто паузу на 5 секунд):
    type TMyTask = class (TThread) protected FOnTaskStarted: TThreadMethod; FOnTaskFinished: TThreadMethod; procedure DoStarted; procedure DoFinished; procedure Execute; override; public property OnTaskStarted: TThreadMethod read FOnTaskStarted write FOnTaskStarted; property OnTaskFinished: TThreadMethod read FOnTaskFinished write FOnTaskFinished; end; Реализация:
    { TMyTask } procedure TMyTask.DoFinished; begin if Assigned(OnTaskFinished) then OnTaskFinished; end; procedure TMyTask.DoStarted; begin if Assigned(OnTaskStarted) then OnTaskStarted; end; procedure TMyTask.Execute; begin Synchronize(DoStarted); try Sleep(5000); // Эмуляция выполнения 5 Секундной задачи finally Synchronize(DoFinished); end; end; Само использование такого потока будет следующим (в моем примере после выполнения операции, появится сообщение):
    TForm3 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private FMyTask: TMyTask; public procedure DoTaskStarted; // Callback, вызываемый в начале старта операции procedure DoTaskFinished; // Callback, вызываемый в конце выполнения операции. Аналог OnTerminate procedure StartMyTask; // Запуск задачи end; procedure TForm3.Button1Click(Sender: TObject); begin StartMyTask; end; procedure TForm3.DoTaskStarted; begin end; procedure TForm3.DoTaskFinished; begin ShowMessage('Выполнение задачи окончено'); end; procedure TForm3.StartMyTask; begin if FMyTask <> nil then begin FMyTasl.OnTaskStarted := nil; FMyTasl.OnTaskFinished := nil; FMyTask.Free; end; FMyTask := TMyTask.Create(True); FMyTask.OnTaskStarted := DoTaskStarted; FMyTask.OnTaskFinished := DoTaskFinished; FMyTask.Start; end; При таком подходе главный поток не будет блокироваться и будет корректно отрисовываться и работать.
  19. Like
    Равиль Зарипов (ZuBy) получил реакцию от Brovin Yaroslav в Странные глюки ProgressBar'ов в ListBox   
    меняет конечно, это совсем разные компоненты. ничего общего у них
    http://fire-monkey.ru/forum/146-stilizatciia/
    http://fire-monkey.ru/topic/2280-sobstvennyi-tlistboxitem-na-c/
    http://fire-monkey.ru/topic/1456-tlistbox-kak-otobrazit-itemy-v-vide-panelei/
  20. Like
    Равиль Зарипов (ZuBy) получил реакцию от Владимир в Потоки и процедуры   
    использовать такую конструкцию
    //uses System.Threading; TTask.Run(      procedure      begin         // выполняем загрузку файла из интернета;         TThread.Synchronize(nil, procedure            begin               // выполняем действия связанные с визуальными компонентами            end); end); но помнить что из доп. потока нельзя запустить доп. поток
  21. Like
    Равиль Зарипов (ZuBy) отреагировална zairkz в Ошибка сертификата Apple   
    Добрый день, это просто стрессовая ночь без сна, как меня з..бал APPLE ((
    Если кто то собирается выпускать сертификаты Apple (сертификаты разработчика или Push сертификаты), и начнет парится потому что сертификаты выпускаются просроченными, знайте что вы не виноваты)
     
    Вообщем в маке в "Связке ключей" в меню "Вид" кликнете на "Показать скрытые сертификаты"
    Далее в Связке "Система" найдите просроченный сертификат Apple и удалите его.
    После чего с кабинета разработчика скачайте и установите новый сертификат, ссылка на скачивания есть при создания нового сертификата в самом низу. ((
    Подробнее на 
    http://stackoverflow.com/questions/35390072/this-certificate-has-an-invalid-issuer-apple-push-services/35399656#35399656
     

    Извиняются...
  22. Like
    Равиль Зарипов (ZuBy) отреагировална Rusland в Проблема при активации memo или edit программа зависает и закрывается.   
    Ответ со Stackoverflow действительно помог!
     
    Из папки source/fmx берем FMX.Platform.Android.pas кладем в папку с проектом.
    Меняем в нем следующие процедуры:
    procedure TPlatformAndroid.RunOnUIThread(Proc: TThreadProcedure); begin //MainActivity.runOnUiThread(TSimpleProcedureRunner.Create(Proc)); CallInUIThread( procedure() begin Proc; end); end; procedure TPlatformAndroid.SynchronizeOnUIThread(Proc: TThreadProcedure); //var // Runner: TSimpleProcedureRunner; begin // CallInUIThread( // procedure() // begin // Runner := TSimpleProcedureRunner.Create(Proc); // MainActivity.runOnUiThread(Runner); // Runner.Event.WaitFor; // end); CallInUIThreadAndWaitFinishing( procedure() begin Proc; end); end; procedure TPlatformAndroid.SetClipboard(Value: TValue); //var //  Setter: TClipboardSetter; //begin //  Setter := TClipboardSetter.Create(Value.ToString); //  TAndroidHelper.Activity.runOnUiThread(Setter); //  Setter.Done.WaitFor(INFINITE); var Setter: TClipboardSetter; begin Setter := TClipboardSetter.Create(Value.ToString); CallInUIThread( procedure() begin SharedActivity.runOnUiThread(Setter); end); Setter.Done.WaitFor(INFINITE); end; function TPlatformAndroid.GetClipboard: TValue; //var //  Getter: TClipboardGetter; //begin //  Getter := TClipboardGetter.Create; //  TAndroidHelper.Activity.runOnUiThread(Getter); //  Getter.Done.WaitFor(INFINITE); //  Result := Getter.Value; var Getter: TClipboardGetter; begin Getter := TClipboardGetter.Create; CallInUIThread( procedure() begin SharedActivity.runOnUiThread(Getter); end); Getter.Done.WaitFor(INFINITE); Result := Getter.Value; end; Запускаем и при нажатии на Edit или Memo клавиатура нормально появляется.
     
    PS. Надеюсь Embarcadero исправит эту проблему в новой версии.
     
     
     

    Да, помогло Видимо словить такой глюк могут аппараты Lenovo - что-то в их виртуальной клавиатуре не как у всех
     
    PS. Вопрос Бровину Ярославу:
    Будет ли исправлен Androidapi.Helpers.pas? Постоянно с ним какие-нибудь проблемы. В сервисах его даже подключать опасно, обязательно вылезают ошибки касающиеся TAndroidHelper.Activity
     
    С уважением, ... дата... подпись
  23. Like
    Равиль Зарипов (ZuBy) отреагировална AliZairov в YouTubeApi VCL & FMX   
    Привет. Я сделал новую версию YouTubeApi компоненты. Поддерживаемые VCL & FMX + Mobile.
    Никаких официальных YouTube Api компоненты. Только данные с парсинг. Пример доступен в архиве.
     
    Новый
    ===
    v1.4 - 25/02/2018
      + Устранение проблем
    YouTubeApiDelphi
  24. Like
    Равиль Зарипов (ZuBy) получил реакцию от enatechno в Запрет нажатия на контролы внутри ScrollBox при прокручивании   
    для мобильных устройств есть специальное событие OnTap
     
    в случае с комбобокс оно не поможет а вот для кнопок самое то
  25. Like
    Равиль Зарипов (ZuBy) отреагировална Andrey Efimov в AlarmManager   
    [Статья][Android][AlarmManager] Простой пример использования в RAD Studio
×
×
  • Создать...