Лидеры
Популярный контент
Показан контент с высокой репутацией 10.06.2016 во всех областях
-
[Статья] Публикация приложения в Google Play
afors и ещё один отреагировал Andrey Efimov за тема
Ссылка: http://delphifmandroid.blogspot.ru/2016/06/google-play-google-play.html Автор: Андрей Ефимов Описание: Публикация приложения в Google Play2 балла -
Какие статьи вы хотели бы видеть в блогах?
Alex Bozhko и ещё один отреагировал Andrey Efimov за тема
Написал статейку по вашей теме [Google Play] Публикация приложения в Google Play2 балла -
StringrGrid переехал из Seatle в Berlin в пути пропал багаж (DragDrop, DblClick)
Rusland и ещё один отреагировал RoschinSpb за вопрос
Понятно. Область видимости в Update1 уже не поменять. В следующей версии возможно добавлю пару событий OnCellClick OnCellDblClick с параметрами, чтобы можно было определить ячейку куда ткнули.2 балла -
Очень широко использовал и использую grid, так как в основном программирую для десктопов windows и mac. OnDblClick нужен! Двойной клик использую по разному. Иногда для помещения в рядом стоящий edit какой либо информации. Иногда для открытия формы для редактирования этой записи (Бывает, что строка в grid'е составлена из разных таблиц, поэтому напрямую не отредактируешь ее).2 балла
-
Стили. Нарисовать свой Календарь.
AngryOwl отреагировал Brovin Yaroslav за вопрос
Добрый день, Для того, чтобы сделать выделение праздничных дат, воспользуйтесь статьёй, предложенной ZuBy. А чтобы сделать такой вид календаря, как у вас. Сделайте новый стиль календаря. За основу можете взять и отредактировать стиль календаря для Андроида.1 балл -
Intents — это намерения. Intent Filter — это желание обслуживать намерения. Принял (приложением) отправленный Intent — будь добр запуститься и обработать это намерение. Не подходят для этой задачи startActivity, нужно использовать BroadcastReceiver и отправлять ему свой Intent: procedure TMainScreen.SomeOneSaysMeWhatIamStupidAndIsentHim; Begin TAndroidHelper.Context.sendBroadcast(Intent); End; procedure TMainScreen.FormActivate(Sender: TObject); begin begin try TAndroidHelper.Context.registerReceiver(FReceiver, FIntentFilter); finally end; end; end; procedure TMainScreen.FormDeactivate(Sender: TObject); begin try TAndroidHelper.Context.unregisterReceiver(FReceiver); finally end; end;1 балл
-
как создать чат между людьми Android Делфи?
AngryOwl отреагировал Равиль Зарипов (ZuBy) за вопрос
не нужно форум превращать в сообщество фрилансеров. напишите что у вас не получается. Вам дадут внятные рекомендации, где-то может и кодом помогут. Welcome!1 балл -
OnUpdateObjects OnUpdatingObjects в Берлине
Евгений Корепов отреагировал krapotkin за вопрос
я еще раз в этой теме приложу тестовый проект полностью рабочий под берлин с ресайзом ListViewTestBerlin.7z1 балл -
listView
Brovin Yaroslav отреагировал krapotkin за вопрос
могу выложить проект тестовый 2 дня на нем тренился ))) ListViewTestBerlin.7z1 балл -
А... так это просто решается. procedure TfmSettings.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); var FService: IFMXVirtualKeyboardService; begin if (Key = vkHardwareBack) then begin Key := 0; // <=== вот здесь очищается буфер клавиатуры TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(FService)); if (FService <> nil) and (TVirtualKeyboardState.Visible in FService.VirtualKeyBoardState) then begin FService.HideVirtualKeyboard; exit; end else begin Close; end; end; end;1 балл
-
listView
Brovin Yaroslav отреагировал krapotkin за вопрос
могу порекомендовать только свой способ тотально всё что нужно создавать самому в OnUpdatingObjects procedure XXX.CreateItem(); begin fUpdating:=true; item := ListView.items.Add(); item.Data['key1']:=value1; item.Data['key2']:=value2; fUpdating:=false; item.Adapter.ResetView(item); // вот тут вызовется OnUpdatingObjects! end; procedure XXX.UpdatingObjects(); begin if FUpdating then exit; h:=5; // НАЗВАНИЕ aText:=SetupTextObject(sText, AItem.Data['key1'].AsString, freeWidth , -1, 10, h, TListItemAlign.Leading, TListItemAlign.Leading, TTextAlign.Leading, TTextAlign.Leading); aText.Font.Style := [TFontStyle.fsBold]; aText.Font.Size := 18; atext.Height := CalculateHeight(atext, lvWallets); h:=h+atext.Height; ... // линия посредине line := aitem.Objects.FindObjectT<TListItemLine>('key2'); if line=nil then line := TListItemLine.Create(AItem); line.name := sLine; line.width := lvWallets.width - lvWallets.itemspaces.left - lvWallets.itemspaces.right -10 -10; line.height := 1; line.color := Emerald; line.placeOffset.x := 10; line.placeOffset.y := h; line.lineWidth:=1; h:=h+5; .... AHandled:=true; end; код неточный, только для иллюстрации идеи в этом случае лучше всего режим Dynamic. Там не создаются лишние "предустановленные" элементы Text Detail и т.д.1 балл -
на всех андроид устройствах нет смысла пользоваться прямым указанием папки доступные программе папки перечислены в class TPath из System.IOUtils.pas пример uses System.IOUtils; fname := TPath.combine(TPath.GetDocumentsPath, 'myfile.txt');1 балл
-
listView
Kitty отреагировал Равиль Зарипов (ZuBy) за вопрос
Это все потому что скрытие кнопки делать нужно в OnUpdateObjects1 балл -
еще больше плагинов установите в студию)00))1 балл
-
Диалоговое окно на Андроид.
zairkz отреагировал Равиль Зарипов (ZuBy) за вопрос
Обновленная версия Более реалистичные диалоги для андроид 5.0 и выше MyDialogs_ZuBy.zip1 балл -
Ручками вычистил из юнита stylebook object StyleBook1: TStyleBook Styles = < item end item Platform = 'Windows 10 Desktop' ResourcesBin = { 464D585F5354594C4520322E3501060B74764D61705374796C6531032E3F0620 ...... 666F726D44656661756C7408000000} end> end и все ссылки на него. Заработало! откуда брался при чтении формы HTMLText - хз1 балл
-
fsdb, Создаем, например, в сервисе поток, в нем делаем запрос к сайту, получаем html, парсим. Ярослав за такой код спасибо не скажет, поэтому адрес замените unit Unit2; interface uses System.SysUtils, System.Classes, System.Android.Service, AndroidApi.JNI.GraphicsContentViewText, Androidapi.JNI.Os; type TMyThread = class(TThread) private function MyFunc():String; function GetTitle(HtmlCode:string):String; protected FURL: string; public constructor Create(const aURL: string); destructor Destroy; override; procedure Execute; override; property URL: string read FURL; end; type TAndroidServiceDM = class(TAndroidService) function AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; private { Private declarations } aMyThread: TMyThread; public { Public declarations } end; var AndroidServiceDM: TAndroidServiceDM; implementation {%CLASSGROUP 'FMX.Controls.TControl'} {$R *.dfm} uses System.Net.HTTPClientComponent, System.Net.HttpClient, Androidapi.JNI.App; function TAndroidServiceDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin aMyThread:=TMyThread.Create('http://fire-monkey.ru/'); Result:=TJService.JavaClass.START_STICKY; end; constructor TMyThread.Create(const aURL: string); begin FURL:=aURL; inherited Create(False); end; destructor TMyThread.Destroy; begin inherited; end; procedure TMyThread.Execute; var aResponser:string; begin try while not terminated do begin Sleep(15000); try aResponser:=MyFunc; finally end; end; except on E:Exception do // end; end; function TMyThread.GetTitle(HtmlCode:string):String; var // парсим Title s:string; begin Result:=Copy(HtmlCode,Pos('<title>',HtmlCode)+7,Pos('</title>',HtmlCode)-Pos('<title>',HtmlCode)-7); end; function TMyThread.MyFunc():String; var aHTTPResponse: IHTTPResponse; aResponser: String; sStream: TStringStream; aHttpClient: TNetHTTPClient; begin aResponser:=''; Result:=aResponser; try aHttpClient := TNetHTTPClient.Create(nil); aHTTPClient.AllowCookies :=true; aHTTPClient.AcceptLanguage:='ru-RU;q=0.8,en-US;q=0.5,en;q=0.3'; aHTTPClient.ContentType :='text/html'; aHTTPClient.AcceptCharset :='utf-8'; aHTTPClient.Accept :='text/json,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'; try sStream := TStringStream.Create(); try aHTTPResponse := aHttpClient.Get(FURL, sStream); // get сервера (/wait) if (aHTTPResponse<>nil) then aResponser:=GetTitle(sStream.DataString); else aResponser:=''; except on E:Exception do // end; finally aHttpClient.Free; sStream.Free; end; finally Result:=aResponser; end; end; end. Приложение один раз запустить в любом случае придется. Если приложение закрыть вручную, то запросы перестают идти (почему не знаю). А если приложение "убивает" сам андроид (например если мало оперативной памяти), то запросы идут как и положено1 балл
-
Rusland Спасибо большое, всё работает на ура. Вот только никак не могу добиться, чтоб сервис присылал сообщения втихую, не открывая приложения... Нет идей на эту тему?1 балл
-
Какие статьи вы хотели бы видеть в блогах?
AngryOwl отреагировал Andrey Efimov за тема
Статья/видео урок на английском: http://delphi.org/2014/07/android-voice/1 балл -
1. как воспроизвести потоковое видео с IP камеры на Андройд 2. пример использования распознания речи google api на Андройд 3. пример передачи даных из сервиса в приложение / узнать из севиса что приложение работает1 балл
-
Как массово задать размер шрифта у всех контролов?
Pax Beach отреагировал Brovin Yaroslav за вопрос
Добрый день, В RAD Studio XE5 для поддержки возможности массово менять настройки текста для любых контролов был введен специальный интерфейс ITextSettings. Каждый контрол, который поддерживает настройку параметров текста, реализует этот интерфейс. Поэтому, чтобы массово поменять настройки текста можно использовать, например, следующий код (Delphi, он легко переводится на C++). Этот код Для всех наследников, которые не используют размер шрифта из стиля, задает размер шрифта: var Settings: ITextSettings; Instance: TComponent; I: Integer; begin for I := 0 to ChildrenCount - 1 do begin Instance := Children[I]; if IInterface(Instance).QueryInterface(ITextSettings, Settings) = S_OK then begin // using ITextSettings methods and properties: // TextSettings: TTextSettings, // DefaultTextSettings, // StyledSettings // to change properties of text objects Settings.TextSettings.BeginUpdate; try Settings.TextSettings.Font.Size := 18; if TStyledSetting.ssSize in Settings.StyledSettings then Settings.StyledSettings := Settings.StyledSettings - [TStyledSetting.ssSize] // show Font.Size := 18 else Settings.StyledSettings := Settings.StyledSettings + [TStyledSetting.ssSize]; // restore showing Font.Size loaded from a style finally Settings.TextSettings.EndUpdate; end; end; end; end;1 балл