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


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

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

  1. 7 баллов
    Написал в XE10.1 простой модуль для вывода кривых на TImage в виде графика - есть возможность вывода столбцов для диаграмм, меток с надписями и прочей мелочи. В виде компонента не оформлял... Смысл: вводим массив точек - график сам подбирает область вывода чтобы влезли надписи и выводит с указанными параметрами и стилем кривые (имею в виду зависимости Y от X). Есть комментарии в коде - есть пример для тестов - см. проект https://github.com/willi-spb/arTrassing желательно тестирование, возможно я что-то упустил - сам модуль: https://github.com/willi-spb/arTrassing/blob/master/FMX.arCurveClasses.pas
  2. 5 баллов
    В конце концов получилось исправить. Для interlaced гифок проблема была вообще пустяковая. Одна строчка не в том месте. А вот для optimized все оказалось несколько сложней, но в итоге теперь все гифки отображаются правильно. Пользуйтесь на здоровье! FMX.GifUtils.zip
  3. 4 балла
    Andrey Efimov

    Описание Permissions

    Документация по студии. Например: Mobile Tutorial: Using Location Sensors (iOS and Android) в самом начале указано какие разрешения нужны для использования. Документация по Android: Manifest.permission; Normal permissions; Dangerous permissions and permission groups
  4. 3 балла
    Заменил одну кривую графика на функцию синуса: Код: вместо линейной функции точек: Lx:=-20; Ly:=0; for i :=0 to 300 do begin Larea.Curves.Last.Points.Add(TcvPoint.Create(i,Lx,Ly)); Lx:=Lx+2; Ly:=120+50*Sin(Lx*0.04); end; Видно, что для этой данной кривой выводятся не все значения точек, а только указанные...
  5. 2 балла
    krapotkin

    THTTPClient авторизация

    Конечно можно. А что такое "авторизоваться" ?
  6. 1 балл
    x11

    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", но я так и не понял, для чего он. Документации нет.
  7. 1 балл
    Кстати, обнаружилось еще пару багов в китайской либе для анимированных гифок... Вроде бы устранил. Вот листинг :
  8. 1 балл
    Barbanel

    Take photo without saving picture to gallery

    Аналогично) Была такая мысль, сделаю и выложу с просьбой потестить.
  9. 1 балл
    ENERGY

    Take photo without saving picture to gallery

    Если вы сделаете тестовое приложение, то могут все проверить. Я у меня сейчас жесткий дедлайн, ни на что не могу отвлекаться.
  10. 1 балл
    Barbanel

    Take photo without saving picture to gallery

    Я видел это решение, но у нас оно не заработало. Вернее, оно работало только в дебаге, стоило это же самое приложение запустить не из студии - фото не удалялось.
  11. 1 балл
    ENERGY

    Take photo without saving picture to gallery

    Я давно делал похожее решение. Я подсмотрел его на Stackoverflow для Java, т.к. это проблема Android intent, а не Delphi. Заключается оно в том, что нужно находить и удалять последнюю фотку из галереи. So the idea is here https://stackoverflow.com/questions/6390163/deleting-a-gallery-image-after-camera-intent-photo-taken and for Delphi: https://stackoverflow.com/questions/43021519/how-to-delete-an-image-from-android-gallery-after-camera-intent-photo-taken-with/ Read my comments with google translate and code:
  12. 1 балл
    kami

    Хук на клавиатуру

    Что может быть непонятно во фразе non-zero value из первоисточника? Скорее всего, возвращаемый результат интерпретируется как BOOL. У любого булеан-типа есть два значения: 0 = False, не 0 = True. Что там присваивают конкретные компиляторы для значения True - это их проблемы. Сравнение всегда ведется с нулем. Может да, а может и нет. Откуда вы знаете, какую логику заложили другие разработчики в свои хуки? Это исключительно их дело - считают ли они нужным
  13. 1 балл
    cuHttpClientSysNet1.Proxy:=TcuProxy.Create(EditHost.Text, EditPort.Value, EditUserName.Text, EditPassword.Text); попробуй так
  14. 1 балл
    Заметил что у подсветки особенно активно съезжает крыша если в листинге есть вызовы анонимных процедур. Там вообще все в гирлянду превращается. А компилятор при этом говорит что все хорошо.
  15. 1 балл
    Принцип работы такой: На форму кладете стандартный TImage Создаете экземпляр TGifPlayer Задаете свойство FGifPlayer.Image:=Image; где Image это лежащая на форме TImage Загружаете гифку FGifPlayer.LoadFromFile('D:\Embarcadero\Projects\ShareCode\FMX.GifUtils\GIF_Example.gif'); Запускаем проигрывание гифки FGifPlayer.Play; Вот код: unit UnitFormMain; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.GifUtils, FMX.Objects; type TFormMain = class(TForm) Image: TImage; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } FGifPlayer : TGifPlayer; end; var FormMain: TFormMain; implementation {$R *.fmx} procedure TFormMain.FormCreate(Sender: TObject); begin FGifPlayer:=TGifPlayer.Create(Self); FGifPlayer.Image:=Image; FGifPlayer.LoadFromFile('D:\Embarcadero\Projects\ShareCode\FMX.GifUtils\GIF_Example.gif'); FGifPlayer.Play; end; end. Вот демо проект во вложении: FMX.GifUtils.Demo.zip
  16. 1 балл
    Akad

    Тормозит выполнение таймера

    Есть смысл переходить с 10.2.2 на 10.2.3? Народ тут писал, что студия вылетать стала на ровном месте. А судя по чейнж логу ни одного серьёзного бага поправлено не было. Во-первых интервал в 1мс для таймера не достижим без специальной настройки ОС. Реально события будут приходить 10-23мс. И это при условии, что программа больше ничего не делает. Это не зависит от дельфи, а зависит от винды. Во-вторых "накладные расходы" таймера при таком обновлении - это основная статья расходов процессора. И вообще так писать - это просто жесть. Любая анимация - это 1000/60мс т.е. частота обновления среднестатистического монитора. И то лучше 1000/30 или 1000/25. Меньше плавности на чуть, зато будет реально работать. Если нужна не анимация, а рассчёт чего-то - это надо выносить в отдельный поток. Если речь идёт про андроид/яось, то кроме нескольких деталей в целом ситуация не меняется. Писать так нельзя.
  17. 1 балл
    Олег Игоревич

    MapView рушит приложение в Tokyo 10.2.3

    Отлично пуши исправили и карты заработали. 30831_rad_studio_10.2.3_android_push_notification_patch.ZIP
  18. 1 балл
    mazayhin

    SSDP for Android

    Как вижу, тут есть 3 варианта. 1. Взять обертки над SDK от fmxexpress (или сделать самому), и самому написать по примеру выше, но уже на delphi. 2. Найти подходящее на Java, скомпилировать в jar, создать обертку для delphi (Java2Op) и использовать уже ее. 3. Наверное, самый удачный вариант, т.к. все это чудо работает по UDP, самому на основе Indy реализовать в своей программе.
  19. 1 балл
    Обычно достаточно Close, но можно ещё Application.Terminate, MainActivity.finish или Halt(0)
  20. 1 балл
    Кривяков Виталий

    TUITabControl

    Добрый день! В теме про наш продукт http://fire-monkey.ru/topic/1519-1c-papyc-mobilnoe-prilozhenie-dlia-masterov-priemschiko/ меня просили поделиться исходным кодом компонента TabControl с поддержкой слайда табов пальцем. С удовольствием делюсь В составе архива сам компонент и пример его использования. FMXUI.zip
  21. 1 балл
    Равиль Зарипов (ZuBy)

    TListViewHorz

    Давно не хватало TListView в горизонтальной ориентации, например чтобы сделать вот такую картинку zairkz сделал стиль с применением 9-patch png "технологии" С помощью жестов показано как сделать "сквозной скрол" как писал dreamix P.S. по компоненту TListViewHorz, не успел все протестить как следует со всеми параметрами не правильно будет отображаться Header'ы и Поиск, основной функционал сохранен UPDATE: LVStyledhorz.7z
  22. 1 балл
    DirtyBorov

    MaskEdit

    Случилось так, что потребовался мне ввод номера телефона. Компонента, аналога TMaskEdit в FMX нет, так что пришлось "изобретать на коленке". Компонент писать было лень, потому просто покажу как я решил это в конкретном диалоге с использованием TEdit. Может кому то пригодится. Из кода я убрал все лишнее, оставил только то что относится к делу. uses .... System.MaskUtils, System.Character; type TFormRegistry = class(TForm) edtPhone: TEdit; procedure edtPhoneValidating(Sender: TObject; var Text: string); procedure edtPhoneKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); procedure FormCreate(Sender: TObject); procedure edtPhoneEnter(Sender: TObject); procedure edtPhoneTyping(Sender: TObject); private const Mask = '+7(000)000-00-00;0;*'; /// '+0(000)000-00-00;0;*' - для других стран, например для Украины +3(999).... private PhoneNumber: string; function GetCaretPos: Integer; function GetMaxLength: integer; public end; procedure TFormRegistry.FormCreate(Sender: TObject); begin edtPhone.Text := FormatMaskText(Mask, PhoneNumber); end; function TFormRegistry.GetCaretPos: Integer; var i: integer; begin Result := 0; for i := 0 to Mask.Length-1 do begin if not (MaskGetCharType(Mask, i) in [mcDirective, mcMask]) then Result := Result + 1; if (Result + PhoneNumber.Length) = i then Break; end; Result := Result + PhoneNumber.Length - 1; end; function TFormRegistry.GetMaxLength: integer; var i: integer; begin Result := 0; for i := 0 to Mask.Length-1 do if (MaskGetCharType(Mask, i) in [mcMask]) then Result := Result + 1; end; procedure TFormRegistry.edtPhoneKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); begin if (Key = 8) and (PhoneNumber.Length > 0) then PhoneNumber := Copy(PhoneNumber, 1, PhoneNumber.Length-1) else if (PhoneNumber.Length < GetMaxLength) and (Key = 0) and IsDigit(KeyChar) then PhoneNumber := PhoneNumber + KeyChar else KeyChar := #0; end; procedure TFormRegistry.edtPhoneEnter(Sender: TObject); begin edtPhone.CaretPosition := GetCaretPos; end; procedure TFormRegistry.edtPhoneTyping(Sender: TObject); begin edtPhone.CaretPosition := GetCaretPos; end; procedure TFormRegistry.edtPhoneValidating(Sender: TObject; var Text: string); begin Text := FormatMaskText(Mask, PhoneNumber); end; end.
  23. 1 балл
    Brovin Yaroslav

    Unsupported media file

    На официальном сайте написано: нет, на все популярные платформы
  24. 1 балл
    Axbor

    Как нарисовать круглый TImage

    Сверху Image ставит еще один Image с изображением края четырехугольника центр которого прозрачен в виде круга...
  25. 1 балл
    Не за что. Если что спрашивай. XML формат мне всегда был противен, хоть и понятен, но все равно внутренне я был против него и как следствие принципиально не использовал в своих программах. Но вот формат JSON мне очень понравился. Его легко написать от руки, легко читать, даже через регулярки парситься легко, если приспичило. И он не избыточен как XML, а значит по канала связи передается меньше трафика. Так что не бросай этот формат И кстати, что касается утечек. Я когда сам только начинал разбираться в формате JSON и с тем как работать с ним в Delphi, у меня тоже были утечки, ибо я использовал JSON для парсинга ответа с сервера, в потоке. Я тогда начал склоняться к всеобщему мнению что просто сама реализация работы с этим форматом в делфи кривая. Но поколебавшись все таки принял во внимание ту мысль, что разработчики Embacadero на девять жизней умнее меня, и вряд ли они выпустили модуль с таким явным глюком. И решил все таки углубиться дальше. Как оказалось просто поставить JS.Free в конце не достаточно. Т.е. вот так вот делать не стоит: var JS: TJSONObject; begin s := '{"jsonString":"ok"}; JS := TJSONObject.ParseJSONValue(s) as TJSONObject; ShowMessage(JS.GetValue('jsonString').Value); JS.Free; end; В процессе работы потока с ним может случиться все что угодно - обрыв связи, тайоут сработает, или некорректные данные, или еще что нибудь. И JS объект может не освободиться. Т.е. поток может уже и не существует, но в оперативке созданный объект лежит. К тому же при таком подходе могут быть и ошибки, например параметра 'jsonString' может и не быть, и все вывалиться в ошибку (но в потоке этого можно и не увидеть) и до JS.Free код никогда не дойдет. А значит будет опять утечка памяти. Так что правильней всего делать через Assigned: var JS: TJSONObject; begin s := '{"jsonString":"ok"}'; JS := TJSONObject.ParseJSONValue(s) as TJSONObject; if Assigned(JS) then begin ShowMessage(JS.GetValue('jsonString').Value); JS.Free; end; end; Тогда утечек не будет. Это я теперь точно знаю!)))
Эта таблица лидеров рассчитана в Москва/GMT+03:00