Форум: "Основная";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
ВнизTPanel & Canvas Найти похожие ветки
← →
alless (2004-08-03 10:51) [0]Здраствуйте!
В моей прграмме есть такой код
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, а я хочю чтобы они появились на видео но никак не получяется.
Есть идеи как это делается?
← →
Smithson © (2004-08-03 10:53) [1]Как ты себе это представдяешь? "Точка в квадрат не попадает, но я хочу, чтобы она там отображалась".
← →
alless (2004-08-03 11:00) [2]если поставить x,y чтобы строка попала в квадрат строка не появляется на видео (типа субтитры хочю сделать)
← →
ssk © (2004-08-03 11:05) [3]я не верю, что это
Panel1.canvas.TextOut(10,10,"aaaaa");
будет работать.
может так лучше будет?type
TMyPanel = class (TPanel);
begin
TMyPanel(Panel1).Canvas.TextOut(10, 10, "текст");
end;
← →
alless (2004-08-03 11:09) [4]2 ssk
да я так и делал, просто не писал весь код, скажи лучше как буквы на изображением появились?
← →
Smithson © (2004-08-03 11:20) [5]Для этого нужно получить канвас изображения. Найти окно и по handle рисовать....
← →
alless (2004-08-03 11:24) [6]Тогда как получяется что Canvas видео рисуется на Canvas панела? А как получить канвас изображения?
← →
Smithson © (2004-08-03 11:29) [7]Видео рисуется на канвасе окна mediaplayer, интегрированного (embedded) в твою форму.
← →
KSergey © (2004-08-03 11:30) [8]> alless (03.08.04 11:24)
> Тогда как получяется что Canvas видео рисуется на Canvas
> панела
Это враки.
Там под вывод видео создается свое окно
Несколько сомневають, что обычными GDI-шными средствами там можно что-то нарисовать
Впрочем - не спец, запросто могу ошибаться.
← →
tamroF © (2004-08-03 11:46) [9]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:49) [10]> [9] tamroF © (03.08.04 11:46)
Это все к чему?
← →
tamroF © (2004-08-03 19:11) [11]Черть ё знает...
> чтобы они появились на видео
я так понял, выводимый на канвасе панели текст затирается видео...
← →
KSergey © (2004-08-04 07:29) [12]> [11] tamroF © (03.08.04 19:11)
> я так понял, выводимый на канвасе панели текст затирается
> видео...
Нет, он туда просто не выводится!!!
← →
alless (2004-08-04 10:42) [13]2 KSergey © (04.08.04 07:29) [12]
Можете сказать почему, или в какую сторону копать?
← →
KSergey © (2004-08-04 10:54) [14]> [13] alless (04.08.04 10:42)
> 2 KSergey © (04.08.04 07:29) [12]
> Можете сказать почему
см. [8] KSergey © (03.08.04 11:30)
← →
П7 (2004-08-04 11:05) [15]
> alless
Я так понимаю, что тебе нужно найти Handle окна, на котором отрисовывается видео. После этого можно будет рисовать на нём используя код из [9]. Но я так же понимаю, что Panel1 это не то окно. MPlayer создаёт своё окно, "присобаченное" к Panel1. Сие окно можно видимо найти в свойства MPlayer1. Или сразу Handle.
Можно пойти ещё другим путём. Поверх окна видео выводить TLabel, задав ему програмно выводится поверх всех компонент.
← →
KSergey © (2004-08-04 11:09) [16]> [15] П7 (04.08.04 11:05)
> Поверх окна видео выводить
> TLabel,
Чушь. Лабел - это графический элемент, отрисовываемый на каком-либо окне. Если его покласть на панель - то он опять же не будет на плейере. А покласть лейбл на плейер... Не пробовал, но терзают меня смутные сомнения...
> задав ему програмно выводится поверх всех компонент.
Это как?? Научите меня...
← →
П7 (2004-08-04 11:34) [17]
> Это как?? Научите меня...
А вот так:
Label1.BringToFront();
← →
KSergey © (2004-08-04 11:48) [18]> [17] П7 (04.08.04 11:34)
> Label1.BringToFront();
Лишь в пределах WinControl (окна) на ктором она лежит. Медиа плейер - другое окно.
← →
alless (2004-08-04 11:57) [19]Я заметил что MediaPlayer создает свое окошко с Caption-oм имя файла который проигрывается (если не поставить Display := Panel1)
Но я не могу найти ее с помощу функций FindWindow.
← →
WondeRu © (2004-08-04 12:09) [20]Используй 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;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.035 c