unit MainT;interface
   uses Classes, ExtCtrls, MPlayer, SysUtils, mmSystem;type
    myThread = class(TThread)
    private
      procedure SetMovieVolume;
      procedure SetPositionVolume;
    protected
      procedure Execute;override;
    public
      constructor Create();
end;type
    myThread2 = class(TThread)
    private
      procedure SetMovieVolume1;
    protected
      procedure Execute;override;
    public
      constructor Create(MediaPlayer:tMediaPlayer;Panel:tPanel;Image:tImage);
end;function SetSumTimes(Volumes:integer):string;var
   aImage:tImage;
   aMediaPlayer:tMediaPlayer;
   aPanel:tPanel;
   FSums:string;implementationuses MainF;function SetSumTimes(Volumes:integer):string;
begin
   SetSumTimes:=format('%.1d',[Volumes div 3600000])+':'+format('%.2d',[(Volumes mod 3600000) div 60000])+':'+format('%.2d',[((Volumes mod 3600000) mod 60000) div 1000]);
end;constructor myThread2.Create(MediaPlayer:tMediaPlayer;Panel:tPanel;Image:tImage);
begin
  inherited Create(false);
  aMediaPlayer:=MediaPlayer;
  aPanel:=Panel;
  aImage:=Image;
  aMediaPlayer.Wait:=false;
  aMediaPlayer.Notify:=true;
end;procedure myThread2.execute;
begin
   synchronize(SetMovieVolume1);
end;procedure myThread2.SetMovieVolume1;
begin
    aMediaPlayer.DeviceType:=dtAutoSelect;
    aMediaPlayer.Close;
    aMediaPlayer.FileName:=OpenNames;
    aMediaPlayer.Open;
    aMediaPlayer.Display:=aPanel;
    aMediaPlayer.TimeFormat:=tfMilliseconds;
    aMediaPlayer.DisplayRect:=rect(0,0,aPanel.Width,aPanel.Height);
    aMediaPlayer.Play;
    if OpenListIndex>-1 then
    begin
       aMediaPlayer.Position:=OpenListIndex;
       OpenListIndex:=-1;
       aMediaPlayer.Play;
    end;
    Fsums:=SetSumTimes(aMediaPlayer.Length);
end;constructor myThread.Create();
begin
  inherited Create(false);
end;procedure myThread.execute;
begin
   if MouseChecked then
     while MouseChecked do
     begin
        sleep(300);
        synchronize(SetMovieVolume);
        if terminated then exit;
     end
   else
     while aImage.Left<=form1.shpProcess.Left+form1.shpProcess.Width-11 do
     begin
       if MouseChecked then
          exit;
       sleep(300);
       synchronize(SetPositionVolume);
       if terminated then exit;
     end;
end;procedure myThread.SetPositionVolume;
begin
  if aMediaPlayer.Position>aMediaPlayer.Length then
     aImage.Left:=form1.shpProcess.Width+form1.shpProcess.Left-11
  else
     aImage.Left:=(aMediaPlayer.Position*form1.shpprocess.width) div aMediaPlayer.Length+form1.shpProcess.Left-11;
  form1.Timers.Caption:=SetSumTimes(aMediaPlayer.Position)+' / '+fsums;
end;procedure myThread.SetMovieVolume;
var
   position:integer;
begin
    position:=(aImage.Left-form1.shpProcess.Left+11)*aMediaPlayer.Length div form1.shpprocess.width;
    if aMediaPlayer.Mode=mpPlaying then
    begin
       aMediaPlayer.Position:=position;
       aMediaPlayer.Play
    end
    else
    if form1.ToolButton3.Enabled then
      aMediaPlayer.Position:=position;
end;end.

解决方案 »

  1.   

    function SetSumTimes(Volumes:integer):string; 
    begin 
      // function要用Result返回函数结果
      Result:=format('%.2d:%.2d:%.2d',[Volumes div 3600000,(Volumes mod 3600000) div 60000,((Volumes mod 3600000) mod 60000) div 1000]); 
    end; 
      

  2.   

    function 是待返回值的,直接用Result,不要再使用其他变量
      

  3.   

    unit MainT;interface
       uses Classes, ExtCtrls, MPlayer, SysUtils, mmSystem, StdCtrls, Forms, Dialogs;type
        myThread = class(TThread)
        private
          procedure SetMovieVolume;
          procedure SetPositionVolume;
        protected
          procedure Execute;override;
        public
          constructor Create();
    end;type
        myThread2 = class(TThread)
        private
          procedure SetMovieVolume1;
        protected
          procedure Execute;override;
        public
          constructor Create(MediaPlayer:tMediaPlayer;Panel:tPanel;Image:tImage);
    end;type
        myThread3 = class(TThread)
        private
          procedure SetDirFile;
        protected
          procedure Execute;override;
        public
          constructor Create(ListBox:tListbox;filePath:string);
    end;function SetSumTimes(Volumes:integer):string;var
       aImage:tImage;
       aMediaPlayer:tMediaPlayer;
       aPanel:tPanel;
       aListbox:tListbox;
       FSums:string;
       FileList:string;
       HPosition:integer;implementationuses MainF;constructor myThread3.Create(ListBox:tListbox;filePath:string);
    begin
      inherited Create(false);
      aListbox:=ListBox;
      FileList:='';
      if opennames<>'' then form1.quit.Click;
      aListbox.Items.Clear;
      chdir(filePath);
    end;procedure myThread3.execute;
    var
      i:integer;
      f1:textfile;
    begin
       SetDirFile;
       for i:=alistbox.Count+1 to 1000 do
       begin
          if FileNameList[i]='' then
             break;
          FileNameList[i]:='';
       end;
       assignfile(f1,systemPath+'\list\files.txt');
       rewrite(f1);
       writeln(f1,FileList);
       closefile(f1);
    end;procedure myThread3.SetDirFile;
    var
       sr:TSearchRec;
       err:integer;
       s:string;
    begin
       err:=findfirst('*.*',$37,sr);
       while (err=0) do
       begin
         if (sr.name[1]<>'.') then
         begin
           if (sr.attr and fadirectory)=0 then
           begin
             s:=extractfileext(sr.Name);
             if (pos(lowercase(s+';'),ExtList)>0) and (s<>'') then
             begin
                s:=AnsiUpperCase(expandfilename(sr.name));
                alistbox.Items.Add(extractfileName(s));
                FileNameList[alistbox.Count]:=s;
                if alistbox.Count=1 then
                   FileList:=s
                else
                   FileList:=FileList+'?'+s;
             end;
           end;
           if (sr.attr and fadirectory)=16 then
           begin
             chdir(sr.name);
             SetDirFile;
             chdir('..');
           end;
         end;
         err:=findnext(sr);
       end;
    end;function SetSumTimes(Volumes:integer):string;
    begin
       SetSumTimes:=format('%.1d',[Volumes div 3600000])+':'+format('%.2d',[(Volumes mod 3600000) div 60000])+':'+format('%.2d',[((Volumes mod 3600000) mod 60000) div 1000]);
    end;constructor myThread2.Create(MediaPlayer:tMediaPlayer;Panel:tPanel;Image:tImage);
    begin
      inherited Create(false);
      aMediaPlayer:=MediaPlayer;
      aPanel:=Panel;
      aImage:=Image;
      aMediaPlayer.Wait:=false;
      aMediaPlayer.Notify:=true;
    end;procedure myThread2.execute;
    begin
       synchronize(SetMovieVolume1);
    end;procedure myThread2.SetMovieVolume1;
    var
       c:string;
    begin
        try
        aMediaPlayer.DeviceType:=dtAutoSelect;
        aMediaPlayer.Close;
        aMediaPlayer.FileName:=OpenNames;
        aMediaPlayer.Open;
        aMediaPlayer.Display:=aPanel;
        aMediaPlayer.TimeFormat:=tfMilliseconds;
        aMediaPlayer.DisplayRect:=rect(0,0,aPanel.Width,aPanel.Height);
        aMediaPlayer.Play;
        if OpenListIndex>-1 then
        begin
           aMediaPlayer.Position:=OpenListIndex;
           OpenListIndex:=-1;
           aMediaPlayer.Play;
        end;
        Fsums:=SetSumTimes(aMediaPlayer.Length);
        except
           c:=extractfileext(opennames);
           showmessage('播放器不支持'+copy(c,2,length(c)-1)+'格式文件的播放!');
        end;
    end;constructor myThread.Create();
    begin
      inherited Create(false);
    end;procedure myThread.execute;
    begin
       if MouseChecked then
         while MouseChecked do
         begin
            synchronize(SetMovieVolume);
            if terminated then exit;
         end
       else
         while aImage.Left<=form1.shpProcess.Left+form1.shpProcess.Width-11 do
         begin
           if MouseChecked then
              exit;
           synchronize(SetPositionVolume);
           if terminated then exit;
         end;
    end;procedure myThread.SetPositionVolume;
    begin
      if aMediaPlayer.Position>aMediaPlayer.Length then
         aImage.Left:=form1.shpProcess.Width+form1.shpProcess.Left-11
      else
         if aMediaPlayer.Length>0 then
            aImage.Left:=(aMediaPlayer.Position*form1.shpprocess.width) div aMediaPlayer.Length+form1.shpProcess.Left-11;
      form1.Timers.Caption:=SetSumTimes(aMediaPlayer.Position)+' / '+fsums;
    end;procedure myThread.SetMovieVolume;
    var
       Position:integer;
    begin
        Position:=(aImage.Left-form1.shpProcess.Left+11)*aMediaPlayer.Length div form1.shpprocess.width;
        if HPosition=Position then exit;
        if aMediaPlayer.Mode=mpPlaying then
        begin
           aMediaPlayer.Position:=Position;
           aMediaPlayer.Play
        end
        else
        if form1.ToolButton3.Enabled then
           aMediaPlayer.Position:=Position;
        HPosition:=Position;
    end;end.
      

  4.   

    unit MainF;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, ImgList, ComCtrls, ToolWin, Menus, Buttons, StdCtrls,
      MPlayer, MMSystem, IniFiles;type
      TForm1 = class(TForm)
        Panel1: TPanel;
        Panel2: TPanel;
        Panel3: TPanel;
        Splitter1: TSplitter;
        MainMenu1: TMainMenu;
        N1: TMenuItem;
        N2: TMenuItem;
        DVD1: TMenuItem;
        DVD: TMenuItem;
        DVD2: TMenuItem;
        N3: TMenuItem;
        quit: TMenuItem;
        N5: TMenuItem;
        N6: TMenuItem;
        N7: TMenuItem;
        N8: TMenuItem;
        N9: TMenuItem;
        MainMenu: TMenuItem;
        N10: TMenuItem;
        N11: TMenuItem;
        N12: TMenuItem;
        N13: TMenuItem;
        N14: TMenuItem;
        N15: TMenuItem;
        N16: TMenuItem;
        N17: TMenuItem;
        N18: TMenuItem;
        N19: TMenuItem;
        N20: TMenuItem;
        N21: TMenuItem;
        N22: TMenuItem;
        N23: TMenuItem;
        N24: TMenuItem;
        N25: TMenuItem;
        N26: TMenuItem;
        N27: TMenuItem;
        N28: TMenuItem;
        N29: TMenuItem;
        N30: TMenuItem;
        N31: TMenuItem;
        N32: TMenuItem;
        N33: TMenuItem;
        N34: TMenuItem;
        N35: TMenuItem;
        N36: TMenuItem;
        N37: TMenuItem;
        N38: TMenuItem;
        N39: TMenuItem;
        N40: TMenuItem;
        N41: TMenuItem;
        N42: TMenuItem;
        N43: TMenuItem;
        N44: TMenuItem;
        N45: TMenuItem;
        N46: TMenuItem;
        N47: TMenuItem;
        N48: TMenuItem;
        N49: TMenuItem;
        N50: TMenuItem;
        N51: TMenuItem;
        N52: TMenuItem;
        N53: TMenuItem;
        N54: TMenuItem;
        ToolBar1: TToolBar;
        btn0: TToolButton;
        il1: TImageList;
        il2: TImageList;
        btn1: TToolButton;
        btn2: TToolButton;
        btn3: TToolButton;
        btn4: TToolButton;
        btn5: TToolButton;
        btn6: TToolButton;
        btn7: TToolButton;
        shpProcess: TShape;
        imgValue: TImage;
        btnVoice: TSpeedButton;
        shpVoice: TShape;
        imgVoice: TImage;
        pnl1: TPanel;
        btn9: TSpeedButton;
        btn10: TSpeedButton;
        btn11: TSpeedButton;
        lblTop: TLabel;
        lst1: TListBox;
        pnl2: TPanel;
        lblTitles: TLabel;
        lblTimers: TLabel;
        DVD3: TMenuItem;
        N55: TMenuItem;
        N56: TMenuItem;
        N57: TMenuItem;
        N58: TMenuItem;
        N59: TMenuItem;
        N60: TMenuItem;
        N61: TMenuItem;
        N62: TMenuItem;
        N63: TMenuItem;
        N64: TMenuItem;
        N65: TMenuItem;
        N66: TMenuItem;
        N67: TMenuItem;
        N68: TMenuItem;
        N69: TMenuItem;
        N70: TMenuItem;
        N71: TMenuItem;
        N72: TMenuItem;
        N73: TMenuItem;
        N74: TMenuItem;
        N75: TMenuItem;
        N76: TMenuItem;
        N77: TMenuItem;
        N78: TMenuItem;
        N79: TMenuItem;
        N80: TMenuItem;
        mp1: TMediaPlayer;
        pm1: TPopupMenu;
        N81: TMenuItem;
        N82: TMenuItem;
        N83: TMenuItem;
        N84: TMenuItem;
        N85: TMenuItem;
        N86: TMenuItem;
        N87: TMenuItem;
        N88: TMenuItem;
        N89: TMenuItem;
        N90: TMenuItem;
        N91: TMenuItem;
        N92: TMenuItem;
        N93: TMenuItem;
        N94: TMenuItem;
        N95: TMenuItem;
        N96: TMenuItem;
        N431: TMenuItem;
        N541: TMenuItem;
        N1691: TMenuItem;
        N97: TMenuItem;
        N501: TMenuItem;
        N1001: TMenuItem;
        N2001: TMenuItem;
        N98: TMenuItem;
        procedure DVD2Click(Sender: TObject);
        procedure pnl2Resize(Sender: TObject);
        procedure Panel1Click(Sender: TObject);
        procedure Panel1Resize(Sender: TObject);
        procedure Panel3Resize(Sender: TObject);
        procedure N14Click(Sender: TObject);
        procedure DVDClick(Sender: TObject);
        procedure MainMenuClick(Sender: TObject);
      private
        { Private declarations }
        procedure SetSysIniInfo;
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      TMovieVolume:TThread;
      MTMovieVolume:TThread;
      TTMovieVolume:TThread;
      OpenListIndex:integer;
      FileNameList:array [0..1000] of string;
      OpensList:array [0..1000] of string;
      opennames:string;
      filePath:string;
      filesPath:string;
      OpensPath:string;
      ExtList:string;
      MouseChecked:Boolean;
      VoiceChked:Boolean;
      VolumeChked:boolean;
      VolumeType:integer;
      systemPath:string;
      IniFileName:string;
      Systemini:TIniFile;implementationuses
      MainT, MainM;{$R *.dfm}procedure tForm1.SetSysIniInfo;
    var
      i,j:integer;
      t:tsystem; 
    begin 
      VoiceChked:=false;
      VolumeType:=0;
      filesName:=systemPath+'\list\files.txt';
      OpensPath:=systemPath+'\list\opens.txt';
      imgVoice.Left:=shpVoice.Left+GetWindowVolume(VolumeType);
      systemPath:=extractfilePath(application.ExeName);  //应用程序路径
      IniFileName:=systemPath+'SystemSets.ini';          //配置文件路径
      Systemini:=TIniFile.Create(inifilename);
      ExtList:=Systemini.readstring('SystemFile','FindExt','');
      SetWindowDat;
      SetOpenIniInfo;
      SetFileIni;
    end; procedure TForm1.DVD2Click(Sender: TObject);
    var 
      b:tbrowseinfo; 
      d:array[0..260] of char; 
      i:pitemidlist; 
      s:string; 
    begin
      b.hwndowner:=self.handle;
      b.pidlroot:=nil; 
      b.pszdisplayname:=nil; 
      b.lpsztitle:='请选择'; 
      b.ulflags:=0; 
      b.lpfn:=nil; 
      b.lparam:=0; 
      b.iimage:=0; 
      i:=shbrowseforfolder(b); 
      if i <>nil then 
      begin 
          shgetpathfromidlist(i,@d); 
          s:=string(d); 
      end; 
      if s <>'' then 
      begin
        filePath:=s;
        TTMovieVolume:=tthrend.create;
        TTMovieVolume.priority:=tpIdle;
      end; 
    end;procedure TForm1.pnl2Resize(Sender: TObject);
    begin
       aMediaPlayer.DisplayRect:=rect(0,0,aPanel.Width,aPanel.Height);
    end;procedure TForm1.Panel1Resize(Sender: TObject);
    begin
       pnl2.height:=Panel1.height-15;
       titles.top:=Panel1.height-15;
       timers.top:=titles.top;
       timers.left:=pnl2.width-100;
    end;procedure TForm1.Panel3Resize(Sender: TObject);
    begin
       shpValue.width:=panel3.width-30;
       shpVoice.left:=panel3.width-shpvoice.width-15;
       btnVoice.left:=panel3.width-96;
    end;procedure TForm1.N14Click(Sender: TObject);
    begin
       close
    end;procedure TForm1.DVDClick(Sender: TObject);
    begin
      with sender as tmenuitem do
      begin
        filePath:=Copy(caption,1,3);
        TTMovieVolume:=tthrend.create;
        TTMovieVolume.priority:=tpIdle;
      end;
    end;procedure TForm1.MainMenuClick(Sender: TObject);
    begin
      with sender as tmenuitem do
      begin
        openfiles(filenamelist[itemindex-4]);
      end;
    end;end.
      

  5.   

    unit MainM; interface 
      uses Classes, ExtCtrls, MPlayer, SysUtils, mmSystem, StdCtrls, Forms, Dialogs,
           registry, Menus, windows;procedure SetWindowDat;
    procedure SetOpenIniInfo;
    procedure SetFileIni;
    //function GetWindowVolume(fType:Integer):Integer;
    procedure SetDriverInfo;
    function SetDrivers(lstr:string):string;
    function SetWindowMenus(lstr:string):string;
    procedure SetWindowMenu(mMenu:TMenuItem;mMenu1:TMenuItem;lstr:string);
    implementationuses MainF;function SetWindowMenus(lstr:string):string;
    var
      i,j:integer;
      s,f:string;
    begin
       with form1.canvas do
       if textwidth(lstr)>300 then
       begin
          textwidth(extractfileName(lstr))
       end;
       SetWindowMenus:=lstr;
    end;function SetDrivers(lstr:string):string;
    var
      VolN:array[0..255] of Char;
      n:Longword;
      l:Longword;
      f:Longword;
      s:array[0..255] of Char;
    begin
      GetVolumeInformation(PChar(lstr),VolN,255,@n,l,f,s,255);
      SetDrivers:=VolN;
    end;procedure SetDriverInfo;
    var
       i,j:Integer;
       s:string;
    begin
      j:=0;
      for i:=65 to 90 do
      begin
        s:=chr(i)+':\';
        if GetDriveType(pchar(s))=drive_cdrom then
        begin
            if j=0 then
              form1.mainmenu1.Items[0].Items[1].Items[0].Caption:=s+SetDrivers(s)
            else
              SetWindowMenu(form1.mainmenu1.Items[0].Items[1],form1.mainmenu1.Items[0].Items[1].Items[0],s+SetDrivers(s));
            j:=j+1;
        end;
      end;
    end;procedure SetWindowMenu(mMenu:TMenuItem;mMenu1:TMenuItem;lstr:string);
    var
      mItem:TMenuItem;
    begin
      mItem:=TMenuItem.create(mMenu1);
      if mMenu.caption='历史记录' then
      begin
        mItem.caption:=SetWindowMenus(lstr);
        mItem.onclick:=form1.MainMenuClick;
        mMenu.items.insert(4,mitem);
      end
      else
      begin
        mItem.caption:=lstr;
        mItem.onclick:=form1.DVDClick;
        mMenu.items.insert(mMenu1.count,mitem);
      end;
    end;procedure SetWindowDat;
    var
      Reg: TRegistry;
    begin
      IF Systemini.readstring('systemfile','DatRegist','')='1' then exit
        Reg := TRegistry.Create;
        try
          Reg.RootKey :=&H80000002;
          if Reg.OpenKey('\Software\Microsoft\Windows NT\CurrentVersion\MCI Extensions', True) then
            Reg.WriteString('Dat','MPEGVideo');
        finally
          Reg.free;
        end;
      Systemini.writestring('systemfile','DatRegist','1')
    end;procedure SetOpenIniInfo;
    var
      s:string;
      f:textfile;
    begin
      assignfile(f,filesPath);
      reset(f);
      while not eof(f) do
      begin
        readln(f,s);  end;
      rewrite(f);
      writeln(f,s);
      closefile(f);
    end;procedure SetFileIni;
    beginend;
    end.