Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TPanel & Canvas


alless ©   (2004-08-03 10:51:00) 

Здраствуйте!
В моей прграмме есть такой код

With MediaPlayer1 do begin
................
    Display := Panel1;
...............
end;
Потом в таймере пишу код

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Panel1.canvas.TextOut(10,10,'aaaaa');
end;

Если кордонаты x,y из TextOut поменять на те которые не попадют в квадрат видео, то они отображаются на Canvas-e, а я хочю чтобы они появились на видео но никак не получяется.
Есть идеи как это делается?


WondeRu   (2004-08-04 12:09:00) [1]

Используй DSpack
дальше разберешься:


procedure XXXX.OnSampleGrabberBuffer(sender: TObject;
 SampleTime: Double; pBuffer: Pointer; BufferLen: Integer);
var
 BIHeader: tagBitmapInfo;
 MediaType: TAMMediaType;
 xpos, ypos, Index: Integer;
begin
 try
   SampleGrabber.GetConnectedMediaType(MediaType);
   if IsEqualGUID(MediaType.formattype, FORMAT_VideoInfo) then
   begin
     if MediaType.cbFormat = SizeOf(TVideoInfoHeader) then  // check size
       BIHeader.bmiHeader := (PVideoInfoHeader(MediaType.pbFormat)^.bmiHeader);
   end
   else if IsEqualGUID(MediaType.formattype, FORMAT_VideoInfo2) then
   begin
     if MediaType.cbFormat = SizeOf(TVideoInfoHeader2) then  // check size
       BIHeader.bmiHeader := (PVideoInfoHeader2(MediaType.pbFormat)^.bmiHeader);
   end;
 finally
   FreeMediaType(@MediaType);
 end;

 Canvas.Lock;
 try
   try
     SetStretchBltMode(Handle, COLORONCOLOR);
     with BIHeader.bmiHeader do
       begin
         StretchDIBits(Canvas.Handle,
                       0,
                       0,
                       biWidth,
                       biHeight,
                       0,
                       0,
                       biWidth,
                       biHeight,
                       pBuffer,
                       BIHeader,
                       DIB_RGB_COLORS,
                       SRCCOPY);
       end;
             TextOut(Handle,
                     5,
                     5,
                     PAnsiChar(<text>),
                     1);
   except
   end;
 finally
   Canvas.Unlock;
 end;
end;


alless   (2004-08-04 11:57:00) [2]

Я заметил что MediaPlayer создает свое окошко с Caption-oм имя файла который проигрывается (если не поставить Display := Panel1)
Но я не могу найти ее с помощу функций FindWindow.


KSergey   (2004-08-04 11:48:00) [3]

> [17] П7   (04.08.04 11:34)
> Label1.BringToFront();

Лишь в пределах WinControl (окна) на ктором она лежит. Медиа плейер - другое окно.


П7   (2004-08-04 11:34:00) [4]


> Это как?? Научите меня...

А вот так:

Label1.BringToFront();


KSergey   (2004-08-04 11:09:00) [5]

> [15] П7   (04.08.04 11:05)
> Поверх окна видео выводить
> TLabel,

Чушь. Лабел - это графический элемент, отрисовываемый на каком-либо окне. Если его покласть на панель - то он опять же не будет на плейере. А покласть лейбл на плейер... Не пробовал, но терзают меня смутные сомнения...

> задав ему програмно выводится поверх всех компонент.

Это как?? Научите меня...


П7   (2004-08-04 11:05:00) [6]


> alless

Я так понимаю, что тебе нужно найти Handle окна, на котором отрисовывается видео. После этого можно будет рисовать на нём используя код из [9]. Но я так же понимаю, что Panel1это не то окно. MPlayerсоздаёт своё окно, "присобаченное" к Panel1. Сие окно можно видимо найти в свойства MPlayer1. Или сразу Handle.

Можно пойти ещё другим путём. Поверх окна видео выводить TLabel, задав ему програмно выводится поверх всех компонент.


KSergey   (2004-08-04 10:54:00) [7]

> [13] alless   (04.08.04 10:42)
> 2 KSergey ©   (04.08.04 07:29) [12]
> Можете сказать почему


см. [8] KSergey ©   (03.08.04 11:30)


alless   (2004-08-04 10:42:00) [8]

2 KSergey ©   (04.08.04 07:29) [12]
Можете сказать почему, или в какую сторону копать?


KSergey   (2004-08-04 07:29:00) [9]

> [11] tamroF ©   (03.08.04 19:11)
> я так понял, выводимый на канвасе панели текст затирается
> видео...

Нет, он туда просто не выводится!!!


tamroF   (2004-08-03 19:11:00) [10]

Черть ё знает...

> чтобы они появились на видео


я так понял, выводимый на канвасе панели текст затирается видео...


KSergey   (2004-08-03 11:49:00) [11]

> [9] tamroF ©   (03.08.04 11:46)

Это все к чему?


tamroF   (2004-08-03 11:46:00) [12]

procedure TForm1.Timer1Timer(Sender: TObject);
var dc:hdc;
begin
dc:=GetDC(Panel1.Handle);
TextOut(dc,5,5,PChar(Form1.Caption),Length(Form1.Caption));
ReleaseDC(Panel1.Handle,dc);
end;


KSergey   (2004-08-03 11:30:00) [13]

> alless   (03.08.04 11:24)
> Тогда как получяется что Canvas видео рисуется на Canvas
> панела

Это враки.
Там под вывод видео создается свое окно
Несколько сомневають, что обычными GDI-шными средствами там можно что-то нарисовать
Впрочем - не спец, запросто могу ошибаться.


Smithson   (2004-08-03 11:29:00) [14]

Видео рисуется на канвасе окна mediaplayer, интегрированного (embedded) в твою форму.


alless   (2004-08-03 11:24:00) [15]

Тогда как получяется что Canvas видео рисуется на Canvas панела? А как получить канвас изображения?


Smithson   (2004-08-03 11:20:00) [16]

Для этого нужно получить канвас изображения. Найти окно и по handle  рисовать....


alless   (2004-08-03 11:09:00) [17]

2 ssk
да я так и делал, просто не писал весь код, скажи лучше как буквы на изображением появились?


ssk   (2004-08-03 11:05:00) [18]

я не верю, что это Panel1.canvas.TextOut(10,10,'aaaaa');будет работать.

может так лучше будет?

type
 TMyPanel = class (TPanel);

begin
 TMyPanel(Panel1).Canvas.TextOut(10, 10, 'текст');
end;


alless   (2004-08-03 11:00:00) [19]

если поставить x,y чтобы строка попала в квадрат строка не появляется на видео (типа субтитры хочю сделать)


Smithson   (2004-08-03 10:53:00) [20]

Как ты себе это представдяешь? "Точка в квадрат не попадает, но я хочу, чтобы она там отображалась".


Наверх

Титульная страница Поиск, карта сайта Написать письмо