Ingalime
-
Постов
354 -
Зарегистрирован
-
Посещение
-
Победитель дней
5
Активность репутации
-
Ingalime отреагировална OnePeople в TListView DynamicAppearance ItemAppearanceObjects.ItemObjects.ObjectsCollection
procedure TForm1.ListViewUpdateObjects(const Sender: TObject;
const AItem: TListViewItem);
begin
TListItemText(AItem.Objects.FindDrawable('Detail')).Width:=Ваша ширина;
end;
-
Ingalime отреагировална slav_z в MSacc проблема с подключением
для начала попробуйте настроить подключение через мастер подключения в designtime... когда получится... откройте форму как текст (fmx) и посмотрите что там и как указано для подключения... повторите то же самое в runtime...
-
Ingalime отреагировална krapotkin в THTTPClient - непонятная ошибка при POST-е json на сервер
Задача любой синхронизации - не дать разным потокам одновременно изменять данные.
Можете себе представить принтер, на который печатают несколько человек. Если не выстроить их в очередь, то результат вам не понравится.
Ровно так же и с объектами программы. Если к ним есть доступ у нескольких потоков, то результат взаимодействия почти гарантированно приведет к ошибке программы.
Synchronize ставит действие в очередь на ожидание главного потока. Как только тот освобождается, он выполняет это действие и оба потока идут дальше. Главный - своей дорогой, вызвавший Synchronize - своей.
Достаточно просто запомнить - экран - один, вызов только через синхронизацию.
Более полное объяснение заповедей многопоточного программирования несложно найти в сети)
-
Ingalime отреагировална krapotkin в THTTPClient - непонятная ошибка при POST-е json на сервер
синхронная концепция вызова и синхронизация потоков не имеют ничего общего
то, что программа не пойдет дальше, пока не закончится POST, никак не отменяет того, что вызовы экранных компонентов должны происходить только в главном потоке
поэтому TThread.Synchronize
-
Ingalime отреагировална slav_z в MSacc проблема с подключением
зачем у вас тут нетипизированные параметры? сделайте два разных метода и не будет такой каши.
function bdconected(s2:string;s1,s{,sd}: TObject): string; -
Ingalime отреагировална krapotkin в THTTPClient - непонятная ошибка при POST-е json на сервер
нет не следует
там написано, "если вы хотите получать данные прямо в процессе их получения, вместо того чтобы ждать когда скачается всё до конца..."
ну собсно, да, можно из того же стрима их забирать в событии OnReceiveData, но зачем вам неполный json ?? это же не звук, не видео, которые можно сразу на экран выводить, не дожидаясь всего кино...
но при этом это будет происходить независимо, опять же в другом потоке. ваш поток, где вы вызвали Post, будет ждать окончания загрузки.
Асинхронно это будет только через BeginPost
-
Ingalime отреагировална krapotkin в THTTPClient - непонятная ошибка при POST-е json на сервер
Вся эта процедура в моем коде запущена в отдельном потоке через 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.
Несколько раз так зависнет, а потом Андроид предлагает удалить ее с устройства, т.к. в ней баги и вообще она плохая. Пользователи не очень любят такое))
-
Ingalime отреагировална 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
-
Ingalime отреагировална krapotkin в THTTPClient - непонятная ошибка при POST-е json на сервер
httpDemo.7z
вот демо
работает одинаково на Windows и Android
-
Ingalime отреагировална qz5 в Публикация приложения на Google Play
вот инструкция на английском, с картинками - http://docwiki.embarcadero.com/RADStudio/Rio/en/Submitting_Your_Android_App_to_Google_Play
-
Ingalime отреагировална krapotkin в THTTPClient - непонятная ошибка при POST-е json на сервер
нормально у меня работают и Get и Post и кодировка нормально принимается.
вам нужно проверить, что же реально уходит на сервер
для этого есть эхо сервера например https://docs.postman-echo.com
либо направить на любой свой сервер, сделать неск строк скрипт на PHP который покажет все заголовки и контент, который он получил
Совершенно непонятно, для чего тут TBytesStream, TStringStream работает абсолютно прозрачно (под капотом ессно то же самое)
Ну и делать общение с сервером в главном потоке - странное занятие конечно
-
Ingalime отреагировална Vitaldj в FastReport +DLL - проблема
Ну забейте на ошибку))) try except и тд)))
PS возможен глюк FR. На днях пытался выяснить почему в FR RMX не работает межстрочный интервал в memo. И что вы думаете? Ответили, что мол он еще не реализован!!!!!! Я просто охренели от ответа)))) Причем параметр есть (межстрочного интервала), а при смене его вообще ничего не происходит! И вдобавок ответили, что в новой версии (якобы через пару дней) добавят. Я считаю, что это глюк чистой воды, но они не признаются))
-
Ingalime отреагировална Евгений Корепов в Изменить ширину скроллбара
Ширина задана в исходных кодах константой.
-
Ingalime отреагировална Slym в THTTPClient - непонятная ошибка при POST-е json на сервер
и ручками править хрупкую структуру - нунах...
там у тебя json, проверяй валидность json
json:=TJSONObject.ParseJSONValue(Bytes, 0);
-
Ingalime отреагировална Slym в THTTPClient - непонятная ошибка при POST-е json на сервер
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
-
Ingalime отреагировална 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
-
Ingalime отреагировална Алексей Воронин в DevExpress для FMX
https://community.devexpress.com/blogs/vcl/archive/2020/07/22/devexpress-fmx-grid-ctp-available.aspx
-
Ingalime отреагировална Slym в VertScrollBox под IOS - баг с прокруткой
procedure TForm1.CalcContentBounds(Sender: TObject; var ContentBounds: TRectF); begin TCustomScrollBox(Sender).AniCalculations.BoundsAnimation:=(TCustomScrollBox(Sender).Size.Height<ContentBounds.Height); end;
-
Ingalime отреагировална giveaway в Деплой приложения на iOS (Delphi 10.3.3 в связке с macOS Catalina)
И вдогонку вопрос - а Каталину только версия для Delphi поддерживает? А С++ нет? В описании к нему ни строчки о поддержке.
-
Ingalime отреагировална Losev Andrei в Деплой приложения на iOS (Delphi 10.3.3 в связке с macOS Catalina)
Ответ положительный, но без танцев с бубном, как я уже писал, не обошлось. Приложение писал для себя, теперь живет у меня на iPhone 6s с iOS 13.3.
-
Ingalime отреагировална Losev Andrei в Деплой приложения на iOS (Delphi 10.3.3 в связке с macOS Catalina)
Под Virtualbox мне так и не удалось получить рабочую конфигурацию. Потратил, как и вы, кучу времени и сил. И в конце концов я перешел на VMware workstation Player, что и решило проблему, как я описал выше.
-
Ingalime отреагировална krapotkin в Найти положение центра пальца в OnMouseDown
да ну полноте ж))) я всегда включаю отображение касания и вижу прям кружок, куда касаюсь
и система дает координаты центра этого кружка, так что не загоняйтесь с софтом, это хард
-
Ingalime отреагировална 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; там в проекте еще дофига разных странных решений и ошибок. Но это уже оффтоп...
-
Ingalime отреагировална dnekrasov в компонент – Индикатор("лампочка")
Лучше TPaintBox или TShape
вообще лучше не делать - размер холста задаётся автоматом в зависимости от размеров контрола
переопределите функцию GetDefaultSize: TSizeF
Вы контрол рисуете полностью сами, значит inherited тут не надо
А вообще - посмотрите исходники TCircle-TEllipse-TShape - всё станет намного понятнее.
-
Ingalime отреагировална Kast2k в Изменение типа чтения данных с встроенного сканера Honeywell
Вследствие асинхронной обработки железным сканером вызовов TJNASC.Stop и TJNASC.Stop проблема была решена добавлением 2 TTimer выполняющих эти вызовы.
Возможно решение кривое, но работает чётко.