-
Постов
828 -
Зарегистрирован
-
Посещение
-
Победитель дней
13
Активность репутации
-
-
x11 получил реакцию от Новый пользователь в Это приложение было создано для более ранней версии Android
Поставить галочку и нажать Скачать
-
x11 получил реакцию от Ingalime в XSuperObject
Ну вот я использовал библиотеку, которая развивается и что из этого вышло?
Один и тот же код в разных версиях Дельфи (Rio и Sydney) дает разный результат
procedure TForm1.btnReadArrayClick(Sender: TObject); const sJSon = '{"ID":[0,55,true,false], "ID2":[1,60,false,false]}'; var Iterator: TJSONIterator; Reader: TJsonTextReader; TextReader: TStringReader; begin TextReader := TStringReader.Create(sJSon); Reader := TJsonTextReader.Create(TextReader); Iterator := TJSONIterator.Create(Reader); try while Iterator.Next do begin if Iterator.&Type = TJsonToken.StartArray then if Iterator.Recurse then while Iterator.Next do begin Memo1.Lines.Add('Key: ' + Iterator.Key); Memo1.Lines.Add('Index:' + Iterator.Index.ToString); end; end;//while finally FreeAndNil(TextReader); FreeAndNil(Iterator); FreeAndNil(Reader); end; end; Речь, о встроенной в Дельфи джейсон-библиотеке (Readers and Writers JSON Framework), которая поставляется, начиная с Seatle
вот здесь есть описание на русском https://webdelphi.ru/2019/03/rabota-s-json-v-delphi-10-3-rio-2/
-
-
x11 получил реакцию от Ingalime в ListBox, Edit и клавиатура
Keep Controls Visible When Virtual Keyboard Pops Up In Delphi
http://www.fmxexpress.com/keep-controls-visible-when-virtual-keyboard-pops-up-in-delphi-10-2-tokyo-on-android-and-ios/
-
x11 получил реакцию от Voron в Что невозможно сделать на Delphi для Android?
Минус других языков в том, что в глазах рябит от скобочек и другой пунктуации.
-
x11 получил реакцию от Евгений Корепов в Проверить существование TJSONObject
В общем, да. Я изначально просто был не прав.
Вот так правильно:
var JSONValue: TJSONValue; innerObject: TJSONObject; begin ... .... JSONValue := TJSONObject.ParseJSONValue(.....); if not (JSONValue is TJSONObject) then Continue else innerObject := JSONValue as TJSONObject;
-
x11 отреагировална Slym в Проверить существование TJSONObject
Не делайте слепое приведение типов...
var JObj:TJSONObject; begin JObj:=TJSONObject(TJSONObject.ParseJSONValue('0')); try try if assigned(JObj) then JObj.AddPair('Access','violation'); except ShowMessage('Surprise MF!: '+JObj.ClassName); end; finally JObj.Free; end; end; ParseJSONValue возвращает TJSONValue, и необходима или проверка типа или использование только в рамках TJSONValue чего в большинстве случаев вполне достаточно.
-
x11 отреагировална Равиль Зарипов (ZuBy) в vkbdhelper - поднятие компонентов над клавиатурой
Привет Всем!
vkbdhelper.pas
Давно пользовался vkbdhelper'ом, но он был только для андроида.
руки добрались и до этого, теперь его можно использовать и на IOS
изменения
* почистил uses секцию
* убрал зависимость от платформ (кросс-платформенный)
* добавил глобальную переменную VKOffset
VKOffset - расстояние между контролом и клавиатурой
для тех случаев когда включены подсказки/автозамена
и контрол оказывается под доп. панелькой
Не все клавиатуры включают доп. панели в свой размер!
Например для IOS нужно всегда прибавлять 30-32 пикселя, панель с кнопкой Done перекрывает контрол
{$IFDEF IOS} VKOffset := 31; {$ELSE} VKOffset := 0; // на свой вкус // не знаю как определить размер доп. панельки // когда она не входит в размер клавиатуры // и определить есть ли панелька вообще... {$ENDIF} vkbdhelper.zip
-
x11 получил реакцию от Dev в Как добавить «ярлыки приложения» для Android в приложении FMX
Может кому пригодится
https://blog.andreamagni.eu/2019/02/how-to-add-android-app-shortcuts-to-a-fmx-application/
-
x11 получил реакцию от Barbanel в Как добавить «ярлыки приложения» для Android в приложении FMX
Может кому пригодится
https://blog.andreamagni.eu/2019/02/how-to-add-android-app-shortcuts-to-a-fmx-application/
-
x11 получил реакцию от Tumaso в Как добавить «ярлыки приложения» для Android в приложении FMX
Может кому пригодится
https://blog.andreamagni.eu/2019/02/how-to-add-android-app-shortcuts-to-a-fmx-application/
-
-
x11 получил реакцию от Tarik Live в Toast для Android Service
Это не вопрос. Просто подумал, что кому-нибудь может пригодится.
https://forums.embarcadero.com/thread.jspa?threadID=118465
Используем 2 файла: Androidapi.JNI.ToastForService.pas + FlyUtils.Android.PostRunnableAndTimer.pas.
Пример вызова:
Androidapi.JNI.ToastForService.PostToast('текст сообщения', LongToast); Проверил - работает.
Есть ещё третий параметр "UseLastToastObj", но я так и не понял, для чего он. Документации нет.
-
x11 получил реакцию от Anatoliy в Библиотека Alcinoe для iOS/FMX
На просторах sql.ru нашёл ссылку на приложение kiskis на Delphi/FMX. Что-то типа мессенджер+инстаграм.
https://youtu.be/WEsEhGfrW-g
Alcinoe is a library visual and non-visual components for Delphi.
https://github.com/Zeus64/alcinoe
-
x11 получил реакцию от Barbanel в Библиотека Alcinoe для iOS/FMX
На просторах sql.ru нашёл ссылку на приложение kiskis на Delphi/FMX. Что-то типа мессенджер+инстаграм.
https://youtu.be/WEsEhGfrW-g
Alcinoe is a library visual and non-visual components for Delphi.
https://github.com/Zeus64/alcinoe
-
x11 получил реакцию от Tumaso в Непонятный LiveBinding Object
Я не смотрел проект и буду подсказывать, как.
Просто напишу, что LiveBinding - тормознутая и глючная технология. Разработчики так и не довели её до ума.
Если есть возможность, лучше отказаться от LiveBinding.
-
x11 отреагировална Barbanel в Telega π - Библиотека для работы с Telegram Bot API в Delphi
Потому что слово "Type" - зарезервированное слово для объявления типов.
-
x11 получил реакцию от Anatoliy в Telega π - Библиотека для работы с Telegram Bot API в Delphi
Разобрался.
когда бот отправляет личное сообщение пользователю, то нужно заполнять только ID, а когда сообщение в канал, то - имя.
Пользователю: UserLink.ID := StrToIntDef64(edUserId.Text, 0);
В канал UserLink.Username := edUserName.Text;
Для отправки сообщения в канал можно в качестве ID подставить отрицательное значение chat_ID, у каналов всегда оно отрицательное.
Т.е. в любом случае можно всегда заполнять только UserLink.ID
В документации Телеграм этого нет
https://tlgrm.ru/docs/bots/api#sendmessage
-
x11 отреагировална rareMax в Telega π - Библиотека для работы с Telegram Bot API в Delphi
Боту могут много человек одновременно писать. Для этого от сервера возвращается не один объект Update, а массив таких объектов.
Событие OnUpdates - возвращает скоп таких обновлений. Событие OnUpdate - перебирает массив и вызывается для каждого элемента(массива)
Для чего: OnUpdate - тебе не придется запускать цикл, ты работаешь напрямую с объектом. OnUpdates - был случай, когда необходимо было этот массив событий отправить в TParallel.For. Раз понадобился мне - возможно и вам понадобится.
-
x11 отреагировална rareMax в Telega π - Библиотека для работы с Telegram Bot API в Delphi
Пропущен тип Telegapi.types или типа того.
Вроде писал, что оперативная поддержка в телеграм-чате осуществляется. А на сайте я не постоянно нахожусь.
Да
Ты прав, в ближайшее время напишу.
Максим Сысоев?:
Все еще бета версия. Не стоит меня винить, если в продакшене пойдет что-либо не так библиотекой!
⚙️GIT: https://bitbucket.org/RareGods/cloudapi/branch/develop
?ZIP: https://bitbucket.org/RareGods/cloudapi/get/develop.zip
?Установка: https://bitbucket.org/RareGods/cloudapi/wiki/Установка
?Баг-репорт: https://bitbucket.org/RareGods/cloudapi/issues/new. Регистрация необязательна.
?Delphi Community Edition: https://www.embarcadero.com/ru/products/delphi/starter (Win32/Win64/iOS/Mac/Android) FREE
-
x11 отреагировална rareMax в Telega π - Библиотека для работы с Telegram Bot API в Delphi
В начале пару новостей:
Репозиторий клонируется также на ГитХаб. Можно устанавливать с помощью Delphinus'a Бот калькулятор для Telegram.
А сейчас мы напишем своего бота, который сможет решать арифметические выражения(и не только).
Что для этого нужно:
Telega π - Библиотека для работы с Telegram Bot API в Delphi TeeBI После установки библиотек свыше - создаем новое консольное приложение. Далее создаем новый модуль(unit) и называем его, например, Telegram.Plugin.Calculator
В этом модуле мы будем писать логику калькулятора, а точнее взаимодействие команд от пользователя и модуля выражений BI.Expression(TeeBI).
Для наглядности, сразу код модуля:
unit Telegram.Plugin.Calculator; interface uses TelegAPI.Bot, TelegAPI.Types, TelegAPI.Utils, TelegAPI.Module; Type TTgCalculatorBot = Class(TTgModule) private FIsCommandWait: Boolean; protected procedure OnUpdate(Sender: TObject; Const Update: TtgUpdate); override; End; implementation uses BI.Expression, System.SysUtils; { TTgWelcomeBot } procedure TTgCalculatorBot.OnUpdate(Sender: TObject; const Update: TtgUpdate); var Cmd: TCommandHelper; Procedure Calculation; var TextExpr: String; Begin FIsCommandWait := False; if Cmd.ParamCount = 0 then TextExpr := Update.Message.Text else TextExpr := Cmd.ParamsToString; try (Sender as TTelegramBot).sendTextMessage(Update.Message.Chat.ID, TExpression.FromString(TextExpr).Value); except on E: Exception do (Sender as TTelegramBot).sendTextMessage(Update.Message.Chat.ID, 'упс, ошибочка вышла: ' + E.ClassName + ' ' + E.Message); end; End; begin Cmd := TCommandHelper.Create(Update.Message.Text); try if Cmd.Command = '/calc' then Begin if Cmd.ParamCount = 0 then Begin FIsCommandWait := true; (Sender as TTelegramBot).sendTextMessage(Update.Message.Chat.ID, 'ожидаю выражение:'); End else Begin Calculation; End; End else if FIsCommandWait then Begin Calculation; End; finally Cmd.Free; end; end; end. Первое на что обращаем внимание - наш класс TTgCalculatorBot будет наследоваться от TTgModule, в котором заложен базовый функционал для расширения функционала бота(на данный момент только получение обновлений от сервера).
В метод OnUpdate будут поставляться обновления, которые приходят от сервера, в нем мы и будем работать.
Насчет поля FIsCommandWait. Уж так сложилось - что, как правило, пользователь сразу отправляет боту команду - а потом параметры. Поэтому, если придет поддерживаемая модулем команда - мы устанавливаем это поле в True. Если это поле - правда - значит нужно обработать текст.
Теперь вернемся к нашему консольному приложению:
program CalculatorBot; {$APPTYPE CONSOLE} {$R *.res} uses TelegaPi.Bot, TelegaPi.Types, System.SysUtils, Telegram.Plugin.Calculator in 'Telegram.Plugin.Calculator.pas'; Const C_PAUSE_UPDATE = 1000; { 1sec. } Var TelegramBot: TTelegramBot; TelegramCalc: TTgCalculatorBot; Procedure InitRecesive; var Offset: Integer; Updates: TArray<TtgUpdate>; Update: TtgUpdate; Begin Offset := 0; while True do begin Sleep(C_PAUSE_UPDATE); // Update pause Updates := TelegramBot.getUpdates(Offset); // Get updates if Length(Updates) = 0 then Continue; Offset := Updates[High(Updates)].ID + 1; end; End; begin WriteLn('Telegram Calculator Sample'); { Here you Api key } TelegramBot := TTelegramBot.Create({$I ..\telegaToken.inc} ); TelegramCalc := TTgCalculatorBot.Create(TelegramBot); try WriteLn('Bot token: ', TelegramBot.getMe.ID <> -1); InitRecesive; except on E: Exception do WriteLn(E.ClassName, ': ', E.Message); end; TelegramBot.Free; TelegramCalc.Free; end. TelegramCalc := TTgCalculatorBot.Create(TelegramBot); - во время создания модуля - происходит подписка на сообщения от сервера. Никаких данных программисту передавать не нужно.
Далее, что бы консоль сразу же не закрылась - нужно зациклить прием данных от сервера. Пример - в процедуре InitRecesive.
Что получаем в итоге:
Так же можете сами протестировать бота(если он конечно будет запущен): @test_delphi_api_bot
Готовый пример: https://bitbucket.org/uasoft/telegapi/src//examples/PluginCalculator/?at=master
-
x11 отреагировална rareMax в Telega π - Библиотека для работы с Telegram Bot API в Delphi
Автор: Максим Сысоев
Репозиторий: Github
Связь со мной: Telegram
Telega π - Библиотека для работы с Telegram Bot API в Delphi
Библиотека для работы с Telegram Bot API
Зависимости
RAD Studio CE CloudAPI Примеры
Получение Username бота
program Project5; {$APPTYPE CONSOLE} {$R *.res} uses TelegaPi.Bot, TelegaPi.Types, System.SysUtils; var Telegram: TTelegramBot; begin Telegram := TTelegramBot.Create({$I TokenTelegramBot.inc}); try { TODO -oUser -cConsole Main : Insert code here } Writeln(Telegram.getMe.Username); except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; Readln; Telegram.Free; end. Пример автоответчика
Напишите ему "привет"
Код: https://gist.github.com/ms301/c7281f443f481115b7643116535e697d
-
x11 получил реакцию от Mars M в Toast для Android Service
Это не вопрос. Просто подумал, что кому-нибудь может пригодится.
https://forums.embarcadero.com/thread.jspa?threadID=118465
Используем 2 файла: Androidapi.JNI.ToastForService.pas + FlyUtils.Android.PostRunnableAndTimer.pas.
Пример вызова:
Androidapi.JNI.ToastForService.PostToast('текст сообщения', LongToast); Проверил - работает.
Есть ещё третий параметр "UseLastToastObj", но я так и не понял, для чего он. Документации нет.
-
x11 получил реакцию от Anatoliy в Prototyping: from Vision to UX Design - FMX Stencils - Free Tool
FireMonkey (FMX) Stencils - Free Tool
Design Beautiful Apps for RAD Studio, Delphi, and C++Builder
https://community.embarcadero.com/blogs/entry/prototyping-from-vision-to-ux-design
https://www.embarcadero.com/free-tools/firemonkey-stencils