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

dnekrasov

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

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

  • Посещение

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

    52

Сообщения, опубликованные dnekrasov

  1. Пробовал я и TMS Web Core и UniGUI, но как по мне - лучше чем Thinfinity VirtualUI нет.  И да, реально на всех получаются неплохие веб-приложения на Delphi без знания всех этих новомодных фреймворков.

  2. как-то так

    uses System.RegularExpressions;
    ...
    const
      AHREF = '<a href="([^"]*)"[^>]*>([^<]*)</a>';
    var
      Match: TMatch;
      s: String;
    begin
      Match := TRegEx.Match(ваша HTML строка, AHREF);
      while Match.Success do
      begin
        
        // здесь что-то делаем  
        //<a href"...>...</a> в Match.Value 
        //Match.Groups[1] - адрес ссылки
        //Match.Groups[2] - отображаемый текст ссылки
        
        Match := Match.NextMatch;
      end;
    end

     

  3.  

    21 минут назад, Alisson R Oliveira сказал:

    функция ClientToScreen не компилируется в TFrame

    Да, она только у TCommonCustomForm. До неё можно добраться так:

    function GetOwnerForm: TCommonCustomForm;
    var
      ctrl: TComponent;
    begin
      Result := nil;
      ctrl := Self.Owner;
      while Assigned(ctrl) and not (ctrl is TCommonCustomForm) do
        ctrl := ctrl.Owner;
    
      if Assigned(ctrl) and (ctrl is TCommonCustomForm) then
        Result := ctrl as TCommonCustomForm;
    end;

     

  4. 10 минут назад, zekelive сказал:

    Под заменой логики, что имеете в виду? У меня просто в голове других вариантов нет

    Ну как я могу ответить на этот вопрос? Я не знаю ни что Ваша программа делает, ни что Вы хотите добить ся этим потоком, что такое Reopen, Add, как вы работаете с базой и т.д...

    Кстати, насчет базы. Когда-то я сталкивался с такой ситуацией (правда это было ADO и под винду): если ADOConnection был создан в главном потоке, то UI зависал всегда (даже когда запрос выполнялся в отдельном)

  5. В Synchronize надо заключать КАЖДОЕ обращение к визуальной части. Вы же этого не сделали (если я правильно понял код), или сделали частично. К тому же у Вас столько строк надо синхронно делать, что я просто не вижу смысла в таком потоке. Мой Вам совет - меняйте логику.

  6. 1 час назад, ddr 2 сказал:

    1.       Разумно ли выбран TImage в качестве предка?

    Лучше TPaintBox или TShape

    1 час назад, ddr 2 сказал:

    Canvas.SetSize

    вообще лучше не делать - размер холста задаётся автоматом в зависимости от размеров контрола

    1 час назад, ddr 2 сказал:

    3.       Как задать размеры элемента по умолчанию?

    переопределите функцию    GetDefaultSize: TSizeF

    1 час назад, ddr 2 сказал:

    procedure TLEDIndicator.Paint;

    begin inherited; {вопрос 2}

    Вы контрол рисуете полностью сами, значит inherited тут не надо

    А вообще - посмотрите исходники TCircle-TEllipse-TShape - всё станет намного понятнее.

  7. В 28.04.2020 в 06:20, Slym сказал:

    1 правило работы с плавающей точкой: Нельзя проверять 2 числа на равенство оператором =
    нельзя

    От себя добавлю - для сравнения есть чудесная функция System.Math.CompareValue

    Ещё гляньте System.Math.Vectors.TEpsilon - там есть полезные константы

  8. 13 часов назад, Светлана сказал:

    А если я ловлю ошибку иногда "Exception class DOMException with message 'Microsoft MSXML is not installed'" - это значит, что то типа потоку не доступна та или иная lib для выполнения?

    А это означает, что в этом потоке Вы не вызвали CoInitialize, прежде чем работать с XML

  9. 12 минут назад, Светлана сказал:

    Либо не работает вообще, либо пробую дописать .Start и выбивает ошибку

    Да, извините - забыл, конечно надо TThread.CreateAnonymousThread(procedure begin ... end).Start, ведь он создаётся как Suspended

    14 минут назад, Светлана сказал:

    но... меня терзают какие то смутные сомнения, что может ничего не получиться,

    Я их довольно часто использовал (пока не перешёл на работу с TTask), всегда всё отрабатывало нормально.

    15 минут назад, Светлана сказал:

    Хотелось бы всё таки более ясный мануал

    Пройдитесь по форумам или блогам, почитайте хелп :)

     

    А Вообще - в Вашем случае Image и таймер никогда не будет отрабатывать, пока GetDeD_List запускается в главном потоке

  10. 1 час назад, Светлана сказал:

    Логика мне стала подсказывать, что следовало его как то отобразить выполнив в параллельном асинхронном потоке

    Ну правильно Вам логика подсказала, вот только в отдельном потоке надо запускать ВСЁ. Аля так:

    TThread.CreateAnonymousThread(procedure
      begin
        TThread.ForceQueue(TThread.Current,  
          procedure
          begin
            P_showLoad.Visible := true;
            Timer_load_rotate.Enabled := true;
          end);
    
        GetDeD_List(DE_set.Date);
    
        TThread.ForceQueue(TThread.Current,  
          procedure
          begin
            P_showLoad.Visible := False;
            Timer_load_rotate.Enabled := False;
          end);
      end);

    P.S.

    Не проверял, но логика, я думаю, ясна

  11. 6 минут назад, Сергей Рыжков сказал:

    ну не  знаю на лету  создать и присвоить значение   какой тип ?   а если  с БД    там столько проблем   будет,  есть классический код   выше чем не устраивает ? 

    ставить ловушки   и смотреть где  застряло! и по времени сомнительно     в цикле память выделять под переменную ?   в общем много вопросов чем ответов.

    в чем плюс пока  не ясно даже если сразу  после цикла  они убиваются

    Каждому - своё. Не хотите изучать новые фишки - пишите по-старинке. Насчет времени и выделения/освобождения памяти тоже много статей видел. Короче - пользоваться этим или нет - выбор разработчика.

×
×
  • Создать...