![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]Как ты себе это представдяешь? "Точка в квадрат не попадает, но я хочу, чтобы она там отображалась".