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

Sergey S

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

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

  • Посещение

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

  1. Собственно суть задачи: есть набор кадров с камеры. Из этого набора кадров необходимо создать видеоролик. Напрямую с камеры писать никак не получится (там свой собственный протокол, кадры приходят по GIGE из внутренней памяти камеры в виде набора данных). Как из этого потока данных собрать кадр и вывести его на форму - вопрос решен. А вот как из этого видеофайл сделать, я не представляю (да плюс еще Win+Linux). Вроде как-то можно через ffmpeg, но тоже ничего пока не нашел.

    Может кто решал подобную задачу, поделитесь информацией. Буду очень признателен.

    Спасибо.

  2. Добрый день.

    Пытаюсь организовать взаимодействие с web камерой. К камере подключается, все работает, картинка есть. Проблема возникает, когда пытаюсь получить настройки изображения камеры. При вызове TVideoCaptureDevice.CaptureSetting получаю ошибку "Abstract Error". Под Windows все работает без проблем, под Linux не хочет.:(

    Знающие люди, подскажите пожалуйста, что это может быть? Реально ли это как-то побороть, или под Linux в RAD Studio это просто не реализовано? Спасибо.

  3. 44 минуты назад, krapotkin сказал:

    ничего там не из коробки.

    Ну, по крайней мере ничего сверхсложного. Изменяем свойство DragKind у Dockable формы и свойство DockSite у PageControl. Получаем нужный функционал, заказчик доволен. Если бы не Linux, по я бы сделал на VCL все и вопрос закрылся бы, но...:(

    47 минут назад, krapotkin сказал:

    Зато поддерживает главное - можно табы убрать вообще. И над ним сделать панель, которая будет вести себя как угодно, в том числе анимированно раздвигая элементы во время Drag Over

    А после дропа выстроить табы. или фреймы, или что угодно. вообще не проблема

    Если бы Вы примерчик маленький дали, как так сделать. Я был бы безмерно счастлив.

     

    39 минут назад, OnePeople сказал:

    Написал за 5 минут для примера как можно

     

    Спасибо Вам большое! Если позволите, 2 вопроса:

    1. Есть ли возможность сделать, чтобы после драга вкладки форму сразу можно было перетаскивать на нужное место?

    2. Каким образом форму корректно вернуть (с помощью драга) обратно закладкой на TabControl?

    38 минут назад, krapotkin сказал:

    я так понимаю, вопрос упирался в красивый драг, а не способ отсоединить таб от родителя ?

    Совершенно верно. Заказчик просит сделать, как в Хроме (да еще кроме Win, чтобы под Linux все работало).

  4. К сожалению, в D11.2 повторить не получилось.:(

    Если все правильно понимаю, то теперь при перемещении формы этот метод больше не вызывается. У меня получилось его вызвать, только напрямую через: 

    SetBounds(10, 10, 500, 500);

    Даже присвоение новых значений параметрам: Left, Top, Width, Height не вызывает этот метод.

  5. Через фреймы у меня сделано сейчас.

    Перекинуть фрейм с вкладки на вновь созданную форму - не проблема, проблема в другом. Каким образом сделать так, чтобы это происходило как в браузере Google Chrome, когда пользователь тянет за ярлык вкладки. И обратно, когда дочернее окно расположено над областью ярлыков вкладок, фрейм обратно переносится на закладку TabControl, а окно уничтожается. В VCL это все реализовано "из коробки", в FMX - нет.:(( Сейчас оба этих действия у меня выполняются после нажатия на кнопки, заказчик требует по сути режим D&D, но в в TabControl он какой-то...:((( Весь TabControl мне тянуть не надо, а если включить его для отдельных закладок, они нажиматься перестают.

  6. Добрый день.

    Заказчик высказал пожелание, чтобы вкладки TabControl вели себя как в Google Chrome. Т.е. пользователь мог, потянув за вкладку мышью, "отстегнуть" ее и сделать полноценным окном. Потом, если что, сделать окно обратно вкладкой.

    Под VCL это делается очень просто и элегантно, но вот под FMX я такой возможности не нашел.:((( Вернуться обратно к VCL возможности нет, т.к. заказчик требует кроссплатформенность (Win/Linux).

    Может кто-то знает, возможно ли это сделать? Буду очень признателен за помощь.

    Спасибо.

  7. В RAD Studio 11.2 обнаружилась интересная особенность. Если закрывать вкладку таким образом, то форма, похоже, теряет фокус ввода.:(

    Ее не получается ни переместить, ни свернуть/развернуть, ни закрыть, ни размеры поменять. Такое поведение продолжается до тех пор, пока пользователь не кликнет мышью на каком-либо объекте на форме. Никакие SetFocus, ActiveControl:=True и т.п. не помогают. Объект фокус ввода исправно получает, но мышь форма не видит.

    Пробовал под VCL, такой проблемы нет. Похоже, это особенность FMX.:(

    Может кто еще с этим сталкивался, подскажите, как бороться?

  8. Спасибо Вам за уточнение.

    Последнее замечание наверное. При таком вызове:

    ThreadId := GetCurrentThreadId();

    Процедура SetThreadPriority должна вызываться непосредственно из потока, приоритет которого мы собираемся менять. Если стоит задача например из главного потока изменить приоритет другого потока, который был создан из главного, то такой способ здесь уже не подойдет. В данном случае необходимо будет воспользоваться свойством ThreadId класса TThread.

    ThreadId:=SecondThread.ThreadId;
  9. Спасибо большое Вам за уточнение!

    Не могли бы Вы пояснить некоторые моменты.

    1. По какой причине в данном случае подключается модуль Posix.Errno? В коде к нему обращения нет.

    2. Тип pthread_t в RAD Studio не определен (у меня версия 11.2). Каким образом Вам удалось заставить компилироваться данный код?

    3. Код pthread_setschedparam(ThreadId, SCHED_FIFO, @Params) так же не компилируется, потому что функция pthread_setschedparam в RAD Studio в качестве аргумента Params требует передавать значение, а не указатель на него. Я так думаю, здесь , как и в п.2, скорее всего взято из Си.

    Спасибо.

  10. Спасибо Вам большое, все получилось, но пришлось код немного подправить.

    1. В раздел USES добавить модуль Posix.Pthread, функции pthread_self и pthread_setschedparam определены как раз в нем

    2. Тип pthread_t, я так понял, в RAD Studio отсутствует (скорее всего он из Си). Заменил его на LongWord (тип функции pthread_self).

    3. При вызове функции pthread_setschedparam аргумент Params передается непосредственно, а не через указатель.

    Исправленный код:

    uses
      Posix.Sched, Posix.Pthread;
    
    var
      Params: sched_param;
      ThreadId: LongWord;
    begin
      ThreadId := pthread_self();
      Params.sched_priority := 10; // устанавливаем приоритет 10
      if pthread_setschedparam(ThreadId, SCHED_FIFO, Params) <> 0 then
        raise Exception.Create('Error setting thread priority');
    end;

    И последнее. Чтобы все корректно работало, приложение необходимо запускать с root правами. Иначе вызов pthread_setschedparam вернет ошибку 1, и никакой приоритет не установится.

  11. Добрый день всем.

    Подскажите пожалуйста, как правильно назначить приоритет создаваемому потоку для Linux (RAD Studio 11.2)?

    Пробовал так:

    constructor TMyThread.Create;
    begin
       inherited Create(True);
    
       Policy   := 1;
       Priority := 90;
    end;

    После инициализации потока приложение "падает" с ошибкой: Thread error: Недопустимый аргумент (22). Если просто запустить поток по умолчанию, все работает.

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