-
Постов
2 517 -
Зарегистрирован
-
Посещение
-
Победитель дней
264
Весь контент Равиль Зарипов (ZuBy)
-
в uses прописан IPPeerCommon?
-
Понятно. короче проще не заморачиваться с мобильным приложением а просто с телефона в браузере открывать. Можешь выслать свои приложения, может разберусь что там к чему. у меня код состоит только из разбора json'a который формируется на сервере. весь парсинг написан на php, по нескольким причинам: 1) всегда есть доступ к файлам чтобы отредактировать, если на сайте изменился дизайн или что-то изменили. 2) без надобности перекомпилировать приложение в делфи 3) не нужно заморачиваться с ssl т.к. на андроид 6 не работает ssl да и таскать с собой либы на айос не вариант offtop: не делайте через TWebBrowser, это глупо. какой смысл тогда от приложения? можно сделать закладку и вытащить её на раб. стол... p.s. приложения написанные для личного использования, потому что некоторые компании не хотят создавать приложения для удобства пользователям приходится самому решать
-
я делал через xml rpc api, когда Ярослав дал ключ с этому протоколу. а вообще логика такая 1) эмулировать http запрос с приложения, то что отправляет браузер (смотреть снифером что и куда уходит и что приходит) 2) разобрать html код присланный в ответе и вывести необходимое в приложении у меня таких несколько приложении, для собственных нужд
-
только если самому этим заниматься этим, по дефолту нет такой возможности
-
с использованием анонимных функции жить стало легче, как по мне. я их использую не только в потоках, а как отложенное действие.. Приведу пример: Есть форма в которой выбираются некие данные, допустим местоположение. Эта форма вызывается из нескольких мест, т.е. результат выбора пользователя отправляется всегда в разные формы и в визуальные компоненты. Как я делал это раньше: Заводил некую глобальную переменную и по ней смотрел кто вызвал и куда отправить myVar := 'form1'; // для примера if myVar = 'form1' then form1.lbLocation.Text := myLocation // (допустим тут хранится выбранные данные пользователя ) else и т.д. Как теперь: Переопределяю метод формы Show с параметром aProc: TThreadProcedure procedure Show(aProc: TThreadProcedure); overload; создаю переменку FProcedure:TThreadProcedure в privat секции В методе Show присваиваю FProcedure:= aProc; Show; // обычный метод формы При выборе пользователем местоположения, выполняется вот такой код FProcedure;// наша отложенная процедура Close; // закрываем форму и задаю при показе формы процедуру которая должна выполнится при выборе местоположения 1 вариант myLocationForm.Show(procedure begin Form1.lbLocation.Text := myLocation end); 2 вариант myLocationForm.Show(procedure begin ShowMesage(myLocation); end); Некая свобода действий всегда хорошо, и довольно просто в реализации
-
какая платформа? на windows все прекрасно работает UPDATE не работает
-
case неправильный Item.Index должно быть
-
Тема оказалась настолько интересна что занялся ей подробней. Мы с zairkz убили много времени, чтобы понять как выкрасить в один цвет без полупрозрачности, взяв скриншот и фотошоп определили, что затемнение происходит на 40% Решение родилось само собой, затемнить цвет ToolBar'a на 40% и цвет выровняется. Казалось бы можно осветлить цвет для подложки и цвет тоже выровнится, но например белый или светлые цвета нельзя еще осветлить. также написал процедуру для определения высоты статус бара и панели навигации procedure androidGetBounds(out statusBar, navigationBar: Integer); {$IFDEF ANDROID} var KeyCharacterMap: JKeyCharacterMap; resourceID: Integer; ScreenService: IFMXScreenService; sScale: Single; {$ENDIF} begin navigationBar := 0; statusBar := 0; {$IFDEF ANDROID} if TOSVersion.Check(5, 0) then // вроде только работает с 5.0 ниже нет устройства проверить begin sScale := 1; if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenService)) then sScale := ScreenService.GetScreenScale; //получаем скейл resourceID := TAndroidHelper.Activity.getResources.getIdentifier(StringToJString('status_bar_height'), StringToJString('dimen'), StringToJString('android')); if resourceID > 0 then statusBar := Trunc(TAndroidHelper.Activity.getResources.getDimensionPixelSize(resourceID) / sScale); if not TJKeyCharacterMap.JavaClass.deviceHasKey(TJKeyEvent.JavaClass.KEYCODE_BACK) then // проверка на существование наэкранных кнопок или физических begin resourceID := TAndroidHelper.Activity.getResources.getIdentifier(StringToJString('navigation_bar_height'), StringToJString('dimen'), StringToJString('android')); if resourceID > 0 then navigationBar := Trunc(TAndroidHelper.Activity.getResources.getDimensionPixelSize(resourceID) / sScale); end; end; {$ENDIF} end; и в модуле FMX.Platform.Android нужно изменения внести (если вы используете измененный модуль для Intel'а) // Fix by Flying Wang & CallInUIThread( procedure begin if (not PlatformAndroid.GetFullScreen(nil)) and (SharedActivity.getWindow.getAttributes.Flags and TJWindowManager_LayoutParams.JavaClass.FLAG_FULLSCREEN <> TJWindowManager_LayoutParams.JavaClass.FLAG_FULLSCREEN) and (SharedActivity.getWindow.getAttributes.Flags and TJWindowManager_LayoutParams.JavaClass.FLAG_TRANSLUCENT_STATUS <> TJWindowManager_LayoutParams.JavaClass.FLAG_TRANSLUCENT_STATUS) // fix by ZuBy ... SystemBar.zip
-
даже можно свой класс создать для удобства, кстати вылетело из головы. через адаптеры если не ошибаюсь
-
увы такой же не сделать
-
а разве не просто DESC? просто никогда не встречал DESCENDING