![]() |
|
#1
|
|||
|
|||
![]() Вот решил медиаплеер сделать. С трэкбаром проблемы. При воспроизведении он двигается за медиаплеером (т.е. trackbar1.position:=mediaplayer1.position). А когда я его двигаю, он возвращается на позицию плеера. Мне надо чтобы я двигал его и позиция плеера соответсвенно менялась. Подскажите как это сделать.
|
#2
|
|||
|
|||
![]() Да вот ещё один вопрос. Как узнать размер в пикселях avi файла? Заранее спасибо!
|
#3
|
|||
|
|||
![]() procedure TForm1.ScrollBar2MouseLeave(Sender: TObject);
begin sliding:=false; end; procedure TForm1.ScrollBar2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin sliding:=true; end; procedure TForm1.ScrollBar2MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin sliding:=true; if button = mbleft then BASS_ChannelSetPosition(music, Scrollbar2.position); end; procedure TForm1.Timer1Timer(Sender: TObject); begin if not sliding then Scrollbar2.Position :=BASS_ChannelGetPosition(music); end; |
#4
|
|||
|
|||
![]() procedure Tfrm_main.btn_openClick(Sender: TObject);
var i : Integer; afile : PAVIFile; afi : TAVIFileInfo; avimsg : Word; begin if od1.execute then begin AVIFileInit; avimsg := AVIFileOpen(afile, PChar(od1.FileName), OF_READ, nil); if avimsg = Word(AVIERR_OK) then begin if AVIFileInfo(afile, afi, sizeof(afi)) = 0 then begin AVIWidth := afi.dwWidth; AVIHeight := afi.dwHeight; end; end; AVIFileRelease(afile); AVIFileExit; |
#5
|
|||
|
|||
![]() unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; OpenDialog1: TOpenDialog; procedure Button1Click(Sender: TObject); private { Private declarations } public //Процедура для чтения информации об AVI procedure AviInfo(FileName: string); end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.AviInfo(FileName: string); var AviFileHandle: Integer; AVI_HEADER_SIZE: integer; V_HEADER_SIZE: integer; AVI_HEADER_START: integer; V_HEADER_START: integer; A_HEADER_START: integer; A_STRH_SIZE: integer; //Временные значения TEMP_TEST: string[5]; TEMP_SIZE: Integer; TEMP_VCODEC: String[5]; TEMP_ACODEC: integer; TEMP_MICROSEC: integer; TEMP_LENGTHinFRAMES: integer; TEMP_ACHANNELS: integer; TEMP_ASAMPLERATE: integer; TEMP_ABITRATE: integer; //Окончательные значения Size: double; Length: string; Vcodec: string; Vbitrate: double; VWidth: integer; VHeight: integer; Fps: double; LengthInSec: double; Acodec: string; Abitrate: string; begin //Открываем файл AviFileHandle := FileOpen(FileName, fmOpenRead); //Проверяем, что это AVI файл FileSeek(AviFileHandle, 7, 0); FileRead(AviFileHandle, TEMP_TEST, 5); if copy(TEMP_TEST, 0, 4) <> 'AVI ' then begin ShowMessage('Невозможно обработать выбранный AVI файл. Операция остановлена!'); exit; end; // Определяем размер файла FileSeek(AviFileHandle,4,0); FileRead(AviFileHandle, TEMP_SIZE, 4); //Производим инициализирующие действия, чтобы в дальнешем получить //информацию об аудио и видео FileSeek(AviFileHandle,28,0); FileRead(AviFileHandle, AVI_HEADER_SIZE, 4); AVI_HEADER_START := 32; //Значение необходимо для получения fps FileSeek(AviFileHandle,AVI_HEADER_START,0); FileRead(AviFileHandle, TEMP_MICROSEC, 4); //Длина фильма в кадрах FileSeek(AviFileHandle,AVI_HEADER_START + 16,0); FileRead(AviFileHandle, TEMP_LENGTHinFRAMES, 4); //Ширина FileSeek(AviFileHandle,AVI_HEADER_START + 32,0); FileRead(AviFileHandle, VWidth, 4); //Высота FileSeek(AviFileHandle,AVI_HEADER_START + 36,0); FileRead(AviFileHandle, VHeight, 4); FileSeek(AviFileHandle,AVI_HEADER_START + AVI_HEADER_SIZE + 4,0); FileRead(AviFileHandle, V_HEADER_SIZE, 4); V_HEADER_START := AVI_HEADER_START + AVI_HEADER_SIZE + 20; //Видеокодек FileSeek(AviFileHandle,V_HEADER_SIZE + 3,0); FileRead(AviFileHandle, TEMP_VCODEC, 5); A_HEADER_START := V_HEADER_START + V_HEADER_SIZE + 8; FileSeek(AviFileHandle,AVI_HEADER_START - 4,0); FileRead(AviFileHandle, A_STRH_SIZE, 5); //Аудиокодек FileSeek(AviFileHandle,A_HEADER_START + A_STRH_SIZE + 8,0); FileRead(AviFileHandle, TEMP_ACODEC, 2); //Дополнительная информация об аудио //Mono(1), Stereo(2) FileSeek(AviFileHandle,AVI_HEADER_START + A_STRH_SIZE + 10,0); FileRead(AviFileHandle, TEMP_ACHANNELS, 2); //samplerate FileSeek(AviFileHandle,AVI_HEADER_START + A_STRH_SIZE + 12,0); FileRead(AviFileHandle, TEMP_ASAMPLERATE, 4); //bitrate FileSeek(AviFileHandle,AVI_HEADER_START + A_STRH_SIZE + 16,0); FileRead(AviFileHandle, TEMP_ABITRATE, 4); //Информация прочитана, закрываем файл FileClose(AviFileHandle); //Определяем название видеокодека Vcodec := copy(TEMP_VCODEC, 0, 4); if Vcodec = 'div2' then Vcodec := 'MS MPEG4 v2' else if Vcodec = 'DIV2' then Vcodec := 'MS MPEG4 v2' else if Vcodec = 'div3' then Vcodec := 'DivX;-) MPEG4 v3' else if Vcodec = 'DIV3' then Vcodec := 'DivX;-) MPEG4 v3' else if Vcodec = 'div4' then Vcodec := 'DivX;-) MPEG4 v4' else if Vcodec = 'DIV4' then Vcodec := 'DivX;-) MPEG4 v4' else if Vcodec = 'div5' then Vcodec := 'DivX;-) MPEG4 v5' else if Vcodec = 'DIV5' then Vcodec := 'DivX;-) MPEG4 v5' else if Vcodec = 'divx' then Vcodec := 'DivX 4' else if Vcodec = 'mp43' then Vcodec := 'Microcrap MPEG4 v3'; //Определяем название аудиокодека case TEMP_ACODEC of 0: Acodec := 'PCM'; 1: Acodec := 'PCM'; 85: Acodec := 'MPEG Layer 3'; 353: Acodec := 'DivX;-) Audio'; 8192: Acodec := 'AC3-Digital'; else Acodec := 'Неизвестный (' + IntToStr(TEMP_ACODEC) + ')'; end; //Определяем bitrate case (Trunc(TEMP_ABITRATE / 1024 * 8)) of 246..260: Abitrate := '128 Kbit/s'; 216..228: Abitrate := '128 Kbit/s'; 187..196: Abitrate := '128 Kbit/s'; 156..164: Abitrate := '128 Kbit/s'; 124..132: Abitrate := '128 Kbit/s'; 108..116: Abitrate := '128 Kbit/s'; 92..100: Abitrate := '128 Kbit/s'; 60..68: Abitrate := '128 Kbit/s'; else Abitrate := FormatFloat('# Kbit/s', TEMP_ABITRATE / 1024 * 8); end; //Окончательный рассчет Size := TEMP_SIZE / 1024 / 1024; Fps := 1000000 / TEMP_MICROSEC; // FPS LengthInSec := TEMP_LENGTHinFRAMES / fps; // Length in seconds Length := FormatFloat('# min', Int(LengthInSec / 60)) + FormatFloat(' # sec', Round(LengthInSec - (Int(LengthInSec / 60) * 60))); Vbitrate := (TEMP_SIZE / LengthInSec - TEMP_ABITRATE) / 1024 * 8; //Выводит информацию в TMemo Memo1.Lines.Add('СВЕДЕНИЯ ОБ AVI файле: '+FileName); Memo1.lines.Add('Размер: ' + FormatFloat('#.## MB',Size)); Memo1.Lines.Add('Длина: ' + Length); Memo1.Lines.Add(''); Memo1.Lines.Add('информация о видео'); Memo1.Lines.Add('Кодек: ' + Vcodec); Memo1.Lines.Add('Bitrate: ' + FormatFloat('# Kbit/s', Vbitrate)); Memo1.lines.Add('Ширина: ' + IntToStr(VWidth) + ' px'); Memo1.lines.Add('Высота: ' + IntToStr(VHeight) + ' px'); Memo1.Lines.Add('FPS: ' + FormatFloat('#.##', fps)); Memo1.Lines.Add(''); Memo1.Lines.Add('информация об аудио'); Memo1.Lines.Add('Кодек: ' + Acodec); Memo1.Lines.Add('Bitrate: ' + Abitrate); end; procedure TForm1.Button1Click(Sender: TObject); begin OpenDialog1.Filter := 'AVI files (*.avi)|*.avi'; if OpenDialog1.Execute then begin Memo1.Clear; AviInfo(OpenDialog1.FileName); end; end; end. |
#6
|
|||
|
|||
![]() Спасиб большое
|
#7
|
|||
|
|||
![]() у меня нет таких процедур ScrollBar2MouseMove, ScrollBar2MouseMove и т.д со словом Mouse.
|
#8
|
|||
|
|||
![]() Цитата:
Там есть все... |
#9
|
|||
|
|||
![]() А за что меня забанили?
Пришел написал 3 месаги и получил недельный БАН |
#10
|
||||
|
||||
![]() Цитата:
|