Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Mp3 Player в Delphi7 (http://forum.oszone.net/showthread.php?t=45695)

Max009 20-02-2005 16:04 300183

Mp3 Player в Delphi7
 
Пишу на Delphi7 (и 3Ds Max) проигрыватель MP3.
Использую как основу компонент Mediaplayer(полностью самому написать пока нереально - всего пол года прошло как начал прогать,
а ведь ещё учёба...):chih:

Друзья, когда увидели мою прогу сказали, что предпочтут её Winamp'у!
В 3Ds Max6 сделал 3D катушечный мафон, который реагирует на
перемотку, конец песни(обрыв ленты) и т.д.
Всё работает в общем нормально.:)

Трамбла произошла когда начал создавать плей лист.:weep:
В общем я его создал, но если вы бы увидили "код" отвечающий за его
работу, то упали бы в обморок...:puke:
Создавал на основе компонента ListView панели Win32.
Песни в него загружаются, но если щелкнуть не по ней, а рядом с ней
всё зависает. И как сделать, чтобы по окончании песни сама включалась
следующая? По-жа-луй-ста покажите на примере.

А как сделать чтобы регулировалась громкость?:confused:

Может киданёте ссылочку или посоветуете книгу?:4u:

Спасибо!:beer:

[mzd] 20-02-2005 16:18 300185

Попробуй это код для громкости
Код:

var
 VolumeBar: TProgressBar;
    cmdMinVolume: TSpeedButton;
    cmdMaxVolume: TSpeedButton;
 
 procedure TMainForm.FormCreate(Sender: TObject);
 var
  i: integer;
  MixLine: TMixerLine;
  MixLineCtrl: TMixerLineControls;
  MixCtrl: TMixerControl;
 begin
  inherited;
  MixerOpen(@hmix, 0, Handle, 0, MIXER_OBJECTF_MIXER or CALLBACK_WINDOW);
  MixerGetDevCaps(0, @mixcaps, SizeOf(MixCaps));
  for I := 0 to MixCaps.cDestinations - 1 do
  begin
    Mixline.dwDestination := I;
    Mixline.cbStruct := SizeOf(Mixline);
    MixerGetLineInfo(hmix, @mixline, MIXER_GETLINEINFOF_DESTINATION);
    if Mixline.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS then
      break;
  end;
  if Mixline.dwComponentType <> MIXERLINE_COMPONENTTYPE_DST_SPEAKERS then
  begin
    ShowMessage('Микшер не найден !');
    svEnable := False;
    Exit;
  end
  else
    svEnable := True;
  MixLineCtrl.cbStruct := SizeOf(MixLineCtrl);
  MixLineCtrl.dwControlType := MIXERCONTROL_CONTROLTYPE_VOLUME;
  MixLineCtrl.dwLineID := MixLine.dwLineID;
  MixLineCtrl.cControls := 2;
  MixLineCtrl.cbmxctrl := Sizeof(MixCtrl);
  MixCtrl.dwControlType := MIXERCONTROL_CONTROLTYPE_VOLUME;
  MixLineCtrl.pamxctrl := @MixCtrl;
  MixerGetLineControls(hmix, @mixlinectrl, MIXER_GETLINECONTROLSF_ONEBYTYPE);
  VolumeID := MixCtrl.dwControlID;
  VolMin := MixCtrl.Bounds.dwMinimum;
  VolMax := MixCtrl.Bounds.dwMaximum;
  Details.cbStruct := Sizeof(Details);
  Details.dwControlID := VolumeID;
  Details.cChannels := 1;
  Details.cMultipleItems := 0;
  Details.cbDetails := SizeOf(Valdets);
  Details.paDetails := @valdets;
  MixerGetControlDetails(hmix, @details, MIXER_GETCONTROLDETAILSF_VALUE);
  CurVolume := Valdets.dwValue;
  VolumeBar.Min := VolMin;
  VolumeBar.Max := VolMax;
  VolumeBar.Position := CurVolume;
 
 procedure TMainForm.VolumeBarMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: integer);
 begin
  if not svEnable then exit;
  X := Round(X / VolumeBar.Width * (VolumeBar.Max - VolumeBar.Min) + VolumeBar.Min);
  VolumeBar.Position := X;
  Details.cbStruct := Sizeof(Details);
  Details.dwControlID := VolumeID;
  Details.cChannels := 1;
  Details.cMultipleItems := 0;
  Details.cbDetails := Sizeof(Valdets);
  Details.paDetails := @Valdets;
  if X > 4000 then
    Valdets.dwValue := VolumeBar.Position
  else
    Valdets.dwValue := 0;
  MixerSetControlDetails(hmix, @details, MIXER_SETCONTROLDETAILSF_VALUE);
 end;
 
 procedure TMainForm.cmdMinVolumeClick(Sender: TObject);
 begin
  if not svEnable then Exit;
  VolumeBar.Position := VolumeBar.Position - (VolumeBar.Max - VolumeBar.Min) div 50;
  if VolumeBar.Position < VolumeBar.Min then
    VolumeBar.Position := VolumeBar.Min;
  Details.cbStruct := SizeOf(Details);
  Details.dwControlID := VolumeID;
  details.cChannels := 1;
  Details.cMultipleItems := 0;
  Details.cbDetails := SizeOf(Valdets);
  Details.paDetails := @Valdets;
  if VolumeBar.Position > 4000 then
    valdets.dwValue := VolumeBar.Position
  else
    valdets.dwValue := 0;
  MixerSetControlDetails(hmix, @details, MIXER_SETCONTROLDETAILSF_VALUE);
 end;
 
 procedure TMainForm.cmdMaxVolumeClick(Sender: TObject);
 begin
  if not svEnable then Exit;
  VolumeBar.Position := VolumeBar.Position + (VolumeBar.Max - VolumeBar.Min) div 50;
  if VolumeBar.Position > VolumeBar.Max then
    VolumeBar.Position := VolumeBar.Max;
  Details.cbStruct := SizeOf(Details);
  Details.dwControlID := VolumeID;
  Details.cChannels := 1;
  Details.cMultipleItems := 0;
  Details.cbDetails := SizeOf(Valdets);
  Details.paDetails := @Valdets;
  if VolumeBar.Position > 4000 then
    Valdets.dwValue := VolumeBar.Position
  else
    Valdets.dwValue := 0;
  MixerSetControlDetails(hmix, @details, MIXER_SETCONTROLDETAILSF_VALUE);
 end;
 end;



Время: 01:55.

Время: 01:55.
© OSzone.net 2001-