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

Вячеслав

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

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

  • Посещение

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

    3

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

  1. Спасибо, попробую. Вот мне стало интересно: на андроиде, насколько я знаю, MediaPlayerControl тоже перекрывает собой все, что можно. Еще и работает только на полный экран. Выходит, если я захочу сделать самый простой видеоплеер, с какой-нибудь появляющейся менюшкой при нажатии на экран, меня будут ждать танцы с бубном? Или я ошибаюсь? 

  2. Добрый день, господа! Стоит следующая задача: отловить событие клика на MediaPlayerControl, растянутым на весь экран, чтобы в дальнейшем показать менюшку с паузой, перемоткой и т.д.

    Вроде задача простая, на я запнулся на том, что у MediaPlayerControl нет события OnClick и подобных, а только события для работы с жестами. 

    Пытался поверх MediaPlayerControl положить TRectangle, но при проигрывании видео MediaPlayerControl сразу же его перекрывает. Никакие BringToFront/SendToBack не помогают. Кто-нибудь сталкивался с подобным?

  3. Авторство всецело не мое, только правки вносил, т.к. в разных версиях студии код вел себя по-разному. 

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

     

    Код для использования:

    На форме лежат Мемо, кнопки открытия/закрытия, эдит для отправляемых текстов и кнопка отправить.
    в паблике у формы добавляем объект
     GPort: TComPort;
    
    // ******************************************************************************
    // ПРОЦЕДУРЫ РАБОТЫ С COM ПОРТОМ
    
    // открываем порт
    procedure TFormChannels.OpenPort(PortNum: Byte);
    begin
      GPort := TComPort.Create(PortNum, br9600);
      GPort.OnRead := FormChannels.OnRead;
      GFlagOpen := true;
      FormChannels.ButtonClosePort.Enabled := true;
    end;
    
    // закрываем порт
    procedure TFormChannels.ClosePort;
    begin
      GPort.Free;
    end;
    
    // отправляем в порт данные
    procedure TFormChannels.WritePort(strWrite: string);
    var
      arrBytes: array of Byte;
      i: Integer;
    begin
      if GFlagOpen = False then // проверяем, открыт ли порт
        OpenPort(strtoint(edtPort.Text)); // если нет, то открываем
    
      SetLength(arrBytes, Length(strWrite));
    
      for i := Low(arrBytes) to High(arrBytes) do
        arrBytes[i] := Ord(strWrite[i + 1]);
    
      GPort.Write(arrBytes);
      arrBytes := nil;
    end;
    
    // читаем данные из порта
    procedure TFormChannels.OnRead(Sender: TObject; ReadBytes: array of Byte);
    var
      i: Integer;
    begin
      memRead1.Lines.BeginUpdate;
      for i := Low(ReadBytes) to High(ReadBytes) do
      begin
        if i > Low(ReadBytes) then
          memRead1.Text := memRead1.Text; // + '.';
        memRead1.Text := memRead1.Text + char(ReadBytes[i]);
    
      end;
    // подчищаем заполняющийся Мемо
      if memRead1.Lines.Count > 5 then
      begin
        // memRead1.Clear;
        memRead1.Lines.Delete(0);
        memRead1.Lines.Delete(1);
      end;
    
      memRead1.Lines.EndUpdate;
    end;
    
    procedure TFormChannels.ButtonClosePortClick(Sender: TObject);
    begin
      ClosePort;
    end;
    
    // открываем порт кнопкой
    procedure TFormChannels.ButtonOpenPortClick(Sender: TObject);
    begin
      OpenPort(strtoint(edtPort.Text));
    end;
    
    // отправляем в порт данные  кнопкой
    procedure TFormChannels.btnWriteClick(Sender: TObject);
    begin
      WritePort(FormChannels.edtWrite.Text);
    end;
    
    // КОНЕЦ ПРОЦЕДУР РАБОТЫ С COM ПОРТОМ
    // ******************************************************************************
    

    ComPort.zip

  4. В свое время сталкивался с проблемой отрисовки некоторых контролов в ФМ, симптомы были примерно те же. Помогло "дрыгание" контролов путем смещения позиции на 1рх влево и потом вправо. После этого костыля все отображалось нормально.

  5. Попробовал разобраться, что же происходит во внутренностях idHTTPServer. Ну, что могу сказать - индейцы со времен D2010 далеко продвинулись в плане запутывания кода :)

    Оберните приведенный код в Synchronize, в качестве первого параметра можно передать nil.

    Спасибо за наводку!

    TThread.Synchronize(nil,
      procedure
      begin
        MemoRequest.Text := ARequestInfo.RawHTTPCommand;
      end);
    

    Полёт нормальный)

  6. Добрый день, друзья! Столкнулся со следующей проблемой: получаю запросы от клиента, вывожу их в Memo. Периодически выскакивает AV, связанная с отрисовкой мемо. Код получения:

    procedure TForm1.IdHTTPServerCommandGet(AContext: TIdContext;
      ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
    begin
      AResponseInfo.ContentText := 'Response';
      MemoRequest.BeginUpdate;
        MemoRequest.Text := ARequestInfo.RawHTTPCommand;
        MemoRequest.Repaint;
      MemoRequest.EndUpdate;
    end;
    

    По сути, интересует только строчка  MemoRequest.Text := ARequestInfo.RawHTTPCommand;

    Все BeginUpdate-EndUpdate, Repaint добавлены в поисках решения, но они не спасают.

    Как я понимаю, получение запроса происходит в отдельном потоке, в нем же я и пытаюсь обратится к мемо и вылетает AV. Вопрос в том, как это обойти? Нужна ли синхронизация потоков?

  7. Отличное решение, спасибо! Только вот один момент смущает: событие срабатывает лишь в тех случаях, когда на трекбаре происходит клик мышью. А если я нажал на каретку, потащил ее в сторону и потом отпустил (как раз MouseUp), то событие не обрабатывается.

  8. В примере явным образом об этом не сказано, это один из вариантов. Может быть ув. xenon54 создал класс-наследник, свой компонент, реализовал какой-либо хак для доступа к закрытому полю абстрактного класса-предка. Просто я не очень люблю ковырять исходники, сразу получаешь привязку к конкретной машине либо приходится таскать исправленный модуль с собой.

  9. Господа, проблемы с сабжем. Не работает и все тут. Может я туплю и в интернетах описаны способы регистрации события у трекбара, но у меня пока не получается. Интересует отлов отпускания мыши у компонента, созданного в Design-Time.

  10. Ну вот, вчера наконец руки и дошли, наладил связь между виндой и ESP8266-07 через IdHTTP клиент и сервер. Сложностей особых не было. Сам контроллер прошивал через Arduino IDE. Пока коды корявые, но в скором времени планирую все подрихтовать и выложить здесь или на русском форуме по ESP.

  11. Увы, не подскажу. Я как первый раз приложение на андроиде написал на пятой версии студии, так и забросил. Пишу только под винду. Хотя, если не ошибаюсь, Indy поддерживают и TCP и UDP и все это вроде как должно работать на ведре. Но вот КАК работать, это вопрос. Если у Вас получится, поделитесь результатами? А то интересно же)

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