Перейти к содержанию

Лидеры


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

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

  1. 2 балла
    Задача любой синхронизации - не дать разным потокам одновременно изменять данные. Можете себе представить принтер, на который печатают несколько человек. Если не выстроить их в очередь, то результат вам не понравится. Ровно так же и с объектами программы. Если к ним есть доступ у нескольких потоков, то результат взаимодействия почти гарантированно приведет к ошибке программы. Synchronize ставит действие в очередь на ожидание главного потока. Как только тот освобождается, он выполняет это действие и оба потока идут дальше. Главный - своей дорогой, вызвавший Synchronize - своей. Достаточно просто запомнить - экран - один, вызов только через синхронизацию. Более полное объяснение заповедей многопоточного программирования несложно найти в сети)
  2. 2 балла
    qz5

    Публикация приложения на Google Play

    вот инструкция на английском, с картинками - http://docwiki.embarcadero.com/RADStudio/Rio/en/Submitting_Your_Android_App_to_Google_Play
  3. 2 балла
    Bytes:=TEncoding.UTF8.GetBytes(Memo1.Lines.Text); BytesStream:=TBytesStream.Create(Bytes); try HTTPResponse:=FHTTPClient.Post('https://securepay.tinkoff.ru/v2/Init', ByteStream); ..... finally BytesStream.Free; end
  4. 2 балла
    slav_z

    Rio 10.3. Выделение текста в TText

    минимальный код: unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.UIConsts, System.Classes, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Objects, FMX.TextLayout; type TForm1 = class(TForm) Text1: TText; procedure Text1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); procedure Text1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); procedure Text1Painting(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); procedure FormCreate(Sender: TObject); private Range: TTextRange; function TextLayout: TTextLayout; public function GetSelectedText: string; end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); begin Text1.AutoCapture:=True; end; type TTextAccess = class(TText); function TForm1.TextLayout: TTextLayout; begin Result:=TTextAccess(Text1).Layout; end; function TForm1.GetSelectedText: string; begin Result:=Text1.Text.Substring(Range.Pos,Range.Length); end; procedure TForm1.Text1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); begin Range.Pos:=TextLayout.PositionAtPoint(PointF(X,Y)); Range.Length:=0; Text1.Repaint; end; procedure TForm1.Text1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); begin if Text1.Pressed then begin Range.Length:=TextLayout.PositionAtPoint(PointF(X,Y))-Range.Pos; Text1.Repaint; end; end; procedure TForm1.Text1Painting(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); begin Canvas.Fill.Color:=claSilver; Canvas.Fill.Kind:=TBrushKind.Solid; for var R in TextLayout.RegionForRange(Range,False) do Canvas.FillRect(R,0,0,AllCorners,1); end; end. textselected.zip
  5. 2 балла
    krapotkin

    Отрисовка прямоугольника.

    Если вы хотите на чем-то рисовать, не надо портить стены, возьмите бумагу, холст там.. Специально придуман PaintBox именно для ваших целей. Но для демо ровно то же самое вместо PaintBox.OnPaint сделал на Form.OnPaint Работает одинаково, на windows и android. Уверен, что ровно так же все будет на всех остальных ОС. type TForm1 = class(TForm) procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); procedure FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); private FCrd: TPointF; public end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); begin FCrd := PointF(X,Y); end; procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); begin Invalidate; end; procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); begin Canvas.Fill.Color := TAlphaColorRec.Wheat; Canvas.FillRect(rectf(FCrd.X, FCrd.Y, FCrd.X+100, FCrd.Y+100), 0,0,[], 1); end; там в проекте еще дофига разных странных решений и ошибок. Но это уже оффтоп...
  6. 2 балла
    krapotkin

    Отрисовка прямоугольника.

    потому что нельзя рисовать где попало когда захочется есть событие OnPaint - его и используйте
  7. 2 балла
    Игорь Маринин

    EnCore! караоке плеер

    линукс версия: http://encore.su/download/EnCoreLinux.zip правда пока это баловство ) кучу костылей пришлось лепить что бы запустить как-то..
  8. 1 балл
    krapotkin

    Проигрывание файлов mp4

    Из бесплатных видимо его. Больше ничего не попадалось очевидного. Есть решения типа ffvcl но я не знаю, работают ли они на FMX Думаю, не только в делфи нет. Windows в этом плане отстой. Без спецтехники не заведешь. Хуже всего, что нельзя быть ни в чем уверенным. Если в одном месте работает, то в другом не станет.
  9. 1 балл
    procedure TForm1.ListViewUpdateObjects(const Sender: TObject; const AItem: TListViewItem); begin TListItemText(AItem.Objects.FindDrawable('Detail')).Width:=Ваша ширина; end;
  10. 1 балл
    slav_z

    MSacc проблема с подключением

    для начала попробуйте настроить подключение через мастер подключения в designtime... когда получится... откройте форму как текст (fmx) и посмотрите что там и как указано для подключения... повторите то же самое в runtime...
  11. 1 балл
    Есть приложение, написанное ещё в RAD Studio 10.3 и мигрировавшее на 10.4. При миграции на 10.3.3 у приложения просто исчезла возможность отправлять уведомления. TNotificationCenter на macOS выдавал ошибку AccessViolation, в то время как на Windows всё работало отлично, уведомления приходили, никаких проблем. Спустя какое-то время, приложение мигрировало на RAD Studio 10.4, где переписали компонент TNotificationCenter и исправили баг в Macapi.Foundation (что позволило адекватным способом отправлять уведомления напрямую через Cocoa). Но теперь вылезла другая проблема - формы с компонентом TNotificationCenter стали падать, даже не доходя до события OnCreate с ошибкой в консоли PAServer 2020-07-21 01:05:06.361 AErenderLauncher[11672:433325] *** Assertion failure in +[UNUserNotificationCenter currentNotificationCenter], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UserNotifications/UserNotifications-279/UNUserNotificationCenter.m:47 2020-07-21 01:05:06.362 AErenderLauncher[11672:433325] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'application bundle identifier for LSApplicationProxy with bundle identifier (null)' То есть, как я поняла, проблема именно в компоненте TNotificationCenter, который стал фаталить всю прогу. Убрала этот компонент со всех форм, ограничила его {$IFDEF MSWINDOWS} в коде - прога стала прекрасно запускаться на macOS. Тут уже у меня возникли некоторые вопросы, потому что в новых приложениях такой ошибки не возникало (там возникала другая, что TNotificationCenter не может спросить разрешения у системы на отправку уведомлений). Решила я найти способ, как можно отправлять уведомления напрямую из Cocoa, и нашла следующий код на Swift @IBAction func sendNotification(_ sender: Any) { let notification = NSUserNotification(); notification.title = "Notification Title"; notification.subtitle = "Foo Bar"; notification.informativeText = "Very informative. Such notification!"; notification.soundName = NSUserNotificationDefaultSoundName; let notificationCenter = NSUserNotificationCenter.default; notificationCenter.deliver(notification); } Перепишем на Object Pascal, получим procedure TMainForm.Button1Click(Sender: TObject); begin var ANotification: NSUserNotification := TNSUserNotification.Wrap(TNSUserNotification.Alloc.init); ANotification.setTitle(StrToNSStr('Notification Title')); ANotification.setSubtitle(StrToNSStr('Foo Bar')); ANotification.setInformativeText(StrToNSStr('Very informative. Such notification!')); ANotification.setSoundName(NSUserNotificationDefaultSoundName); var ANotificationCenter: NSUserNotificationCenter := TNSUserNotificationCenter.Wrap(TNSUserNotificationCenter.OCClass.defaultUserNotificationCenter); ANotificationCenter.deliverNotification(ANotification); end; И в результате имеем ту же самую проблему - во всех новых приложениях данный код работает, как надо (и разрешение на отправку уведомлений приходит, и уведомления отправляются, даже запланированные работают), а в основной программе, что долго гуляла по студиям - тишина, вообще ничего не происходит, даже ошибок никаких нет. То есть, код выполняется, но абсолютно безрезультатно. Скажите пожалуйста, с чем это может быть связано? macOS Catalina 10.15 / PAServer 21.0 / RAD Studio 10.4
  12. 1 балл
    синхронная концепция вызова и синхронизация потоков не имеют ничего общего то, что программа не пойдет дальше, пока не закончится POST, никак не отменяет того, что вызовы экранных компонентов должны происходить только в главном потоке поэтому TThread.Synchronize
  13. 1 балл
    slav_z

    MSacc проблема с подключением

    зачем у вас тут нетипизированные параметры? сделайте два разных метода и не будет такой каши. function bdconected(s2:string;s1,s{,sd}: TObject): string;
  14. 1 балл
    нет не следует там написано, "если вы хотите получать данные прямо в процессе их получения, вместо того чтобы ждать когда скачается всё до конца..." ну собсно, да, можно из того же стрима их забирать в событии OnReceiveData, но зачем вам неполный json ?? это же не звук, не видео, которые можно сразу на экран выводить, не дожидаясь всего кино... но при этом это будет происходить независимо, опять же в другом потоке. ваш поток, где вы вызвали Post, будет ждать окончания загрузки. Асинхронно это будет только через BeginPost
  15. 1 балл
    Вся эта процедура в моем коде запущена в отдельном потоке через TTask.Run(). (кстати - асинхронно! т.е. сначала скорее всего выполнится до конца FormCreate а потом запустится run) Поэтому доступ к визуальным компонентам должен быть только через синхронизацию. Для этого вывод в memo обернут в TThread.Synchronize(); Далее. В этой форме POST второй параметр - стрим, данные из которого мы передаем на сервер, а третий - стрим, куда придет результат. Так как мы знаем, что туда и обратно будет ходить текст, то и выбираем TStringStream, как самый подходящий. Т.е. в stRes нас будет ждать результат. Такой же как и в R.ContentAsString Если вы хотите отслеживать (track) процесс получения данных, то можно повеситься на OnReceiveData там будет сообщаться сколько байт уже скачано, сколько всего планируется скачать. В этом обработчике можно сделать обновление progressBar, тоже через синхронизацию. Предполагается, что у вас там хотя бы сотни килобайт данных, иначе сомневаюсь, что этот обработчик хоть раз сработает. Ловить окончание с его помощью точно не нужно ) Все процессы обмена обычно делятся на синхронные и асинхронные. Синхронные - программа дальше не идет, пока не выполнится эта строчка. Асинхронные - команду отдали и пошли дальше. В этом случае обычно задается кусок кода, который выполнится по окончании процесса. THttpClient имеет оба вида вызовов. Обычные синхронные Get, Post и т.д. Асинхронные - BeginGet, BeginPost и т.д. http://docwiki.embarcadero.com/Libraries/Rio/en/System.Net.HttpClient.THTTPClient_Methods Обычно кроме самого вызова происходит еще много всяких вещей, которые я выношу в отдельный поток, поэтому всегда использую синхронные методы. Если вы будете это делать из главного потока, то можно использовать асинхронные. Вопрос удобства и архритектуры. Но говорить, что "что там, фигня, один маленький запросик" нельзя. Если сервер недоступен, не отвечает, плохая связь и т.д., ваша программа тупо зависнет сек на 30. Несколько раз так зависнет, а потом Андроид предлагает удалить ее с устройства, т.к. в ней баги и вообще она плохая. Пользователи не очень любят такое))
  16. 1 балл
    Maximus

    Ошибка E2512 Type parameter 'TArgument' must be a non-nullable value type

    Сломали они вторым патчем ограничения с записями. Либо откатывать его, либо убирать ограничения https://quality.embarcadero.com/browse/RSP-30073 Видимо хотели починить это https://quality.embarcadero.com/browse/RSP-28761
  17. 1 балл
    код приложен, запускайте и играйтесь до просветления
  18. 1 балл
    httpDemo.7z вот демо работает одинаково на Windows и Android
  19. 1 балл
    это зависит от того, кто программировал этот сервер) но вы же ему по сути передаете "отвечай как хочешь". и первый в списке html
  20. 1 балл
    нормально у меня работают и Get и Post и кодировка нормально принимается. вам нужно проверить, что же реально уходит на сервер для этого есть эхо сервера например https://docs.postman-echo.com либо направить на любой свой сервер, сделать неск строк скрипт на PHP который покажет все заголовки и контент, который он получил Совершенно непонятно, для чего тут TBytesStream, TStringStream работает абсолютно прозрачно (под капотом ессно то же самое) Ну и делать общение с сервером в главном потоке - странное занятие конечно
  21. 1 балл
    Евгений Корепов

    Изменить ширину скроллбара

    Ширина задана в исходных кодах константой.
  22. 1 балл
    и ручками править хрупкую структуру - нунах... там у тебя json, проверяй валидность json json:=TJSONObject.ParseJSONValue(Bytes, 0);
  23. 1 балл
    Алексей Воронин

    DevExpress для FMX

    https://community.devexpress.com/blogs/vcl/archive/2020/07/22/devexpress-fmx-grid-ctp-available.aspx
  24. 1 балл
    Slym

    VertScrollBox под IOS - баг с прокруткой

    procedure TForm1.CalcContentBounds(Sender: TObject; var ContentBounds: TRectF); begin TCustomScrollBox(Sender).AniCalculations.BoundsAnimation:=(TCustomScrollBox(Sender).Size.Height<ContentBounds.Height); end;
  25. 1 балл
    Под Virtualbox мне так и не удалось получить рабочую конфигурацию. Потратил, как и вы, кучу времени и сил. И в конце концов я перешел на VMware workstation Player, что и решило проблему, как я описал выше.
  26. 1 балл
    krapotkin

    Найти положение центра пальца в OnMouseDown

    да ну полноте ж))) я всегда включаю отображение касания и вижу прям кружок, куда касаюсь и система дает координаты центра этого кружка, так что не загоняйтесь с софтом, это хард
  27. 1 балл
    dnekrasov

    компонент – Индикатор("лампочка")

    Лучше TPaintBox или TShape вообще лучше не делать - размер холста задаётся автоматом в зависимости от размеров контрола переопределите функцию GetDefaultSize: TSizeF Вы контрол рисуете полностью сами, значит inherited тут не надо А вообще - посмотрите исходники TCircle-TEllipse-TShape - всё станет намного понятнее.
  28. 1 балл
    CyberStorm

    Онлайн-курсы

    Не слышал про курсы, есть хорошая книга Всеволода Леонова "Обучение мобильной разработке на Delphi", данный форум, и неплохой телеграм-канал https://t.me/TFMXGods где сидят гуру которые в одно-момент отвечают на все вопросы (что ставит под сомнение полезность этого форума).
  29. 1 балл
    Вследствие асинхронной обработки железным сканером вызовов TJNASC.Stop и TJNASC.Stop проблема была решена добавлением 2 TTimer выполняющих эти вызовы. Возможно решение кривое, но работает чётко.
  30. 1 балл
    dnekrasov

    Посоветуйте компонент-контейнер

    TScrollBox?
  31. 1 балл
    вызывается виртуальный метод TObject.Destroy; виртуальный здесь ключевое! виртуальные методы хранятся в спецтабличке Вы же разместили свой деструктор вне этой таблицы сделав его статичным. статичным он стал потому что нет правильного модификатора, по факту Вы написали destructor Destroy;пусто; модификатор overload - это из оперы несколько методов с одним названием. Destroy вызывается у всех типов в цепочке наследования кроме вашего типа, для вашего типа виртуальный Destroy не определен
  32. 1 балл
    Yarpda

    TMediaPlayer & TMediaPlayerControl - отрисовка на кадре

    Да, такая возможность в Аlcinoe точно есть. Вот пример, реализованный на этих компонентах.
  33. 1 балл
    Олег Киреев

    Изменить ширину скроллбара

    Здравствуйте уважаемый Azaz. 1. Я извиняюсь но уважаемый Администратор просит в правилах: " 2.2. Каким должен быть текст вопроса? Текст вопроса нужно начать с указания используемой версии RAD Studio, Версии ОС и модель устройства (если речь идет о мобильной разработке)" 2. У компонента TListBox есть своё свойство-ШоуСкроллБарс. Достаточно поставить птичку. С Уважением. Олег.
  34. 1 балл
    krapotkin

    TMediaPlayer & TMediaPlayerControl - отрисовка на кадре

    Такая возможность ВРОДЕ БЫ есть в Alcinoe https://github.com/Zeus64/alcinoe Проверьте, сообщите результаты, всем будет полезно Не для Windows! Я искал как-то, не нашел вообще ничего
  35. 1 балл
    Martifan

    StatusBar Color

    Доброго времени сутки. На Samsung Galaxy S8 Edge проект когда открываю выдаёт вот так: кто в курсе почему так происходит? вроде красный панель доле перекрывать NavigationBar? заранее спасибо
  36. 1 балл
    И вдогонку вопрос - а Каталину только версия для Delphi поддерживает? А С++ нет? В описании к нему ни строчки о поддержке.
  37. 1 балл
    Ответ положительный, но без танцев с бубном, как я уже писал, не обошлось. Приложение писал для себя, теперь живет у меня на iPhone 6s с iOS 13.3.
  38. 1 балл
    Ориентировочная дата выпуска Ориентировочная дата выпуска курса - 31 июня 2016 года. Краткое описание Этот курс посвящен использованию стилей в FireMonkey. Стили являются одной из самых главных особенностей FireMonkey, отличающих FMX фреймворк от других. С одной стороны с их помощью вы можете придать своему приложению индивидуальность и добавить визуальную неповторимость. Однако, с другой стороны использование стилей является очень сложной темой и содержит много нюансов, не зная которые, можно потратить много времени на попытку понять причину неудач использования. Тема является одной из самых популярных, поэтому она будет рассмотрена в первую очередь. Что вы будете уметь после прохождения курса? В результате прохождения курса, вы сможете: Создать свой стиль на основе вашего UI дизайна приложения простейшим путем из возможных Редактировать и дополнять уже существующие стили, идущие в поставке с FireMonkey Создавать и использовать уже существующие стили для использования их в своих компонентах Детально понимать, как работает механизм стилей, Понимать, как создать "эффективный" стиль. Стиль, который не будет сказываться на производительности вашего приложения. Сделать действительно кроссплатформенное приложение с точки зрения стилей. Использование разных стилей для разных платформ (Android, iOS, Windows, OSX) Научитесь анализировать типовые ошибки создания стилей и исправлять их в кратчайшие строки. Будете знать технику создания своего стиля для любого стилевого компонента с нуля. На кого рассчитан курс? Курс рассчитан на: Разработчиков, которые начинают использовать FireMonkey. Разработчиков, планирующие использовать стили в своих приложениях. Разработчиков, которые уже использовали стили, но поняли, что это не так просто, как кажется. Состав курса Пока курс находится в процессе разработке, здесь будут представлены только основные темы и вопросы. По мере готовности курса, будет дано детальное описание всех уроков. Что такое стиль, что он из себя представляет? Архитектура стилей: Основные части стилевого механизма, назначения и их взаимодействия (TStyleBook, TStyledControl, TStyleManager). Как происходит процедура загрузки/выгрузки/смены стиля? Изменение стилей на лету. Замена платформенных стилей. Кеш стилей. Достоинства и потенциальные опасные места при проектировании компонента со стилями. Динамическая подгрузка стиля на мобильных платформах. Уведомления. Способы узнать, когда стиль меняется для компонента или формы. Растровые и векторные стили: Назначения Отличия Достоинства и недостатки? Что выбрать? Манипулирование стилем: Доступ к элементам стиля: StylesData, FindStyleResource. Достоинства и недостатки. Какой способ выбрать? Форсирование загрузки и выгрузки стиля Стилизация рамки окна: Структура стиля рамки окна (Windows only) Какие элементы стиля за что отвечают Платформенные стили: Откуда FireMonkey берёт стиль по умолчанию? Как изменить стиль по умолчанию? Где взять исходники дефолтных стилей. Tint эффект Что такое, зачем нужен и в чем его преимущества? Когда стоит использовать Tint, а когда нет? Принципы работы. Настройки, как использовать? Контролы поддерживающие Tint эффект Дизайнер стилей FMX. Принципы работы Знакомство с интерфейсом, Создание нового стиля, Удаление существующего, Смена порядка стилевых объектов (Z-order), Создание нового стиля Редактирование существующего Дизайнер стилей VCL - как один из способов создания FMX стилей. Описание Основные принципы работы Автоматическое создание FMX стиля без необходимости знания структуры стиля с точки зрения FMX компонентов. Получение стилей по умолчанию. Создание стилей для базовых компонентов (TListBox, TEdit, TMemo, TButton, TTabControl) Как узнать структуру стиля для компонента? Фиксация размера (Фиксация высоты, ширины или ширины и высоты) TListBox: Способы создания своих итемов с любыми элементами TEdit, TMemo: TButton TTabControl Анализ типичных ошибок при создании и редактировании стилей
  39. 1 балл
    Vitaldj

    FastReport +DLL - проблема

    Ну забейте на ошибку))) try except и тд))) PS возможен глюк FR. На днях пытался выяснить почему в FR RMX не работает межстрочный интервал в memo. И что вы думаете? Ответили, что мол он еще не реализован!!!!!! Я просто охренели от ответа)))) Причем параметр есть (межстрочного интервала), а при смене его вообще ничего не происходит! И вдобавок ответили, что в новой версии (якобы через пару дней) добавят. Я считаю, что это глюк чистой воды, но они не признаются))
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...