Перейти к содержанию
Fire Monkey от А до Я

Ingalime

Пользователи
  • Постов

    354
  • Зарегистрирован

  • Посещение

  • Победитель дней

    5

Активность репутации

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