Таблица лидеров


Популярный контент

Показан контент с высокой репутацией за 20.09.2018 в Сообщения

  1. 5 баллов
    ophion

    Записать картинку с камеры в BLOB

    Вот пример того, как писать и читать BLOB procedure SaveToFireDACBlob; var MemStream: TMemoryStream; begin FireDAC.Connected := True; MemStream := TMemoryStream.Create; try Image1.Bitmap.SaveToStream(MemStream); MemStream.Seek(0,0); FDQueryInsert.ParamByName('Media').LoadFromStream(MemStream,ftBlob); FDQueryInsert.ParamByName('MType').AsString := '0'; FDQueryInsert.ExecSQL(); except on e: Exception do begin ShowMessage(e.Message); end; end; MemStream.Free; FireDAC.Connected := False; end; procedure LoadFromFireDACBlob; var BlobStream: TStream; begin FireDAC.Connected := True; try FDQuerySelect.Open; FDQuerySelect.First; while(not FDQuerySelect.EOF)do begin // access a stream from a blob like this BlobStream := FDQuerySelect.CreateBlobStream(FDQuerySelect.FieldByName('Media'),TBlobStreamMode.bmRead); // access a string from a field like this if (FDQuerySelect.FieldByName('MType').AsString='0') then begin // load your blob stream data into a control ImageViewer.Bitmap.LoadFromStream(BlobStream); end; BlobStream.Free; FDQuerySelect.Next; end; except on e: Exception do begin //ShowMessage(e.Message); end; end; FireDAC.Connected := False; end; {источник http://www.fmxexpress.com/read-and-write-a-blob-field-using-firedac-with-firemonkey-on-android-and-ios/} Касательно работы с изменением качества/размера, считаю что необходимо использовать TBitmapSurface (unit FMX.Surfaces)
  2. 4 балла
    Если это свой компонент, то перекройте метод TControl.DoAbsoluteChanged и не забудьте вызывать базовый метод через inherited;
  3. 3 балла
    Автор: Максим Сысоев Репозиторий: BitBucket Связь со мной: Комментарии в этой теме, ЛС, Телеграмм Telega π - Библиотека для работы с Telegram Bot API в Delphi Если вы решили писать своих ботов для телеграмма - тогда предлагаю вам взаимопомощь: я вам полуготовое решение, а с вас предложения для улучшения, багрепорты. Помощь проекту Вы можете помочь проету: Созданием баг-репортов и запросов новых возможностей Рекламой проекта Жертвоприношения в виде денег Зависимости RAD Studio CE Примеры Получение 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
  4. 3 балла
    Brovin Yaroslav

    Встреча в Питере 11-го октября 2018

    Я буду, как обычно. На встрече дам попробовать демки, сделанные с библиотекой FGX Native.
  5. 2 балла
    Vitaldj

    Встреча в Питере 11-го октября 2018

    Уважаемые коллеги, 11-го октября 2018 года, в славном городе Санкт-Петербурге состоится встреча ценителей FMX и нашего любимого форума fire-monkey.ru. Встреча будет ближе к 19-00, место, предварительно «чердак» в районе Авроры. Кто точно знает, что появится, отпишитесь!
  6. 2 балла
    Barbanel

    переходпо ссылке с push уведомления

    Правильно ли я понимаю: вы пишете некое приложение, которое показывает пользователю веб-ссылку в уведомлении? Имхо: нельзя переходить на внешний ресурс, тапнув на ссылку в уведомлении. Всегда сначала нужно показать вашу программу, при этом в зависимости от логики программы - показать что именно пришло (чтобы пользователь мог понять полезное ли для него это сообщение), и только потом давать возможность переходить по внешним ссылкам.
  7. 2 балла
    kami

    сборка проекта с библиотеками

    Вы используете передачу небезопасных параметров между exe и dll? Зря.
  8. 2 балла
    dnekrasov

    сборка проекта с библиотеками

    В свойствах проекта укажите "Link with runtime packages = False"
  9. 2 балла
    WebPuper

    Механизм работы с APK Extension file (OBB)

    В FMX, насколько я смог удостовериться, нет нормальных директив чтобы работать с OBB. Видимо посчитали это излишним, т.к. по сути речь идет о работе с обычной файловой системой. После распаковки приложения в каталоге внешнего хранилища (карты или, если нет, внутренней памяти) Android/obb/<application ID>/ появится файл дополнений с расширением *.obb Это обычный архив ZIP и его можно распаковать, например, в GetDocumentsPath средствами TZipFile Проблема в том, что в FMX нет процедуры возвращающей путь к файлу obb. Пришлось написать костыль: UnicodeString GetObbFile() { UnicodeString str = StringReplace(System::Ioutils::TPath::GetPublicPath(), "/data/", "/obb/", TReplaceFlags()); str = StringReplace(str, "/files", "/", TReplaceFlags()); TSearchRec sr; FindFirst(str + "*.obb", faAnyFile, sr ); return str + sr.Name; } Теперь у вашего приложения есть путь к единственному obb
  10. 2 балла
    ENERGY

    Рабочее место для IOS разработки

    Имхо тогда уже лучше купить обычный ноут под Win с Intel и на нем запустить виртуалку. Это более универсальное решение. Мне решение с виртуальной машиной больше нравится, т.к в VMWare удобно создавать образы всей системы. Особенно это актуально перед обновление системы или Xcode. Не работает после обновления? Пару кликов и ты вернулся к рабочей версии. Ну или MacMini, тоже бюджетное решение.
  11. 2 балла
    В начале пару новостей: Репозиторий клонируется также на ГитХаб. Можно устанавливать с помощью 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
  12. 1 балл
    fidel42rus

    переходпо ссылке с push уведомления

    Всем привет) Ситуация следующая, написал сервер на php, написал программу в delphi 10.2 tokyo, пуши выводит как надо, но не могу понять как сделать чтобы при нажатии на push уведомление осуществлялся переход по заданному URL, а не в само приложение. перелистал множество сайтов но толком ничего не нашел. Delphi не совсем моя среда, язык легкий, но обьемный не смог сам разобраться. Прошу вашей помощи. Если кому-то помогу скину скрипты php сервера, количество клиентов не ограничено.
  13. 1 балл
    Так мне и нужно событие изменения позиции (если оно существует). И в нем считать все что нужно. Если, скажем я напишу MyComponent.Height:=Random(1000); то отработает procedure Resize; override; моего компонента. И тут можно отреагировать на измнение размера. Вопрос в том, есть ли аналогичная процедура для реакции на MyComponent.Position.X:=Random(1000);
  14. 1 балл
    Равиль Зарипов (ZuBy)

    Освобождение памяти TListViewItem

    В Берлине и ниже метод Clear не чистил за собой и правильно будет чистить циклом как в примере выше Это справедливо только когда данные в ЛВ перезаполняются
  15. 1 балл
    ENERGY

    Освобождение памяти TListViewItem

    Это неверно. Все TListViewItem корректно уничтожаются и освобождаются в Clear. Чтобы это проверить, достаточно поставить точку останова на TListItem.Destroy; А предложенный вами код это очень не оптимизированное и медленное решение, с перерассчетом всех индексов при каждом удалении айтема.
  16. 1 балл
    rareMax

    Как сделать плиточное меню в приложении?

    ModernListView GridLayout(в названии мог ошибиться) Либо на скроллБокс кидаешь нужные тебе компоненты.
  17. 1 балл
    Так происходит потому что вы делаете проверку с помощью ShowMessage. При этом панель теряет фокус и любое движение мыши над ней снова вызывает OnMouseEnter. Проверяйте так: добавьте на форму компонент TText и в обработчике панели OnMouseEnter напишите: text1.Text:=text1.Text+#13+'asdasd'; Вы увидите, что событие срабатывает корректно
  18. 1 балл
    В конце концов получилось исправить. Для interlaced гифок проблема была вообще пустяковая. Одна строчка не в том месте. А вот для optimized все оказалось несколько сложней, но в итоге теперь все гифки отображаются правильно. Пользуйтесь на здоровье! FMX.GifUtils.zip
  19. 1 балл
    Первый вариант нового компонента TfgCollectionView имеющий потрясающие возможности по гибкому созданию любого списка. Гибкий, как FMX TListBox и гораздо быстрее TListView. Создавайте любое количество стилей отображения элементов списка из любых компонентов FGX. А затем просто связывайте, какой стиль должен использовать тот или иной элемент списка. На приведенном ниже скриншоте и видео, вы можете наблюдать прокрутку списка из 100 элементов, написанного без единой строчки кода. Но это еще не все, полностью каркасная архитектура компонента позволяет создавать различные варианты размещения элементов. Начиная от отображения в строку, в столбец, по сетке и заканчивая своим кастомным размещением элементов. Поразительная скорость работы достигается за счет отображения только видимых элементов. Screenrecorder-2018-03-26-01-52-41-383.mp4
  20. 1 балл
    kami

    Передача параметра программе

    Есть волшебная аббревиатура - IPC. Inter process communication. Считайте, что у вас два разных приложения.Абсолютно разных. Которым нужно взаимодействовать друг с другом. Одно - источник, второе - приемник. Среди вариантов для Windows: 1. Через сообщения, например - WM_COPYDATA (емнип, так обзывается). Нужно знать хендл окна, которому отправится сообщение (не уверен, что с WM_COPYDATA пройдет фокус с функцией BroadcastMessage) и нужно чтобы целевое приложение было на том же уровне изоляции (UIPI, кажется). Т.е. если приемник запущен от админа, а источник - как обычное приложение - этим способом их не состыковать. 2. Через NamedPipes. Способ хорош для организации постоянного обмена между двумя любыми приложениями на одном компьютере (не только, но чаще всего - на одном). Для однократной передачи информации держать слушающий пайп в отдельном потоке, наверное, избыточно. Хотя я бы взял именно этот способ. 3. TCP/IP и надстройки над ним: http, ftp и другое tp. Чаще всего используются для организации обмена между приложениями на разных компьютерах. Для локального - избыточно, да и проблемы с файрволлом могут быть. 4. Через файловые потоки или данные в файле подкачки. Одно приложение пишет, второе периодически смотрит "а не появилось ли для меня чего нового". Как-то делал даже двусторонний обмен данными по этому механизму. Это навскидку. Выбирайте, потом можно говорить дальше.
  21. 1 балл
    Равиль Зарипов (ZuBy)

    StatusBar Color

    попробуйте последнюю версию
  22. 1 балл
    На этот модуль то я внимание обратил, но мне необходимо реализовать следующие действия: 1) После нажатия на кнопку открывается галерея картинок (или другое приложение для открытия картинок), пользователь выбирает файл; 2) После выбора файла в моем приложении появляется его миниатюра и файл методом POST отправляется на upload сайта. Так вот чтобы отправить файл мне необходимо вывести полный путь к этой картинки из галереи которую выбрал пользователь. Т.е. вот тут нужно вставить полный путь этого самого Image (TBitmap) которое возвращает TakePhotoFromLibraryAction1DidFinishTaking: Fileweb:=TIdMultipartFormDataStream.Create; Fileweb.AddFile('qqfile',Путь к файлу); Fileweb.AddFormField('subaction','upload'); Response:= Form1.IdHTTP1.Post(SiteUrl + 'engine/ajax/upload.php',Fileweb); Fileweb.Free;
  23. 1 балл
    Ух... БОЛЬШОЕ ВСЕМ СПАСИБО. Залил в консоль приложение для получения пушей без GET_ACCOUNTS, заодно убрал READ_PHONE_STATE. Без READ_PHONE_STATE пуши приходят нормально... Приложение готово к публикации. Сейчас опубликую - получу отказ от гугла, и буду высылать им разрешающий документ... Со стороны выглядит полным маразмом... Неужели в консоли не могли предусмотреть раздел где можно было бы сразу перед публикацией прикрепить разрешающий документ? Очень странно это все выглядит у гугла, представляю что твориться в магазине apple - две мега корпорации для разработчиков - все для людей... P.S. Автору форума - памятник при жизни! Спасибо.
  24. 1 балл
    Barbanel

    При LongTap срабатывают и OnTap и OnClick

    У изображения нужно настроить на какие жесты он реагирует. Кинь на форму TGestureManager, потом настрой поля как показано ниже в коде. OnClick - срабатывает при касании объекта, срабатывает и в виндовс и на мобильных устройствах. OnTap - срабатывает несколько интеллектуальнее, причем только на мобильных устройствах (в виндовс не срабатывает). Упрощенно, он срабатывает только если ты коротко тапнул на контрол, если ты нажал на контрол и повел пальцем, скроля контент или скроля родительский ScrollBox, OnTap НЕ сработает. // инициализация Image.Touch.GestureManager := gestManager; Image.Touch.InteractiveGestures := [TInteractiveGesture.LongTap]; Image.OnGesture := FormGesture; .. // обработка жеста procedure TfrmMain.FormGesture(Sender: TObject; const EventInfo: TGestureEventInfo; var Handled: Boolean); begin case EventInfo.GestureID of igiLongTap : begin DoSomething(); end; end; end;
  25. 1 балл
    ruslan

    Освобождение памяти TListViewItem

    при Add тебе возвращается указатель(!) на новый итем. смотри TListViewItems.AddItem(Index: Integer) в FMX.ListView в TListViewItems.Delete(Index: Integer) вызывается FreeAndNil итема а вот в TListViewItems.Clear просто чистится TList<TListViewItem>. как известно TList это просто список указателей. так что сама память при ListView.Items.Clear как я понимаю не освободится. как альтернатива: while ListView.Items.Count > 0 do ListView.Items.Delete(0);
Эта таблица лидеров рассчитана в Москва/GMT+03:00