-
Постов
2 517 -
Зарегистрирован
-
Посещение
-
Победитель дней
264
Активность репутации
-
Равиль Зарипов (ZuBy) отреагировална enatechno в Серьезно о FireMonkey на Android и iOS
Поддерживаю Zuby.
Чем проще, тем стабильнее. Три параметра - номер стола и время, проверка занятости.
P.S. устанавливал себе виджет "аналоговые часы", казалось бы.... Из 5-10 (со скачиванием 1кк) не один не показывал правильное время после "просыпания" Андроида. Остановился на виджете одного японца, скачиваний меньше 100к. Кунг-фу решает.
-
Равиль Зарипов (ZuBy) получил реакцию от mrseagull в Серьезно о FireMonkey на Android и iOS
если выбрать правильные инструменты, то возможно.
FMX + сервак + PHP (или любой серверный язык) всю работу с БД и с картами (такие как запросы геокодинга и прочие ssl запросы на другие сайты) на PHP, а клиент-приложение только в виде отображения контента.
и можно делать не только одноформенные приложения, а сложные
-
Равиль Зарипов (ZuBy) получил реакцию от enatechno в Серьезно о FireMonkey на Android и iOS
если выбрать правильные инструменты, то возможно.
FMX + сервак + PHP (или любой серверный язык) всю работу с БД и с картами (такие как запросы геокодинга и прочие ssl запросы на другие сайты) на PHP, а клиент-приложение только в виде отображения контента.
и можно делать не только одноформенные приложения, а сложные
-
Равиль Зарипов (ZuBy) получил реакцию от zairkz в Странные глюки ProgressBar'ов в ListBox
Мы не злые, ответили на ваш вопрос. Нет смысла дублировать ответы, если на них уже даны исчерпывающие ответы. Переходим по ссылкам и читаем, там все написано
-
Равиль Зарипов (ZuBy) отреагировална Andrey Efimov в Какие статьи вы хотели бы видеть в блогах?
[Статья][Android][AlarmManager] Простой пример использования в RAD Studio
Берите за основу
Добавлено в 17:15
Так совпало, что Ярослав тоже написал статью на эту тему, держите ссылку [Статья][Android] Приложение будильник. Использование AlarmManager в FireMonkey на Андроиде
p.s. Рекомендую к прочтению, обе статьи, т.к. они очень хорошо дополняют друг-друга .
-
Равиль Зарипов (ZuBy) отреагировална Axbor в Ошибка при подключении к MySQL Windows
Проблема решилась обновлением libmysql.dll
libmysql.zip
-
Равиль Зарипов (ZuBy) отреагировална AngryOwl в access violation TImage
Попробуйте сделать просто:
improgressbar.Bitmap.Canvas.BeginScene; try improgressbar.Bitmap.LoadFromFile(........................ finally improgressbar.Bitmap.Canvas.EndScene; end; -
Равиль Зарипов (ZuBy) отреагировална AngryOwl в access violation TImage
С TLabel ситуация точно та же.
Сначала BeginUpdate, потом EndUpdate.
А если проблема не в этом - тогда все (вывод в GUI) загнать в
TThread.Syncronize(TThread.CurrentThread, procedure begin ................. end); С мерцанием - не понял, что именно и когда мерцает?
-
Равиль Зарипов (ZuBy) получил реакцию от AngryOwl в Странные глюки ProgressBar'ов в ListBox
Мы не злые, ответили на ваш вопрос. Нет смысла дублировать ответы, если на них уже даны исчерпывающие ответы. Переходим по ссылкам и читаем, там все написано
-
Равиль Зарипов (ZuBy) получил реакцию от d7d1cd в Простая защита программы
OFFTOP: то что хранится в программе можно вытащить, заменить в реестре на это значение
обход защиты не обсуждаем, не превращайте тему в свалку
-
Равиль Зарипов (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])); -
Равиль Зарипов (ZuBy) отреагировална Brovin Yaroslav в Шрифт с обводкой
Есть в стилевых объектах специальный объект с тенью. Он называется: TStyleTextObject. Он не использует эффект тени, а делает это при помощи двойной отрисовки текста. По умолчанию он не доступен на панели инструментов, но его можно добавить установив библиотеку FGX.
-
Равиль Зарипов (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])); -
Равиль Зарипов (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); -
Равиль Зарипов (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])); -
Равиль Зарипов (ZuBy) отреагировална zairkz в Ошибка сертификата Apple
А у меня вчера, действительно эпопея), поэтому и создал тему что бы кто нибудь не разбил свой монитор, не качал бы образ Мака гигов под 40), не убил свои клетки нервные))
-
Равиль Зарипов (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/
тут о новом подходе (видео)
-
Равиль Зарипов (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; При таком подходе главный поток не будет блокироваться и будет корректно отрисовываться и работать.
-
Равиль Зарипов (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/
-
Равиль Зарипов (ZuBy) получил реакцию от Владимир в Потоки и процедуры
использовать такую конструкцию
//uses System.Threading; TTask.Run( procedure begin // выполняем загрузку файла из интернета; TThread.Synchronize(nil, procedure begin // выполняем действия связанные с визуальными компонентами end); end); но помнить что из доп. потока нельзя запустить доп. поток
-
Равиль Зарипов (ZuBy) отреагировална zairkz в Ошибка сертификата Apple
Добрый день, это просто стрессовая ночь без сна, как меня з..бал APPLE ((
Если кто то собирается выпускать сертификаты Apple (сертификаты разработчика или Push сертификаты), и начнет парится потому что сертификаты выпускаются просроченными, знайте что вы не виноваты)
Вообщем в маке в "Связке ключей" в меню "Вид" кликнете на "Показать скрытые сертификаты"
Далее в Связке "Система" найдите просроченный сертификат Apple и удалите его.
После чего с кабинета разработчика скачайте и установите новый сертификат, ссылка на скачивания есть при создания нового сертификата в самом низу. ((
Подробнее на
http://stackoverflow.com/questions/35390072/this-certificate-has-an-invalid-issuer-apple-push-services/35399656#35399656
Извиняются...
-
Равиль Зарипов (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
С уважением, ... дата... подпись
-
Равиль Зарипов (ZuBy) отреагировална AliZairov в YouTubeApi VCL & FMX
Привет. Я сделал новую версию YouTubeApi компоненты. Поддерживаемые VCL & FMX + Mobile.
Никаких официальных YouTube Api компоненты. Только данные с парсинг. Пример доступен в архиве.
Новый
===
v1.4 - 25/02/2018
+ Устранение проблем
YouTubeApiDelphi
-
Равиль Зарипов (ZuBy) получил реакцию от enatechno в Запрет нажатия на контролы внутри ScrollBox при прокручивании
для мобильных устройств есть специальное событие OnTap
в случае с комбобокс оно не поможет а вот для кнопок самое то
-
Равиль Зарипов (ZuBy) отреагировална Andrey Efimov в AlarmManager
[Статья][Android][AlarmManager] Простой пример использования в RAD Studio