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


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

Показан контент с высокой репутацией за 13.10.2018 во всех областях

  1. 4 балла
    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. 3 балла
    У меня большая просьба: вместо кучи маленьких сообщений, которые вы пишете буквально одно за другим, составьте одно, в которое напишите всё то, что хотели сказать. Это не чат, где "кто в онлайне - прочитали, остальным пофиг". Это форум. И искать зерна истины в этой портянке из мимолетных мыслей как минимум неудобно.
  3. 2 балла
    что то типа этого
  4. 2 балла
    я так понимаю должен открыться выбор файла? ну на андройде логику выбора файла придется реализовывать самому... стандартного нет
  5. 2 балла
    Евгений Корепов

    Реализовать рейтинг

    Вместо рисования звезды в TPath, проще использовать соотвествующий символ юникода. Char($2606) // Не закрашенная звезда Char($2605) // Закрашенная звезда https://unicode-table.com/ru/sets/stars-symbols/ Можно даже для еврейский магазинов сделать рейтинг 😉
  6. 2 балла
    Автор: Максим Сысоев Репозиторий: 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
  7. 2 балла
    Нет. Название Java пакета не поддерживает "-" в названии. Только латинские буквы в нижнем и верхнем регистрах, числа и '_'. https://developer.android.com/guide/topics/manifest/manifest-element?hl=ru#package
  8. 1 балл
    Tot999

    TPaintox+Tbitmap

    Добрый день! Решил покопаться в своей старой спрайтовой игрушке, чтобы освежить в памяти знания и состряпать что-нибудь новое. Возникли сомнения, нормально ли сделано графическое отображение, можно ли доработать. Все спрайты в дизайнтайме распиханы по Timagelist-ам. На старте приложения я загружаю битмапы из имэджлистов в свои обджектлисты, подгоняя под нужный размер. MeduzasBitmpAr : array [1..numofMeduzas] of TObjectList<Tbitmap>; Дальше рисую по таймеру в основном окне игры Tpaintbox.OnPaint: В принципе, даже на слабеньких телефончиках, всё вроде бодро. Но может, опытные товарищи чего подскажут, а то я 3ий день в собственном соку варюсь, ничего толкового.
  9. 1 балл
    Zyablik3000

    Компонент - наследник TPresentedScrollBox

    Всем спасибо) Решение нашел сам. Прочитав http://yaroslavbrovin.ru/new-approach-of-development-of-firemonkey-control-control-model-presentation-part-1-ru/ и другие материалы с этой странички (к слову: жутко полезная информация) перекрыл в своем компоненте функцию function DefinePresentationName: string; override; function TScrBox.DefinePresentationName: string; begin Result:='PresentedScrollBox-style'; end; Дело оказалось в том, что не загружалась презентация для моего компонента (а модель создавалась), точнее пыталась загрузиться презентация 'ScrBox-style', прокси для которой не зарегистрирован. Ведь имя презентации формировалось как 'Имя класса' + '-style' Но этого оказалось недостаточно. Еще понадобилось задать свойство StyleLookup:='scrollboxstyle'; т.к. скроллбары и прочие контролы берутся из стиля TStyledCustomScrollBox'а, который описан в FMX.ScrollBox.Style. Надеюсь кому-то поможет, и этот кто-то не будет как я тратить на решение этой задачи три дня жизни. Test.7z
  10. 1 балл
    спасибо, и в правду так проще, возвращаюсь назад в будущее )
  11. 1 балл
    Евгений Корепов

    Raise убивает программу для Android

    Просто возьмите это под свой контроль - не используйте встроенный SearchBox, а создайте отдельное поле TEdit, а фильтрацию обрабатывайте руками. TListViewFilterEx = record Category : String; Name : String; Cart : String; end; procedure TFormMain.SearchBoxChangeTracking(Sender: TObject); begin Setting.Filter.Name:=SearchBox.Text; ListViewFilterEx(ListViewAction, Setting.Filter); LoadVisibleListViewItem(ListViewAction); end; procedure TFormMain.ListViewFilterEx(AListView : TListView; AFilter : TListViewFilterEx); begin AListView.Items.FilterEx:= function(X: TListItem): Boolean begin Result:= (AFilter.Category.IsEmpty or TListViewItem(X).Data['Category'].AsString.ToLower.Contains(AFilter.Category.ToLower)) And ((AFilter.Name.IsEmpty or TListViewItem(X).Data['Name'].AsString.ToLower.Contains(AFilter.Name.ToLower)) or (AFilter.Name.IsEmpty or TListViewItem(X).Data['Detail'].AsString.ToLower.Contains(AFilter.Name.ToLower))); end; end; procedure TFormMain.LoadVisibleListViewItem(const AListView : TListView; ATopItemIndex : Integer = -1); Var LTopItemIndex, I : Integer; begin if Setting.Flags.ListViewActionLoaded then begin if ATopItemIndex=-1 then LTopItemIndex:=GetListViewTopItemIndex(AListView) else LTopItemIndex:=ATopItemIndex; for I := LTopItemIndex to LTopItemIndex + LoadVisibleListViewItemCount do if I<=AListView.ItemCount-1 then begin AListView.Adapter.ResetView(AListView.Items.Item[I]); end; end; end; Суффикс Ex в AListView.Items.FilterEx игнорируйте, используйте AListView.Items.Filter. Это я для нормального поиска (по всем полям и Data, а не только по Text) переписывал исходники ListView... С таким кодом возможно у вас будет больше возможностей для перехвата исключения. Ну или игнорирования поиска пока работает скролл ListView.
  12. 1 балл
    Если вы прибыли к нам из 1991 года и собираетесь использовать это приложение в прошлом тысячелетии - тогда все нормально. Если же вы наш современник - уберите из приложения и страницы все экзотические кодировки. Только UTF-8, только хардкор! AResponseInfo.ContentEncoding := 'utf-8'; AResponseInfo.ContentType := 'text/html; charset=utf-8'; AResponseInfo.ContentLanguage := 'ru'; AResponseInfo.CharSet := 'utf-8'; При формировании содержимого страницы - формируйте как есть, без перекодирования в экзотику.
  13. 1 балл
    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
  14. 1 балл
    haword

    Не открывается меню загрузить файл в android

    а в хроме такое прокатывет на андроиде? если да скорее всего у ПО нет доступа к файловой системе. В андроиде выше 5 надо спрашивать на это дополнительно у пользователя.
  15. 1 балл
    Мне очень неудобно, что я не обновил статью. На самом деле с этой библиотекой произошло очень много изменений с проектом: - переехал на битБакет: https://bitbucket.org/RareGods/cloudapi/src/master/ - теперь там не только работа с телеграмом, но и другие сервисы - после выхода Delphi CE позволил себе вырезать работу с сетевыми библиотеками, отличными от System.Net. - пофиксил больше багов чем добавил. На вскидку это все. На вопросы оперативно отвечаем в телеграм-чате : @CloudAPI.
  16. 1 балл
    Barbanel

    Размеры формы на разных устройствах

    Этот код был на этом форуме. Смотрите переменную sScale if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenService)) then begin sScreenSize := ScreenService.GetScreenSize.Round; sScale := ScreenService.GetScreenScale; DeviceInfo.diScreenLogic := FloatS(sScreenSize.x) + ' x ' + FloatS(sScreenSize.y); DeviceInfo.diScreenPhis := FloatS(sScreenSize.x * sScale) + ' x ' + FloatS(sScreenSize.y * sScale); DeviceInfo.diScreenWidth := sScreenSize.x; DeviceInfo.diScreenHeight := sScreenSize.y; DeviceInfo.diScale := sScale; end; Одно из наших приложений, в архиве чуть побольше фоточек чтобы вы убедились что все действительно хорошо. Ну, заодно и критику от коллег смогу услышать)) PS. не обращайте внимания на язык, так задумано) приложение делается для школ Германии. Screens.zip
  17. 1 балл
    FGX Native никак не зависит от FMX. FMX используется, но только в IDE для реализации дизайнера. В рантайме же нет никаких зависимостей от FMX. Более того, платформа под андроидом реализована с 0 и использует собственную реализацию так называемого кода склейки активити джава кода с Делфи AppGlue и используется свой мост работы с джава кодом из делфи. Это позволяет полностью мне контролировать платформу и "не зависеть" от API FMX и Андроид RTL части. Но обратная стороная медали - это дополнительный объем работы по написанию всего этого. Я не знаком с этими компонентами. Но если они не используют FMX UI, то они должны работать без всяких проблем, так же, как работают и другие обычные не визуальные компоненты типа блютуса, компоненты доступа к базам, http коннекторов и тд. Используется одна активность и родная графика андроида через нативную канву Canvas. Каждая форма - это отдельная нативная вьюшка со всеми компонентами. Каждый компонент является нативным. Поэтому иерархия компонентов полностью нативная. OpenGL не используется. Поскольку скорости обычной канвы хватает для хорошей производительности типового андроид бизнес-приложения. Но не исключен вариант, что можно будет сделать расширение типа GLSurfaceView для встраивания контрола с OpenGL отрисовкой. Но пока об этом рано говорить. Все нативное. Поэтому на Андроиде все нативные контролы работают по общим принципам. Синхронизации кадров, обработка событий и тд. На текущий момент у меня нету поддержки OpenGL. Но текущая моя архитектура допускает внедрения OpenGL или в виде отдельного контрола аля TViewPort в FMX или же даже в виде отдельного типа формы. Но сейчас пока речь об этом не идет. На текущий момент гораздо важнее реализовать твердую основу и ее уже расширять.
  18. 1 балл
    Tumaso

    Переход на новую модель разрешений

    @Alex7wrt, устанавливают в том числе и новые пользователи на старых версиях андроида, и у них работает. minSdkVersion для этого. Что касается targetSDK, то этим значением приложение уведомляет операционку, что возможно будет использовать api вплоть до данной версии. targetSDK 27 пока не использовал, только 26, и все что надо работает. В самом коде делаю анализ текущей версии SDK, и в зависимости от нее возможно делаю дополнительные действия. Вот например, работа с правами: {$IFDEF ANDROID} // для Android 6+ требуется дополнительная работа с правами if TJBuild_VERSION.JavaClass.SDK_INT >= 23 then begin if (TAndroidHelper.context.checkSelfPermission( StringToJString(PERMISSION_FILE_READ) ) = TJPackageManager.JavaClass.PERMISSION_DENIED) or (TAndroidHelper.context.checkSelfPermission( StringToJString(PERMISSION_FILE_WRITE) ) = TJPackageManager.JavaClass.PERMISSION_DENIED) then begin // необходимо запросить разрешение на использование галереи LIsWaitPermissions := True; TAndroidHelper.Activity.requestPermissions( CreateJavaStringArray([PERMISSION_FILE_READ, PERMISSION_FILE_WRITE]), BUTTON_FILE ); end; end; {$ENDIF}
  19. 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;
  20. 1 балл
    В общем рабочее время подходит к концу - поэтому держи: Function SampleSendFile(Const Url, FileName: String): Boolean; var lHttp: THTTPClient; lSendData: TMultipartFormData; lResponse: IHTTPResponse; Begin lHttp := THTTPClient.Create; lSendData := TMultipartFormData.Create; try lSendData.AddFile('FileField', FileName); lResponse := lHttp.Post(Url, lSendData); Result := lResponse.StatusCode = 200; finally lSendData.Free; lHttp.Free; end; End;
  21. 1 балл
    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
  22. 1 балл
    Равиль Зарипов (ZuBy)

    Диалоговое окно MessageBox на Android

    Всё работает! Спасибо. А ещё, подскажите, как русифицировать? Или так и будет "Yes" - "No"? поправить cамому в файлике FMX.Consts.pas и положить рядом с проектом
  23. 1 балл
    ophion

    Диалоговое окно MessageBox на Android

    Используйте MessageDlg. На андроиде немного инная реализация, требующая добавления асинхронной процедуры обрабоки результатов, полученных от MessageDlg. Будет что-то вроде: MessageDlg('Удалить выбранный файл?', TMsgDlgType.mtConfirmation, mbYesNo, 0, procedure (const AResult: TModalResult) begin if (AResult=mrYes) then begin {тут обрабатываете результат нажатия кнопки "Yes"} end; end);
Эта таблица лидеров рассчитана в Москва/GMT+03:00