unit MainF;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, XPMenu, DSPack, Directshow9, ExtCtrls, Buttons, StdCtrls, ComCtrls,
  ToolWin, ImgList, shellapi,StrUtils ;const
  WM_TrayMessage=WM_User+100;
  strlsts='*.mlst;*.m3u;*.wax;*.asx;*.wpl;*.pls;';
  ExtLsts='*.asx;*.wpl;*.pls;';
  WinTitle='和风播放器v1.03';
  lLens=10000;type
  pPListItem=^TPListItem;
  TPListItem=Record
  ID:integer;
  Name:String;
  End;type
  TMainInfo = class(TForm)
  MainMenu1: TMainMenu;
  File1: TMenuItem;
  OpenF: TMenuItem;
  OpenD: TMenuItem;
  DVD: TMenuItem;
  Openu: TMenuItem;
  OpenPt: TMenuItem;
  OpenP: TMenuItem;
  Quit: TMenuItem;
  N7: TMenuItem;
  His: TMenuItem;
  SetHis: TMenuItem;
  ClrHis: TMenuItem;
  ExitClr: TMenuItem;
  Main: TMenuItem;
  N13: TMenuItem;
  PrintS: TMenuItem;
  Propty: TMenuItem;
  N16: TMenuItem;
  Exited: TMenuItem;
  Lplay: TMenuItem;
  Pausd: TMenuItem;
  Stopd: TMenuItem;
  Stepd: TMenuItem;
  Provd: TMenuItem;
  Nextd: TMenuItem;
  LCont: TMenuItem;
  Lgoto: TMenuItem;
  LQrit: TMenuItem;
  LQleft: TMenuItem;
  Lmax: TMenuItem;
  Lmin: TMenuItem;
  Lplayer: TMenuItem;
  Lleft: TMenuItem;
  Lrit: TMenuItem;
  N1: TMenuItem;
  LValue: TMenuItem;
  UValue: TMenuItem;
  DValue: TMenuItem;
  NValue: TMenuItem;
  LVOut: TMenuItem;
  NoValue: TMenuItem;
  LeftV: TMenuItem;
  rightV: TMenuItem;
  N2: TMenuItem;
  LPerent: TMenuItem;
  NoAll: TMenuItem;
  LAll: TMenuItem;
  LPInfo: TMenuItem;
  LOver: TMenuItem;
  LQuit: TMenuItem;
  LSleep: TMenuItem;
  LClosed: TMenuItem;
  LSpacd: TMenuItem;
  LQuited: TMenuItem;
  N3: TMenuItem;
  LBKey: TMenuItem;
  N4: TMenuItem;
  LChosed: TMenuItem;
  LContc: TMenuItem;
  DCont: TMenuItem;
  DLeft: TMenuItem;
  Drit: TMenuItem;
  N8: TMenuItem;
  DVst: TMenuItem;
  DPint: TMenuItem;
  DOvr: TMenuItem;
  N12: TMenuItem;
  DMinfo: TMenuItem;
  DTInfo: TMenuItem;
  DCinfo: TMenuItem;
  DVsinfo: TMenuItem;
  DPinfo: TMenuItem;
  DOInfo: TMenuItem;
  Images: TMenuItem;
  Isets: TMenuItem;
  N5: TMenuItem;
  ISites: TMenuItem;
  ILefttop: TMenuItem;
  IleftBtn: TMenuItem;
  Irittop: TMenuItem;
  Iritbtn: TMenuItem;
  N6: TMenuItem;
  ICn: TMenuItem;
  IBlend: TMenuItem;
  N10: TMenuItem;
  IChang: TMenuItem;
  ILftTop: TMenuItem;
  NoL: TMenuItem;
  Isapce: TMenuItem;
  Illt: TMenuItem;
  Ilrl: TMenuItem;
  ILAll: TMenuItem;
  N9: TMenuItem;
  Ireset: TMenuItem;
  VInfo: TMenuItem;
  VCont: TMenuItem;
  VStatus: TMenuItem;
  Vlist: TMenuItem;
  N11: TMenuItem;
  Full: TMenuItem;
  N14: TMenuItem;
  VPrev: TMenuItem;
  N15: TMenuItem;
  N17: TMenuItem;
  N431: TMenuItem;
  N541: TMenuItem;
  N1691: TMenuItem;
  VPind: TMenuItem;
  N501: TMenuItem;
  N1001: TMenuItem;
  N2001: TMenuItem;
  HInfo: TMenuItem;
  HUrl: TMenuItem;
  Huser: TMenuItem;
  OpenFile: TOpenDialog;
  FilterGraph1: TFilterGraph;
  Panel1: TPanel;
  Panel2: TPanel;
  Panel3: TPanel;
  Splitter1: TSplitter;
  Panel5: TDSVideoWindowEx2;
  Panel4: TPanel;
  spdAdd: TSpeedButton;
  spdDet: TSpeedButton;
  spdMod: TSpeedButton;
  Lspearet: TLabel;
  TreeView1: TTreeView;
  Titles: TLabel;
  Timers: TLabel;
  Panel65: TDSVideoWindowEx2;
  Panel64: TDSVideoWindowEx2;
  FilterGraph2: TFilterGraph;
  ToolBar1: TToolBar;
  tlbPlay: TToolButton;
  tlbPausd: TToolButton;
  tlbStopd: TToolButton;
  ToolButton4: TToolButton;
  tlbPre: TToolButton;
  tlbLft: TToolButton;
  tlbRit: TToolButton;
  tlbNxt: TToolButton;
  ImageList1: TImageList;
  ImageList2: TImageList;
  ImageList3: TImageList;
  PopupMenu1: TPopupMenu;
  Pausd1: TMenuItem;
  Stopd1: TMenuItem;
  Stepd1: TMenuItem;
  Provd1: TMenuItem;
  Nextd1: TMenuItem;
  LCont1: TMenuItem;
  Lgoto1: TMenuItem;
  LQrit1: TMenuItem;
  LQleft1: TMenuItem;
  Lmax1: TMenuItem;
  Lmin1: TMenuItem;
  Lplayer1: TMenuItem;
  Lleft1: TMenuItem;
  Lrit1: TMenuItem;
  DCont1: TMenuItem;
  DOInfo1: TMenuItem;
  DPinfo1: TMenuItem;
  DVsinfo1: TMenuItem;
  DCinfo1: TMenuItem;
  DTInfo1: TMenuItem;
  DMinfo1: TMenuItem;
  N24: TMenuItem;
  DOvr1: TMenuItem;
  DPint1: TMenuItem;
  DVst1: TMenuItem;
  N28: TMenuItem;
  Drit1: TMenuItem;
  DLeft1: TMenuItem;
  N18: TMenuItem;
  Images1: TMenuItem;
  Ireset1: TMenuItem;
  N21: TMenuItem;
  ILftTop1: TMenuItem;
  ILAll1: TMenuItem;
  Ilrl1: TMenuItem;
  Illt1: TMenuItem;
  N27: TMenuItem;
  NoL1: TMenuItem;
  IChang1: TMenuItem;
  N31: TMenuItem;
  IBlend1: TMenuItem;
  ISites1: TMenuItem;
  ICn1: TMenuItem;
  N35: TMenuItem;
  Iritbtn1: TMenuItem;
  Irittop1: TMenuItem;
  IleftBtn1: TMenuItem;
  ILefttop1: TMenuItem;
  N40: TMenuItem;
  Isets1: TMenuItem;
  N19: TMenuItem;
  Full1: TMenuItem;
  VPrev1: TMenuItem;
  N1692: TMenuItem;
  N542: TMenuItem;
  N432: TMenuItem;
  N22: TMenuItem;
  N23: TMenuItem;
  N20: TMenuItem;
  LValue1: TMenuItem;
  NValue1: TMenuItem;
  DValue1: TMenuItem;
  UValue1: TMenuItem;
  LVOut1: TMenuItem;
  rightV1: TMenuItem;
  LeftV1: TMenuItem;
  NoValue1: TMenuItem;
  N37: TMenuItem;
  LPerent1: TMenuItem;
  LPInfo1: TMenuItem;
  LAll1: TMenuItem;
  NoAll1: TMenuItem;
  LOver1: TMenuItem;
  LQuited1: TMenuItem;
  N45: TMenuItem;
  LClosed1: TMenuItem;
  LSleep1: TMenuItem;
  LQuit1: TMenuItem;
  N49: TMenuItem;
  LBKey1: TMenuItem;
  N25: TMenuItem;
  LChosed1: TMenuItem;
  LContc1: TMenuItem;
  N26: TMenuItem;
  PrintS1: TMenuItem;
  Propty1: TMenuItem;
  PopupMenu2: TPopupMenu;
  CLst: TMenuItem;
  CSave: TMenuItem;
  N29: TMenuItem;
  CInfo: TMenuItem;
  CDInfo: TMenuItem;
  CAll: TMenuItem;
  Atype: TMenuItem;
  CNil: TMenuItem;
  CPet: TMenuItem;
  COrder: TMenuItem;
  CUsed: TMenuItem;
  PopupMenu3: TPopupMenu;
  CNil1: TMenuItem;
  CPet1: TMenuItem;
  COrder1: TMenuItem;
  CUsed1: TMenuItem;
  PopupMenu4: TPopupMenu;
  CShow: TMenuItem;
  Pausd2: TMenuItem;
  LChosed2: TMenuItem;
  N30: TMenuItem;
  close1: TMenuItem;
  Precedure: TShape;
  xp: TXPMenu;
  ImgMove: TImage;
  Panel61: TPanel;
  Voic: TShape;
  ImgVoic: TImage;
  VolMint: TSpeedButton;
  Timer1: TTimer;
  SaveP: TSampleGrabber;
  SaveT: TSampleGrabber;
  Timer2: TTimer;
  lblSave: TLabel;
  Timer3: TTimer;
  SaveDialog1: TSaveDialog;
  procedure Panel1Resize(Sender: TObject);
  procedure spdModClick(Sender: TObject);
  procedure CNil1Click(Sender: TObject);
  procedure CPet1Click(Sender: TObject);
  procedure COrder1Click(Sender: TObject);
  procedure CUsed1Click(Sender: TObject);
  procedure CNilClick(Sender: TObject);
  procedure CPetClick(Sender: TObject);
  procedure COrderClick(Sender: TObject);
  procedure CUsedClick(Sender: TObject);
  procedure FormCreate(Sender: TObject);
  procedure Panel3Resize(Sender: TObject);
  procedure ImgMoveMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  procedure ImgMoveMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  procedure ImgMoveMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  procedure VStatusClick(Sender: TObject);
  procedure VlistClick(Sender: TObject);
  procedure VContClick(Sender: TObject);
  procedure ImgVoicMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  procedure ImgVoicMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  procedure PrecedureMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  procedure ImgVoicMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);

解决方案 »

  1.   

    http://6691909.doubao.com  procedure VoicMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
      procedure NValueClick(Sender: TObject);
      procedure OpenPtClick(Sender: TObject);
      procedure DVDClick(Sender: TObject);
      procedure OpenFClick(Sender: TObject);
      procedure Timer1Timer(Sender: TObject);
      procedure TreeView1DblClick(Sender: TObject);
      procedure Timer2Timer(Sender: TObject);
      procedure tlbRitClick(Sender: TObject);
      procedure tlbLftClick(Sender: TObject);
      procedure tlbPlayClick(Sender: TObject);
      procedure tlbPausdClick(Sender: TObject);
      procedure tlbStopdClick(Sender: TObject);
      procedure tlbPreClick(Sender: TObject);
      procedure tlbNxtClick(Sender: TObject);
      procedure spdDetClick(Sender: TObject);
      procedure QuitClick(Sender: TObject);
      procedure spdAddClick(Sender: TObject);
      procedure FilterGraph1GraphComplete(sender: TObject; Result: HRESULT;
      Renderer: IBaseFilter);
      procedure N15Click(Sender: TObject);
      procedure N17Click(Sender: TObject);
      procedure N431Click(Sender: TObject);
      procedure N541Click(Sender: TObject);
      procedure N1691Click(Sender: TObject);
      procedure FormResize(Sender: TObject);
      procedure N501Click(Sender: TObject);
      procedure N1001Click(Sender: TObject);
      procedure N2001Click(Sender: TObject);
      procedure PausdClick(Sender: TObject);
      procedure Panel5MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
      procedure Panel5Click(Sender: TObject);
      procedure Panel5DblClick(Sender: TObject);
      procedure OpenuClick(Sender: TObject);
      procedure FullClick(Sender: TObject);
      procedure Full1Click(Sender: TObject);
      procedure PrintSClick(Sender: TObject);
      procedure Timer3Timer(Sender: TObject);
      procedure lblSaveDblClick(Sender: TObject);
      procedure MainClick(Sender: TObject);
      procedure FormDestroy(Sender: TObject);
      procedure ClrHisClick(Sender: TObject);
      procedure FormClose(Sender: TObject; var Action: TCloseAction);
      procedure ExitClrClick(Sender: TObject);
      procedure TreeView1AdvancedCustomDraw(Sender: TCustomTreeView;
      const ARect: TRect; Stage: TCustomDrawStage;
      var DefaultDraw: Boolean);
      procedure close1Click(Sender: TObject);
      procedure CShowClick(Sender: TObject);
      procedure ExitedClick(Sender: TObject);
      procedure Pausd2Click(Sender: TObject);
      procedure CInfoClick(Sender: TObject);
      procedure CDInfoClick(Sender: TObject);
      procedure CAllClick(Sender: TObject);
      procedure CSaveClick(Sender: TObject);
      procedure PopupMenu2Popup(Sender: TObject);
      procedure TreeView1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
      procedure File1Click(Sender: TObject);
      procedure CLstClick(Sender: TObject);
      private
      { Private declarations }
      procedure WMTrayMessage(var msg:TMessage);message WM_TrayMessage;
      procedure AppMinimized(Sender:TObject);
      public
      { Public declarations }
      end;var
      MainInfo: TMainInfo;
      nid:TNotifyIconData;
      PLists:pPListItem;
      PIndex:integer;
      Pt:tpoint;
      r:trect;
      plist:array [1..6] of string;
       
    implementationuses MainN, SetUrl;{$R *.dfm}procedure TMainInfo.Panel1Resize(Sender: TObject);
    begin
      panel5.Width:=panel1.Width;
      panel5.Height:=panel1.Height-HstusHeight;
      timers.Top:=panel1.Height-HstusHeight+1;
      titles.Top:=timers.Top;
      timers.Left:=panel1.Width-110;
      titles.Width:=panel1.Width-110;
    end;procedure TMainInfo.spdModClick(Sender: TObject);
    begin
      popupmenu3.Popup(mouse.CursorPos.X,mouse.CursorPos.Y);
    end;procedure TMainInfo.CNil1Click(Sender: TObject);
    begin
      SetMoveType(0);
    end;procedure TMainInfo.CPet1Click(Sender: TObject);
    begin
      SetMoveType(1);
    end;procedure TMainInfo.COrder1Click(Sender: TObject);
    begin
      SetMoveType(2);
    end;procedure TMainInfo.CUsed1Click(Sender: TObject);
    begin
      SetMoveType(3);
    end;procedure TMainInfo.CNilClick(Sender: TObject);
    begin
      SetMoveType(0);
    end;procedure TMainInfo.CPetClick(Sender: TObject);
    begin
      SetMoveType(1);
    end;procedure TMainInfo.COrderClick(Sender: TObject);
    begin
      SetMoveType(2);
    end;procedure TMainInfo.CUsedClick(Sender: TObject);
    begin
      SetMoveType(3);
    end;procedure TMainInfo.FormCreate(Sender: TObject);
    begin
      Application.OnMinimize:=AppMinimized;  
      AppMinimized(nil);
      SetSysIniInfo1;
      SetsysIniInfo;
    end;procedure TMainInfo.Panel3Resize(Sender: TObject);
    begin
      Precedure.Width:=panel3.Width-16;
      Panel61.Left:=panel3.Width-Panel61.Width;
    end;procedure TMainInfo.ImgMoveMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      HProCheck:=false;
      timer2.Enabled:=true;
    end;procedure TMainInfo.PrecedureMouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      imgmove.Left:=x;
      Setpostion(Plength*imgmove.Left div Precedure.Width);
    end;procedure TMainInfo.ImgMoveMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      HProCheck:=true;
      timer2.Enabled:=false;
    end;procedure TMainInfo.ImgMoveMouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
    begin
      if HProCheck then exit;
      if (imgmove.Left+x>=8) and (imgmove.Left+x<panel3.Width-8) then
      imgmove.Left:=imgmove.Left+x-8;
    end;procedure TMainInfo.VStatusClick(Sender: TObject);
    begin
      if HstusHeight=0 then
      HstusHeight:=15
      else
      HstusHeight:=0;
      panel5.Height:=panel1.Height-HstusHeight;
      VStatus.Checked:=GetBilInfo(HstusHeight);
      IsSizd:=true;
      SetShowRect;
    end;procedure TMainInfo.VlistClick(Sender: TObject);
    begin
      if Splitter1.Width=0 then
      begin
      Splitter1.Width:=3;
      panel2.Width:=160;
      end
      else
      begin
      Splitter1.Width:=0;
      panel2.Width:=0;
      end;
      Vlist.Checked:=GetBilInfo(Splitter1.Width);
      IsSizd:=true;
      SetShowRect;
    end;procedure TMainInfo.VContClick(Sender: TObject);
    begin
      if panel3.Height=0 then
      panel3.Height:=60
      else
      panel3.Height:=0;
      VCont.Checked:=GetBilInfo(panel3.Height);
      IsSizd:=true;
      SetShowRect;
    end;procedure TMainInfo.ImgVoicMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      HVoic:=false;
    end;procedure TMainInfo.ImgVoicMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      HVoic:=true;
    end;procedure TMainInfo.ImgVoicMouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
    begin
      if HVoic then exit;
      if (ImgVoic.Left+x>=60) and (ImgVoic.Left+x<160) then
      ImgVoic.Left:=ImgVoic.Left+x-8;
      SetVoicVolue;
    end;procedure TMainInfo.VoicMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      ImgVoic.Left:=52+x;
      SetVoicVolue;
    end;procedure TMainInfo.NValueClick(Sender: TObject);
    begin
      nvalue.Checked:=not nvalue.Checked;
      nvalue1.Checked:=nvalue.Checked;
      if NValue.Checked then
      VolMint.Glyph.LoadFromFile(SystemPath+'Bmp\a2.bmp')
      else
      VolMint.Glyph.LoadFromFile(SystemPath+'Bmp\a.bmp');
      volumetype:=0;
      if NValue.Checked then volumetype:=-1;
      SetVoicVolue;
    end;procedure TMainInfo.OpenPtClick(Sender: TObject);
    begin
      SetDirSet;
    end;procedure TMainInfo.WMTrayMessage(var msg:TMessage);
    var  
      p:tpoint;  
    begin  
      if msg.lparam=wm_lbuttondown then
      begin
      showwindow(application.handle,sw_show);
      application.restore;
      end
      else if msg.lparam=wm_rbuttondown then
      begin
      getcursorpos(p);
      popupmenu4.Popup(p.x,p.y);
      end;  
    end;  procedure TMainInfo.AppMinimized(Sender:TObject);  
    begin
      nid.cbsize:=sizeof(tnotifyicondata);
      nid.hicon:=application.icon.handle;
      nid.sztip:='和风播放器v1.03';
      nid.ucallbackmessage:=wm_traymessage;
      nid.uflags:=nif_icon or nif_message or nif_tip;
      nid.uid:=0;
      nid.wnd:=handle;
      shell_notifyIcon(nim_add,@nid);
      showwindow(application.handle,sw_hide);
    end;procedure TMainInfo.DVDClick(Sender: TObject);
    begin
      with sender as tmenuitem do
      chdir(leftbstr(caption,3));
      if OpenFiles<>'' then quit.Click;
      treeview1.Items.Clear;
      systemchked('delete from 0');
      SetDirFile;
    end;procedure TMainInfo.OpenFClick(Sender: TObject);
    var
      i:integer;
      n:ttreenode;
      a:string;
    begin
      OpenFile.Title:='打开影音文件';
      OpenFile.Options:=[ofAllowMultiSelect,ofPathMustExist,ofFileMustExist];
      OpenFile.Filter:='所有文件(*.*)|*.*';
      with treeview1 do
      if OpenFile.Execute then
      begin
      Items.Clear;
      systemchked('delete from 0');
      for i:=0 to OpenFile.files.count-1 do
      begin
      a:=OpenFile.Files.Strings[i];
      new(plists);
      plists.ID:=items.Count+1;
      plists.Name:=a;
      n:=items.AddObject(nil,extractfilename(a),plists);
      n.SelectedIndex:=1;
      systemchked('insert into 0([id],[name]) values('+inttostr(items.Count)+',"'+a+'")');
      end;
      Pindex:=0;
      playfile(OpenFile.FileName);
      end;
    end;
      

  2.   


    procedure TMainInfo.Timer1Timer(Sender: TObject);
    var
      c:IMediaSeeking;
      a:int64;
    begin
      if (IsExit=0) or (FilterGraph1.State=gsStopped) then exit;
      FilterGraph1.QueryInterface(IMediaSeeking,c);
      c.GetCurrentPosition(a);
      Pposed:=a div llens;
      timers.Caption:=format('%d:%2.2d:%2.2d',[Pposed div 3600000,(Pposed mod 3600000) div 60000,((Pposed mod 3600000) mod 60000) div 1000])+' / '+PStoped;
      if HProCheck then
      imgmove.Left:=Precedure.Width*Pposed div Plength;
    end;procedure TMainInfo.TreeView1DblClick(Sender: TObject);
    begin
      with treeview1 do
      begin
      if (Items.Count=0) or (Selected.Index=-1) then exit;
      Pindex:=Selected.AbsoluteIndex;
      playfile(pPListItem(selected.Data).Name);
      end;
    end;procedure TMainInfo.Timer2Timer(Sender: TObject);
    begin
      Setpostion(Plength*imgmove.Left div Precedure.Width);
    end;procedure TMainInfo.tlbRitClick(Sender: TObject);
    begin
      if (OpenFiles='') or (FilterGraph1.State<>gsPlaying) then exit;
      if (prate<1) or (prate=2) then
      Prate:=1
      else
      prate:=prate+0.25;
      SetStatusInfo('播放中');
    end;procedure TMainInfo.tlbLftClick(Sender: TObject);
    begin
      if (OpenFiles='') or (FilterGraph1.State<>gsPlaying) then exit;
      if (prate>1) or (prate=0.25) then
      Prate:=1
      else
      prate:=prate-0.25;
      SetStatusInfo('播放中');
    end;procedure TMainInfo.tlbPlayClick(Sender: TObject);
    var
      b:boolean;
    begin
      if (OpenFiles='') and (treeview1.Selected.Index<>-1) then
      begin
      pindex:=treeview1.Selected.AbsoluteIndex;
      playfile(pPListItem(treeview1.selected.Data).Name);
      end;
      if OpenFiles='' then exit;
      tlbpausd.Enabled:=true;
      tlbstopd.Enabled:=true;
      b:=true;
      if treeview1.Items.Count=1 then b:=false;
      tlbpre.Enabled:=b;
      tlbnxt.Enabled:=b;
      tlblft.Enabled:=true;
      tlbrit.Enabled:=true;
      quit.Enabled:=true;
      if (FilterGraph1.State=gsPlaying) and (prate<>1) then prate:=1;
      FilterGraph1.Play;
      SetStatusInfo('播放中');
    end;procedure TMainInfo.tlbPausdClick(Sender: TObject);
    begin
      if OpenFiles='' then exit;
      tlbPlay.Enabled:=true;
      tlbpausd.Enabled:=false;
      tlbstopd.Enabled:=true;
      tlblft.Enabled:=false;
      tlbrit.Enabled:=false;
      FilterGraph1.Pause;
      SetStatusInfo('暂停 ');
    end;procedure TMainInfo.tlbStopdClick(Sender: TObject);
    begin
      if OpenFiles='' then exit;
      tlbPlay.Enabled:=true;
      tlbpausd.Enabled:=false;
      tlbstopd.Enabled:=false;
      tlblft.Enabled:=false;
      tlbrit.Enabled:=false;
      FilterGraph1.Stop;
      panel5.Width:=0;
      panel5.Width:=panel1.Width;
      setpostion(0);
      Pposed:=0;
      ImgMove.Left:=0;
      SetStatusInfo('停止 ');
    end;procedure TMainInfo.tlbPreClick(Sender: TObject);
    var
      n:ttreenode;
    begin
      with treeview1 do
      begin
      n:=Items[pindex];
      repeat
      if n.getPrevSibling<>nil then
      n:=n.getPrevSibling
      else
      if n.Parent<>nil then
      n:=n.Parent
      else
      begin
      n:=items[items.count-1];
      while n.Parent<>nil do
      n:=n.Parent;
      end;
      until pos(lowercase(extractfileext(n.Text)),strlsts)=0;
      Pindex:=n.AbsoluteIndex;
      playfile(pPListItem(selected.Data).Name);
      end;
    end;procedure TMainInfo.tlbNxtClick(Sender: TObject);
    var
      n:ttreenode;
    begin
      with treeview1 do
      begin
      n:=Items[pindex];
      repeat
      if n.getNextSibling<>nil then
      n:=n.getNextSibling
      else
      if n.Parent<>nil then
      n:=n.Parent
      else
      n:=items[0];
      until pos(lowercase(extractfileext(n.Text)),strlsts)=0;
      Pindex:=n.AbsoluteIndex;
      playfile(pPListItem(selected.Data).Name);
      end;
    end;procedure TMainInfo.spdDetClick(Sender: TObject);
    begin
      with treeview1 do
      begin
      if (Items.Count=0) or (Selected.index=-1) then exit;
      plists:=pPListItem(selected.Data);
      if plists.Name=OpenFiles then quit.Click;
      systemchked('delete from 0 where id='+inttostr(plists.id));
      selected.Delete;
      end;
    end;procedure TMainInfo.QuitClick(Sender: TObject);
    begin
      tlbPlay.Enabled:=true;
      tlbpausd.Enabled:=false;
      tlbstopd.Enabled:=false;
      tlbpre.Enabled:=false;
      tlbnxt.Enabled:=false;
      tlblft.Enabled:=false;
      tlbrit.Enabled:=false;
      OpenFiles:='';
      FilterGraph1.Active:=false;
      ImgMove.Left:=0;
      quit.Enabled:=false;
      timer1.Enabled:=false;
      titles.Caption:='准备就绪';
    end;procedure TMainInfo.spdAddClick(Sender: TObject);
    var
      n:ttreenode;
      a:string;
      i,j:integer;
    begin
      OpenFile.Title:='添加影音文件';
      OpenFile.Options:=[ofAllowMultiSelect,ofPathMustExist,ofFileMustExist];
      OpenFile.Filter:='所有文件(*.*)|*.*';
      with treeview1 do
      if OpenFile.Execute then
      begin
      if Getrst('select * from 0').Eof then
      j:=1
      else
      j:=Getrst('select max(id) as id from 0').FieldValues['id'];
      j:=j-items.Count;
      for i:=0 to OpenFile.files.count-1 do
      begin
      a:=OpenFile.Files.Strings[i];
      if Getrst('select * from 0 where [name]="'+a+'"').RecordCount>0 then continue;
      new(plists);
      plists.ID:=j+items.Count+1;
      plists.Name:=a;
      n:=items.AddObject(nil,extractfilename(a),plists);
      n.SelectedIndex:=1;
      systemchked('insert into 0([id],[name]) values('+inttostr(plists.ID)+',"'+a+'")');
      end;
      end;
    end;procedure TMainInfo.FilterGraph1GraphComplete(sender: TObject;
      Result: HRESULT; Renderer: IBaseFilter);
    begin
      case HMoveType of
      0:tlbstopd.Click;
      1:tlbNxt.click;
      2:
      begin
      repeat
      randomize;
      pindex:=random(treeview1.items.Count);
      until pos(lowercase(extractfileext(treeview1.items[pindex].Text)),strlsts)=0;
      playfile(pPListItem(treeview1.items[pindex].Data).Name);
      end;
      3:
      begin
      setpostion(0);
      FilterGraph1.Play;
      end;
      end;
    end;procedure TMainInfo.N15Click(Sender: TObject);
    begin
      SetSizType(0);
    end;procedure TMainInfo.N17Click(Sender: TObject);
    begin
      SetSizType(1);
    end;procedure TMainInfo.N431Click(Sender: TObject);
    begin
      SetSizType(2);
    end;procedure TMainInfo.N541Click(Sender: TObject);
    begin
      SetSizType(3);
    end;procedure TMainInfo.N1691Click(Sender: TObject);
    begin
      SetSizType(4);
    end;procedure TMainInfo.FormResize(Sender: TObject);
    begin
      IsSizd:=false;
      SetShowRect;
    end;procedure TMainInfo.N501Click(Sender: TObject);
    begin
      SetPrcType(0);
    end;procedure TMainInfo.N1001Click(Sender: TObject);
    begin
      SetPrcType(1);
    end;procedure TMainInfo.N2001Click(Sender: TObject);
    begin
      SetPrcType(2);
    end;procedure TMainInfo.PausdClick(Sender: TObject);
    begin
      if (OpenFiles='') or (FilterGraph1.State=gsStopped) then exit;
      if FilterGraph1.State=gsPlaying then
      tlbpausd.Click
      else if FilterGraph1.State=gsPaused then
      tlbPlay.Click;
    end;procedure TMainInfo.Panel5MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      Pt:=point(x,y);
    end;procedure TMainInfo.Panel5Click(Sender: TObject);
    begin
      if IsMusc or (pt.X<rt.Left) or (pt.X>rt.Left+rt.Right) or (pt.Y<rt.Top) or (pt.Y>rt.Top+rt.Bottom) then exit;
      Pausd.Click;
    end;
      

  3.   

    procedure TMainInfo.Panel5DblClick(Sender: TObject);
    begin
      if IsMusc or (pt.X<rt.Left) or (pt.X>rt.Left+rt.Right) or (pt.Y<rt.Top) or (pt.Y>rt.Top+rt.Bottom) then exit;
      with maininfo do
      begin
      HWinFull:=not HWinFull;
      visible:=false;
      if HWinFull then
      begin
      File1.Visible:=false;
      Lplay.Visible:=false;
      DCont.Visible:=false;
      Images.Visible:=false;
      VInfo.Visible:=false;
      HInfo.Visible:=false;
      r.Left:=maininfo.left;
      r.Top:=maininfo.left;
      r.Right:=maininfo.width;
      r.Bottom:=maininfo.height;
      panel3.Height:=0;
      Splitter1.Width:=0;
      panel2.Width:=0;
      setwindowlong(handle,gwl_style,getwindowlong(handle,gwl_style) and not ws_caption);
      setwindowpos(handle,hwnd_topmost,-4,-4,screen.Width+8,screen.Height+8,0);
      end
      else
      begin
      File1.Visible:=true;
      Lplay.Visible:=true;
      DCont.Visible:=true;
      Images.Visible:=true;
      VInfo.Visible:=true;
      HInfo.Visible:=true;
      panel3.Height:=60;
      Splitter1.Width:=3;
      panel2.Width:=160;
      setwindowlong(handle,gwl_style,getwindowlong(handle,gwl_style) or ws_caption);
      setwindowpos(handle,hwnd_notopmost,r.Left,r.Top,r.Right,r.Bottom,0);
      end;
      visible:=true;
      FilterGraph1.Play;
      SetStatusInfo('播放中');
      full.Checked:=HWinFull;
      full1.Checked:=HWinFull;
      SetShowRect;
      end;
    end;procedure TMainInfo.OpenuClick(Sender: TObject);
    begin
      MainUser:=tMainUser.Create(nil);
      MainUser.ShowModal;
    end;procedure TMainInfo.FullClick(Sender: TObject);
    begin
      pt.X:=rt.Left;
      Panel5DblClick(nil);
    end;procedure TMainInfo.Full1Click(Sender: TObject);
    begin
      fullclick(nil);
    end;procedure TMainInfo.PrintSClick(Sender: TObject);
    var
      a:string;
    begin
      a:=formatdatetime('yyyymmddhhmmss',now)+'.bmp';
      lblSave.Caption:='图片已保存:'+a;
      lblsave.Width:=200;
      SaveP.GetBitmap(bzt);
      bzt.SaveToFile(PicLujin+a);
      timer3.Enabled:=false;
      timer3.Enabled:=true;
    end;procedure TMainInfo.Timer3Timer(Sender: TObject);
    begin
      timer3.Enabled:=false;
      lblsave.Width:=0;
    end;procedure TMainInfo.lblSaveDblClick(Sender: TObject);
    begin
      shellexecute(maininfo.handle,'open',pansichar(PicLujin),nil,nil,sw_show);
    end;procedure TMainInfo.MainClick(Sender: TObject);
    var
      n:ttreenode;
      a:string;
    begin
      with sender as tmenuitem do
      a:=Getrst('select name from (select top '+inttostr(his.count-MenuIndex)+' * from 1 order by id) order by id desc').FieldValues['name'];
      systemchked('delete from 0');
      treeview1.Items.Clear;
      new(plists);
      plists.ID:=1;
      plists.Name:=a;
      n:=treeview1.Items.InsertObject(nil,extractfilename(a),Plists);
      n.SelectedIndex:=1;
      systemchked('insert into 0([id],[name]) values(1,"'+a+'")');
      Pindex:=0;
      playfile(a);
    end;procedure TMainInfo.FormDestroy(Sender: TObject);
    begin
      IsExit:=0;
      cn.Free;
      rs.Free;
      bzt.free;
      FilterGraph1.Free;
      panel5.Free;
      FilterGraph2.Free;
      SaveP.Free;
      SaveT.Free;
    end;procedure TMainInfo.ClrHisClick(Sender: TObject);
    begin
      systemchked('delete from 1');
      while his.Count>4 do his.Delete(4);
      if OpenFiles<>'' then SetMenuInfo(-1,OpenFiles);
    end;procedure TMainInfo.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      if ExitClr.Checked then systemchked('delete from 1 where [name]<>"'+OpenFiles+'"');
      if openfiles<>'' then systemchked('update 2 set [openfs]="'+openfiles+'",[openstus]='+floattostr(Pposed));
    end;procedure TMainInfo.ExitClrClick(Sender: TObject);
    begin
      exitclr.Checked:=not exitclr.Checked;
      systemchked('update 2 set Openclr='+booltostr(exitclr.Checked));
    end;procedure TMainInfo.TreeView1AdvancedCustomDraw(Sender: TCustomTreeView;
      const ARect: TRect; Stage: TCustomDrawStage; var DefaultDraw: Boolean);
    begin
      showscrollbar(sender.Handle,SB_HORZ,false);
    end;procedure TMainInfo.close1Click(Sender: TObject);
    begin
      Exited.Click;
    end;procedure TMainInfo.CShowClick(Sender: TObject);
    var
      m:TMessage;
    begin
      m.lparam:=wm_lbuttondown;
      WMTrayMessage(m);
    end;procedure TMainInfo.ExitedClick(Sender: TObject);
    begin
      close;
    end;procedure TMainInfo.Pausd2Click(Sender: TObject);
    begin
      PausdClick(nil);
    end;procedure TMainInfo.CInfoClick(Sender: TObject);
    begin
      spdadd.Click;
    end;procedure TMainInfo.CDInfoClick(Sender: TObject);
    begin
      spddet.Click;
    end;procedure TMainInfo.CAllClick(Sender: TObject);
    begin
      if OpenFiles<>'' then quit.Click;
      systemchked('delete from 0');
      treeview1.Items.Clear;
    end;procedure TMainInfo.CSaveClick(Sender: TObject);
    var
      s:textfile;
      n:ttreenode;
      a,b:string;
      i:integer;
    begin
      SaveDialog1.Title:='另保存';
      SaveDialog1.Options:=[ofPathMustExist,ofOverwritePrompt,ofFileMustExist];
      SaveDialog1.Filter:='mlst 列表文件(*.mlst)|*.mlst|m3u 列表文件(*.m3u)|*.m3u|wax 列表文件(*.wax)|*.wax|asx 列表文件(*.asx)|*.asx|wpl 列表文件(*.wpl)|*.wpl|pls 列表文件(*.pls)|*.pls';
      if SaveDialog1.Execute=false then exit;
      a:=SaveDialog1.FileName;
      if pos(plist[SaveDialog1.FilterIndex],a)=0 then
      a:=a+plist[SaveDialog1.FilterIndex];
      b:=lowercase(extractfileext(a));
      assignfile(s,a);
      rewrite(s);
      n:=treeview1.Items[0];
      if b='.wpl' then writeln(s,'<smil>');
      if b='.asx' then writeln(s,'<Asx>');
      if b='.pls' then writeln(s,'[playlist]');
      i:=0;
      repeat
      i:=i+1;
      a:=pPListItem(n.Data).Name;
      if b='.wpl' then writeln(s,'<media src="'+a+'"/>');
      if b='.asx' then writeln(s,'<Entry>');
      if b='.asx' then writeln(s,'<Ref href="'+a+'"/>');
      if b='.asx' then writeln(s,'</Entry>');
      if b='.pls' then writeln(s,'File'+inttostr(i)+'='+a);
      if pos(b,ExtLsts)=0 then writeln(s,a);
      n:=n.getNextSibling;
      until n=nil;
      if b='.wpl' then writeln(s,'</smil>');
      if b='.asx' then writeln(s,'</Asx>');
      if b='.pls' then writeln(s,'numberofentries='+inttostr(i));
      closefile(s);
    end;procedure TMainInfo.PopupMenu2Popup(Sender: TObject);
    var
      a:boolean;
    begin
      a:=false;
      if treeview1.Items.Count>0 then a:=true;
      CSave.Enabled:=a;
      CDInfo.Enabled:=a;
      CAll.Enabled:=a;
      Atype.Enabled:=a;
    end;procedure TMainInfo.TreeView1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if key=46 then spddet.Click;
    end;procedure TMainInfo.File1Click(Sender: TObject);
    begin
      PrintS.Enabled:=true;
      if (OpenFiles='') or IsMusc or (FilterGraph1.State=gsStopped) then
      PrintS.Enabled:=false;
    end;procedure TMainInfo.CLstClick(Sender: TObject);
    var
      i:integer;
      a,b:string;
      s:textfile;
      n:ttreenode;
    begin
      Openfile.Title:='添加列表文件';
      Openfile.Options:=[ofPathMustExist,ofFileMustExist];
      Openfile.Filter:='mlst 列表文件(*.mlst)|*.mlst|m3u 列表文件(*.m3u)|*.m3u|wax 列表文件(*.wax)|*.wax|asx 列表文件(*.asx)|*.asx|wpl 列表文件(*.wpl)|*.wpl|pls 列表文件(*.pls)|*.pls|所有文件(*.*)|*.*';
      if Openfile.Execute=false then exit;
      if openfiles<>'' then quit.Click;
      systemchked('delete from 0');
      treeview1.Items.Clear;
      a:=Openfile.FileName;
      b:=lowercase(extractfileext(a));
      if pos(b,ExtLsts)>0 then a:=GetLastFiles(a,b);
      assignfile(s,a);
      reset(s);
      i:=0;
      repeat
      i:=i+1;
      readln(s,a);
      a:=trimleft(a);
      if (a='') or (leftbstr(a,1)='#') then continue;
      new(plists);
      plists.ID:=i;
      plists.Name:=a;
      n:=treeview1.Items.InsertObject(nil,SetLastsName(a),PLists);
      n.SelectedIndex:=1;
      systemchked('insert into 0([id],[name]) values('+inttostr(i)+',"'+a+'")');
      until eof(s);
      closefile(s);
      if pos(b,ExtLsts)>0 then deletefile(SaveF);
    end;end.
      

  4.   


    是啊,我天天混在CSDN的。
      

  5.   

    这也算开源?playfile这个关键函数完全没有代码啊
      

  6.   

    我也开个源,是个很大很大的软件源码:#include "MyApp.cpp"