Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.028 c
3-1091083229
WondeRu
2004-07-29 10:40
2004.08.22
SQL. Как использовать процедуру для WHERE


3-1091018086
Batoon
2004-07-28 16:34
2004.08.22
ascii и БД


14-1091345889
Protoss
2004-08-01 11:38
2004.08.22
Просто интересно


1-1091660520
shine
2004-08-05 03:02
2004.08.22
Копирование колекций.Ошибка при assign.


3-1090574765
}|{yk
2004-07-23 13:26
2004.08.22
Firebird и event





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский