Перейти к содержанию
Fire Monkey от А до Я

rareMax

Пользователи
  • Постов

    553
  • Зарегистрирован

  • Посещение

  • Победитель дней

    35

Весь контент rareMax

  1. Конечно определено(использую jedi.inc)
  2. Подскажите, может я как то не догоняю. Работаем(играемся) с товарищем над одним проектом. У него ХЕ, у меня RX. Беда в том, что RX автоматом добавляет в uses - System.ImageList. можно ли как то ограничить эту самодеятельность? пытался делать так: {$IFDEF DELPHIXE7_UP}System.ImageList{$ENDIF}; Но все равно он рядом добавляет этот модуль. Есть идеи? или пинать этого товарища, что бы на новую версию переходил?
  3. Чисто для винды - есть хорошо описаная тема(статей так на 11, на сколько я помню) от гансмокера. Будь готов вчитываться и стараться понимать что происходит. А вот собственно материал для изучения
  4. в общем скачай какой то хттп снифер и посмотри что ты на сервер шлешь
  5. var task: ITask; begin WriteLn('Telegram Bot Ping-Pong Sample'); TelegramBot := TTelegramBot.Create( {$I ..\telegaToken.inc}{ you Api key } ); try task := TTask.Create( procedure var LMsg:TtgMessage; Begin LMsg := TelegramBot.sendPhoto(12345, ttgFileToSend.Create('test.jpg')); Работа_с_ответом_сервера(LMsg); End); task.Start; StartRecesive; except on E: Exception do WriteLn(E.ClassName, ': ', E.Message); end; TelegramBot.Free; end. Ну вариант с таском вижу только так. Но в таком случае эта работа ложится на конечного разработчика. А хотелось бы что бы это было "спрятано под капотом библиотеки" (синоним async в С# в общем пытаюсь найти для Делфи)
  6. Привет. Нуждаюсь в вашем совете. Пару недель назад я начал разрабатывать библиотеку Telegram Bot Api(TelegaPi) для работы с Бот Апи в RAD Studio. И у меня возникла трудность с реализацией отправки запросов на сервер в отдельных потоках(распараллеливание). Например боту нужно отправить фото 100 пользователям. Отправка будет отправляться по очереди от 1 до 100 пользователя. Из-за этого снизится скорость ответа. Можно ли как то в самой библиотеке организовать распараллеливание? Метод отправки фото: function TTelegramBot.sendPhoto(chatId, photo: TValue; caption: string; disable_notification: Boolean; replyToMessageId: Integer; replyMarkup: TtgReplyKeyboardMarkup) : TtgMessage; var Parameters: TDictionary<String, TValue>; begin Parameters := TDictionary<String, TValue>.Create; try Parameters.Add('chat_id', chatId); Parameters.Add('photo', photo); Parameters.Add('caption', caption); Parameters.Add('disable_notification', disable_notification); Parameters.Add('reply_to_message_id', replyToMessageId); Parameters.Add('reply_markup', replyMarkup); Result := API<TtgMessage>('sendPhoto', Parameters); finally Parameters.Free; end; end; Пока что приходи в голову использование iTask<T> - но еще не знаю как бы лучше придумать. Надеюсь на ваши идеи и советы. Спасибо
  7. К сожалению с таким не сталкивался.
  8. Автор: Максим Сысоев Репозиторий: 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
  9. Новые компоненты тоже не видно? если при добавлении новых - все нормально, попробуй удалить старые кнопки, добавь новые(ну и на них обработчики уже перенеси) В во время исполнения программы попробуй в OnShow событии формы написать Button1.BringToFront;
  10. В структуре проекта нажми прав. клав. мыши на "Button1" -> Control -> Bring To Front
  11. Ну например я смотрю спайдером. Допустим я пишу сейчас АПИ для телеграмма. Есть у меня демка. И, например, у меня большая нагрузка на процессор(на самом деле мизерная - 0.1-0.3%). Что бы определить место, где происходит нагрузка - я запускаю демку под профайлером. Открываю Code Tracking и смотрю в моем юните(TelegaPI.Bot) на количество вызовов. Ознакомившись с этой сводкой - становится ясно - что больше всего вызовов происходит во время получения обновлений. Обновления от сервера получаю getUpdates. SetIsReceiving -метод, который в другом потоке в цикле проверяет обновления. Так что, если меня не устраивает нагрузка на ЦП - нужно обратить внимание на этот метод(SetIsReceiving, а точнее getUpdates, в котором вся логика работы)
  12. Прогоните прогу через профайлер, посмотрите где возникает нагрузка на процессор. Дальше либо сами оптимизируйте, либо просите помощи у народа
  13. Щас даже зайду в вк скачаю проект скину пример как было Вот unit ExelExporterModel; interface uses modelDB, ComObj, ActiveX, Variants, Windows, Messages, SysUtils, Classes; type TExelExport = Class private const ExcelApp = 'Excel.Application'; public Class Function ExelExist: Boolean; Class procedure SaveModel(Const Model: TModelDB; FileName: String); End; implementation uses FMXTee.Procs; { TExelExport } class function TExelExport.ExelExist: Boolean; var ClassID: TCLSID; begin // Ищем CLSID OLE-объекта Result := CLSIDFromProgID(PWideChar(WideString(ExcelApp)), ClassID) = S_OK; end; class procedure TExelExport.SaveModel(const Model: TModelDB; FileName: String); var Excel: Variant; Chart: TTeeExportData; I: Integer; begin Chart := TTeeExportData.Create; Excel := CreateOleObject('Excel.Application'); try Excel.DisplayAlerts := False; Excel.Workbooks.Add; Excel.Range['a1'] := 'Початок етапу'; Excel.Range['b1'] := 'Завершення етапу'; Excel.Range['c1'] := 'Назва етапу'; Excel.Range['d1'] := 'Кількість виконавців'; Excel.Range['e1'] := 'Керівник робіт'; Excel.Range['f1'] := 'Витрати'; for I := Low(Model.ETAP_NAMES) to High(Model.ETAP_NAMES) do Begin Excel.Range['a' + (I + 2).ToString] := Model.Works[I].Start; Excel.Range['b' + (I + 2).ToString] := Model.Works[I].Finish; Excel.Range['c' + (I + 2).ToString] := Model.ETAP_NAMES[I]; Excel.Range['d' + (I + 2).ToString] := Model.Works[I].CountExecutors; Excel.Range['e' + (I + 2).ToString] := Model.Works[I].PerformanceManager; Excel.Range['f' + (I + 2).ToString] := Model.Works[I].Expenses; End; Excel.ActiveWorkbook.SaveAs(FileName); finally Excel.ActiveWorkbook.Close; Excel.Application.Quit; Chart.Free; end; end; end.
  14. В общем, когда писал дипломку, тоже использовал работу с Экселем. Вы можете пользоваться так же как и в ВЦЛ"е. Я кажется с этого сайта брал инфу. Все прекрасно записывало и сохраняло в файл
  15. 1. Немного опиши для чего она нужна. 2. Добавь директивы {IFDEF Android} в местах, где используются чисто андроидные библиотеки
  16. Ну если следить за созданными объектами - то все нормально будет Разве фри паскаль не поддерживает многопоточность? Ну в остальном согласен
  17. Гитхаб: https://github.com/dimsa/ShadowEngine Скачать: https://github.com/dimsa/ShadowEngine/archive/master.zip Twitter: https://twitter.com/dimsa87 Игровой движок на FMX. Демо можете посмотреть на ютубе, ссылка в оригинальном описании. SO Engine (ShadowEngine) Delphi Firemonkey (FMX) Sprite Engine with Formatters, Animations, Collisions and etc. Some engine features you could watch on YouTube: CosmoRumba the Card Game: http://www.youtube.com/watch?v=k7TveCUHXCM Spaceship with Asteroids: https://youtu.be/w6lGasU61HQ Custom shaped Sprite. You could make parallax effect on Background Asteroids vs You: http://www.youtube.com/watch?v=veRTBIGUvNM Game from the Google Play (Android Market) Addictive game about confrontation of Humankind and Asteroids. Your aim is to avoid randomly moving asteroids. You can't shoot them. There are 3 modes: Story, Survival, Relax. In story mode level length is from 30 seconds to 2 minutes. Every next level is harder. In Survival new asteroid is spawned every 15 second. SO Engine Architecture and Features Overview With every commit it getting better! PS - хотел на 100+ в рейтинге выложить - но чуть опоздал)
  18. Кстати, если покажете как с моего примера, который выше, заменить XSuperObject на родную библиотеку JSON - буду очень благодарен
  19. Вот я, например, работаю с ТелеграмБот АПИ. У него есть свои типы данных(если их так можно назвать). К примеру тип User Когда вы запрашиваете какую то инфу с участием этого типа вам придет JSON с такими данными(в моем примере getMe): В "result" будет как раз этот тип "User". Что бы не парсить отдельно каждое поле я создал аналогичный класс в делфи: TTelegaUser = Class private FID: Integer; FFirstName: String; FLastName: String; FUsername: String; published /// <summary> /// Unique identifier for this user or bot /// </summary> /// <returns></returns> [ALIAS('id')] property ID: Integer read FID write FID; /// <summary> /// User‘s or bot’s first name /// </summary> [ALIAS('first_name')] property FirstName: String read FFirstName write FFirstName; /// <summary> /// Optional. User‘s or bot’s last name /// </summary> [ALIAS('last_name')] property LastName: String read FLastName write FLastName; /// <summary> /// Optional. User‘s or bot’s username /// </summary> [ALIAS('username')] property Username: String read FUsername write FUsername; End; И теперь могу заполнить данными с моего запроса приблизительно так*: FtelegUser := TTelegaUser.FromJSON(content); * - На самом деле у меня чуть подругому. * - При условии что в "content" у вас будет приблизительно такое содержание:
  20. rareMax

    LiveTile

    И FMX, и VCL. Вот кстати оно
  21. rareMax

    LiveTile

    Во времена Win8, согласно легенде, позволял добавить свою плитку в меню "пуск". У меня правда не получилось это сделать, но это совсем другая история
  22. Ну ладно... {$IFNDEF MSWINDOWS} {$ZEROBASEDSTRINGS OFF} {$ENDIF} И обращаю внимание что это только для проверки. Я код не видел - но скорее всего придется много переделывать для кроссплатформенности.
  23. Добавьте это {$ZEROBASEDSTRINGS ON} Инфа: http://docwiki.embarcadero.com/RADStudio/Seattle/en/Zero-based_strings_(Delphi)
  24. unit XSuperObject; interface uses Classes, Variants, SysUtils, Character, XSuperJSON, RTTI, TypInfo, {X}DB, Generics.Collections, {X}IdGlobal, {X}IdCoderMIME; Приходится линковать ИнДи в мой компонент, хотя я инди не использую. Впринципе не очень критично - но все же...
×
×
  • Создать...