Лидеры
Популярный контент
Показан контент с высокой репутацией 17.02.2016 во всех областях
-
Привет. Я сделал новую версию YouTubeApi компоненты. Поддерживаемые VCL & FMX + Mobile. Никаких официальных YouTube Api компоненты. Только данные с парсинг. Пример доступен в архиве. Новый === v1.4 - 25/02/2018 + Устранение проблем YouTubeApiDelphi4 балла
-
А у меня вчера, действительно эпопея), поэтому и создал тему что бы кто нибудь не разбил свой монитор, не качал бы образ Мака гигов под 40), не убил свои клетки нервные))3 балла
-
Простая защита программы
zairkz и ещё один отреагировал Равиль Зарипов (ZuBy) за вопрос
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]));2 балла -
Странные глюки ProgressBar'ов в ListBox
Равиль Зарипов (ZuBy) и ещё один отреагировал enatechno за вопрос
тут еще: http://blogs.embarcadero.com/yaroslavbrovin/2012/10/11/listboxitem_styling/ http://blogs.embarcadero.com/yaroslavbrovin/2012/10/15/listboxitem_styling_part2/ тут о новом подходе (видео)2 балла -
Ошибка сертификата Apple
Brovin Yaroslav и ещё один отреагировал zairkz за вопрос
Добрый день, это просто стрессовая ночь без сна, как меня з..бал APPLE (( Если кто то собирается выпускать сертификаты Apple (сертификаты разработчика или Push сертификаты), и начнет парится потому что сертификаты выпускаются просроченными, знайте что вы не виноваты) Вообщем в маке в "Связке ключей" в меню "Вид" кликнете на "Показать скрытые сертификаты" Далее в Связке "Система" найдите просроченный сертификат Apple и удалите его. После чего с кабинета разработчика скачайте и установите новый сертификат, ссылка на скачивания есть при создания нового сертификата в самом низу. (( Подробнее на http://stackoverflow.com/questions/35390072/this-certificate-has-an-invalid-issuer-apple-push-services/35399656#35399656 Извиняются...2 балла -
Ответ со 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 С уважением, ... дата... подпись2 балла
-
Описание TfgToast - Быстрые уведомления
Алмаз Амангельды отреагировал Brovin Yaroslav за тема
Описание: Назначение: Быстрые уведомления, появляющиеся в нижней части экрана, предназначенные для отображения короткой текстовой информации и опционно изображения Поддерживаемые платформы: Android, iOS Демо проект: Samples\ToastsDemo\ToastsDemo.dproj Доступен с версии: RX (R100) Возможности: Несколько быстрых способов отображения уведомления: TfgToast.Show(Message) - только текст TfgToast.Show(Message, Icon) - текст и картинка TfgToast.Show(Message, Duration) текст + настройка длительности отображения TfgToast.Show(Message, Duration, Icon) - текст + картинка + длительность отображения Доступно редактирование цвета заднего фона (TfgToast.BackgroundColor) Доступно редактирование цвета сообщения (TfgToast.MessageColor). Возможность добавить к сообщению иконку (TfgToast.Icon) Доступно редактирование длительности отображения уведомления (TfgToast.Duration) Возможность менять глобальные параметры отображения всех тостов в рамках приложения (TfgToast.DefaultBackgroundColor, TfgToast.DefaultMessageColor и TfgToast.DefaultPadding) Примеры вызова: // Быстрое отображение, только текст TfgToast.Show('Message'); // Быстрое отображение, текст + картинка TfgToast.Show('Message', Bitmap); // Настраиваемое отображение var Toast: TfgToast; begin Toast := TfgToast.Create(EditToastMessage.Text, TfgToastDuration(ComboBoxDurationType.ItemIndex)); try if SwitchShowIcon.IsChecked then Toast.Icon.Assign(Image1.Bitmap); Toast.MessageColor := ColorComboBoxMessage.Color; Toast.BackgroundColor := ColorComboBoxBackground.Color; Toast.Show; finally Toast.Free; end; end; Скриншоты:1 балл -
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);1 балл
-
Ошибка при подключении к MySQL Windows
Равиль Зарипов (ZuBy) отреагировал Axbor за вопрос
Проблема решилась обновлением libmysql.dll libmysql.zip1 балл -
У меня в понедельник эта эпопея была, поскольку срок действия того сертификата закончился в воскресенье.1 балл
-
Странные глюки ProgressBar'ов в ListBox
Brovin Yaroslav отреагировал Равиль Зарипов (ZuBy) за вопрос
меняет конечно, это совсем разные компоненты. ничего общего у них 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/1 балл -
помогло? если да то надо будет у себя то же править что бы не словить такой глюк1 балл
-
Было бы неплохо продублировать сюда ответ из Stackoverflow, если он вам помог1 балл
-
Потоки и процедуры
Владимир отреагировал Равиль Зарипов (ZuBy) за вопрос
использовать такую конструкцию //uses System.Threading; TTask.Run( procedure begin // выполняем загрузку файла из интернета; TThread.Synchronize(nil, procedure begin // выполняем действия связанные с визуальными компонентами end); end); но помнить что из доп. потока нельзя запустить доп. поток1 балл -
Goggle Drive в качестве имени ставит то, что указано в Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(aComment)); Т.е. прописывайте в это поле имя файла без пути, Mail.ru не пробовал.1 балл
-
Фоновое выполнение операции без "замораживания" отрисовки
L0ndl3m отреагировал 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; При таком подходе главный поток не будет блокироваться и будет корректно отрисовываться и работать.1 балл