我求的是硬盘序列号。把他插入表中。在procedure TForm1_play.FormShow(Sender: TObject);就出错了。错误提示:
[Error] Unit1.pas(548): Statement expected but 'PROCEDURE' found
请各位帮帮忙。先谢谢了
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, jpeg, DB, DBTables, MPlayer, mmsystem, shellapi,registry,
  OleCtrls, ShockwaveFlashObjects_TLB, StdCtrls, ADODB;
type
  tvolume=record
    left  : byte;
    right : byte;
  end;type
  tsingex=record
    volume : tvolume;
    number : string;
    name : string;
    path : string;
  end;type
  TForm1_play = class(TForm)
    Panel1: TPanel;
    Image1: TImage;
    Timer1: TTimer;
    Query1: TQuery;
    Query2: TQuery;
    Player1: TMediaPlayer;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    ADOQuery1: TADOQuery;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Timer1Timer(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
    mysing_cplay : tsingex;
    mysing_count : integer;
    mysing_array : array[0..22]of tsingex;
    //
    mymute_mode : integer;
    mycurr_volm : tvolume;
    myzero_volm : tvolume;
    myvolm_mode : boolean;
    //
    procedure myvolume_set(v:tvolume);
    procedure mytrack_rset();
    //
    procedure OnTimer();
    //
  public
    { Public declarations }
    function sing_xinfo(i:integer):tsingex;
    function sing_count():integer;
    function sing_cplay():tsingex;
    //
    procedure sing_xadd(s:string);
    procedure sing_add(s:tsingex);
    procedure sing_del(i:integer);
    procedure sing_mov(i:integer);
    //
    procedure play_seek(i:integer);
    procedure play_stop();
    procedure play_pause();
    procedure play_replay();
    //
    procedure track_music();
    procedure track_xsing();
    //
    procedure volume_reset(v:tvolume);
    procedure volume_xmute();
    procedure volume_upper();
    procedure volume_lower();
  end;var
  Form1_play: TForm1_play;
  //
  hdrv  :HDRVR;
  tsingx:tsingex;
  freexn:integer;
  freetn:integer;
  freexm:integer;
  Reg   :TRegistry;
   function GetIdeDiskSerialNumber(): string;
implementationuses Unit2,Unit3,Unit4,Unit5,Unit6,Unit7,
      Unit8,Unit9,Unit10,Unit11,Unit12,Unit13,Unit14,Unit15,
      Unit30, Unit31;{$R *.dfm}procedure TForm1_play.myvolume_set(v:tvolume);
var
  t:longint;
  u:longint;
begin
  try
    t:= v.left;
    waveoutgetvolume(player1.DeviceID-1,@u);
    u:=((t shl 8) or (u and $64000000));
    waveoutsetvolume(player1.DeviceID-1,u);
    //
    t:= v.right;
    waveoutgetvolume(player1.DeviceID-1,@u);
    u:=((t shl 24) or (u and $0000ffff));
    waveoutsetvolume(player1.DeviceID-1,u);
  except
  end;
end;procedure TForm1_play.mytrack_rset();
begin
  if self.myvolm_mode then
  begin
    //sing mode
    mcisendstring('set all audio all off',nil,0,handle);
    mcisendstring('set all audio right on',nil,0,handle);
  end
  else
  begin
    //music mode
    mcisendstring('set all audio all off',nil,0,handle);
    mcisendstring('set all audio left on',nil,0,handle);
  end;
end;procedure TForm1_play.OnTimer();
var
  i : integer;
begin
  //
  //
  if self.mysing_count > 0 then
  begin
    self.mysing_cplay := self.mysing_array[0];
    self.mysing_count := self.mysing_count -1;
    //
    for i:=0 to  self.mysing_count do
      self.mysing_array[i] := self.mysing_array[i + 1];
    //play:
    try
      player1.FileName := self.mysing_cplay.path;
      player1.Open();
      player1.Display := self.Panel1;
      player1.DisplayRect := Rect(0,0,800,600);
      player1.Play();      self.mytrack_rset();
      //
    except
    end;//end try
    //
    self.volume_reset(self.mysing_cplay.volume);
    //info:
    if Form12_viw.Visible then
      Form12_viw.showAll()
    else
    if Form30_box.Visible then
      Form30_box.OnShowX();
    //done;
  end//end if then
  else
  begin

解决方案 »

  1.   

    procedure TForm1_play.FormCreate(Sender: TObject);
       var
         SN:string;
    stringrt : Array[0..67] of string;
    i:integer;
    sst:string;
    namesst:string;          strsql:string;
    begin
    //sst="100";
     SN := GetIdeDiskSerialNumber();
        // Label1.Caption:=SN;
         // Label2.Caption:=SN;     for i:=1 to length(SN) do
            begin
               stringrt[i]:=Copy(SN, i, 1);
            end;
         Label3.Caption:=stringrt[1]+stringrt[2]+stringrt[3]+stringrt[4]+stringrt[5];
         namesst:=stringrt[1]+stringrt[2]+stringrt[3]+stringrt[4]+stringrt[5];
          sst:=stringrt[1]+stringrt[2]+stringrt[3]+stringrt[4]+stringrt[5];
           if Form1_play.ADOQuery1.RecordCount = 0 then
                begin
                strsql:='Insert into zcm(pid,name) Values(:sst,:namesst)';
          with ADOQuery1 do
        begin
         close;
          sql.Clear;
          sql.Add(strsql);      ExecSQL;
        end;
      self.mysing_cplay.number := '';
      self.mysing_cplay.name := '';
      self.mysing_cplay.path := '';
      //
      self.mysing_count := 0;
      self.mymute_mode := 0;
      //
      self.myzero_volm.left := 0;
      self.myzero_volm.right:= 0;
      //
      self.mycurr_volm.left := 204;
      self.mycurr_volm.right:= 204;
      self.myvolume_set(mycurr_volm);
      //
      self.track_music;
      //
      freexn := 7;
      freetn := 0;
      //
    //  if fileexists('D:\k0.swf') and
    //    fileexists('D:\k1.swf') and
    //    fileexists('D:\k2.swf') and
    //    fileexists('D:\k3.swf') and
    //    fileexists('D:\k4.swf') and
    //    fileexists('D:\k5.swf') and
    //    fileexists('D:\k6.swf') and
    //    fileexists('D:\k7.swf') then
    //  begin
    //    freexm := 2;
    //    self.Flash1.Visible := true;
    //    self.Image1.Visible := false;
    //    self.Flash1.Movie := 'D:\K0.SWF';
    //  end
    //  else
      if fileexists('D:\k0.jpg') and
        fileexists('D:\k1.jpg') and
        fileexists('D:\k2.jpg') and
        fileexists('D:\k3.jpg') and
        fileexists('D:\k4.jpg') and
        fileexists('D:\k5.jpg') and
        fileexists('D:\k6.jpg') and
        fileexists('D:\k7.jpg') then
      begin
        freexm := 1;
    //    self.Flash1.Visible := false;
        self.Image1.Visible := true;
      end
      else
      begin
        freexm := 0;
    //    self.Flash1.Visible := false;
        self.Image1.Visible := true;  end;
        //form15.show
    end;procedure TForm1_play.FormShow(Sender: TObject);   begin
        Reg := TRegistry.Create;
      try
       //exit;
        Reg.RootKey := HKEY_LOCAL_MACHINE;
        Reg.CreateKey('\Config\0001\Display\Settings\PCI_VEN_1002&DEV_5159&SUBSYS_02021787&REV_00_000800_0001');
        Reg.CreateKey('\Config\0001\Display\Settings\PCI_VEN_1002&DEV_5159&SUBSYS_0F021787&REV_00_000800_0001');
          Reg.openkey('\Config\0001\Display\Settings',true);
            reg.WriteString('ver','TianWang');
            reg.WriteString('AttachToDesktop','1');
            reg.WriteString('BitsPerPixel','16');
            reg.WriteString('DesktopPos','0,0');
            reg.WriteString('Resolution','800,600');
          Reg.openKey('\Config\0001\Display\Settings\PCI_VEN_1002&DEV_5159&SUBSYS_02021787&REV_00_000800_0001',true);
            reg.WriteString('AttachToDesktop','1');
            reg.WriteString('BitsPerPixel','16');
            reg.WriteString('DPILogicalX','96');
            reg.WriteString('DPILogicalY','96');
            reg.WriteString('DesktopPos','800,0');
            reg.WriteString('Resolution','800,600');
          Reg.openKey('\Config\0001\Display\Settings\PCI_VEN_1002&DEV_5159&SUBSYS_0F021787&REV_00_000800_0001',true);
            reg.WriteString('AttachToDesktop','1');
            reg.WriteString('BitsPerPixel','16');
            reg.WriteString('DPILogicalX','96');
            reg.WriteString('DPILogicalY','96');
            reg.WriteString('DesktopPos','800,0');
            reg.WriteString('Resolution','800,600');  finally
        Reg.CloseKey;
        Reg.Free;    self.Left := 801;
        self.Top  := 0;
      end;
    end;procedure TForm1_play.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      closedriver(hdrv,0,0);
      deleteobject(hdrv);end;procedure TForm1_play.Timer1Timer(Sender: TObject);
    begin
      if (self.Player1.Mode <> mpPlaying) and
         (self.Player1.Mode <> mpPaused) then
         self.OnTimer();
      //
      Form30_box.OnTimer();
      Form31_box.OnTimer();
    end;procedure TForm1_play.FormKeyPress(Sender: TObject; var Key: Char);
    begin
      Form2_root.FormKeyPress(Sender,Key);
    end;
      

  2.   

    function GetIdeDiskSerialNumber() : String;type  TSrbIoControl = packed record    HeaderLength : ULONG;    Signature : Array[0..7] of Char;    Timeout : ULONG;    ControlCode : ULONG;    ReturnCode : ULONG;    Length : ULONG;  end;  SRB_IO_CONTROL = TSrbIoControl;  PSrbIoControl = ^TSrbIoControl;  TIDERegs = packed record    bFeaturesReg : Byte; // Used for specifying SMART "commands".    bSectorCountReg : Byte; // IDE sector count register    bSectorNumberReg : Byte; // IDE sector number register    bCylLowReg : Byte; // IDE low order cylinder value    bCylHighReg : Byte; // IDE high order cylinder value    bDriveHeadReg : Byte; // IDE drive/head register    bCommandReg : Byte; // Actual IDE command.    bReserved : Byte; // reserved. Must be zero.  end;  IDEREGS = TIDERegs;  PIDERegs = ^TIDERegs;  TSendCmdInParams = packed record    cBufferSize : DWORD;    irDriveRegs : TIDERegs;    bDriveNumber : Byte;    bReserved : Array[0..2] of Byte;    dwReserved : Array[0..3] of DWORD;    bBuffer : Array[0..0] of Byte;  end;  SENDCMDINPARAMS = TSendCmdInParams;  PSendCmdInParams = ^TSendCmdInParams;  TIdSector = packed record    wGenConfig : Word;    wNumCyls : Word;    wReserved : Word;    wNumHeads : Word;    wBytesPerTrack : Word;    wBytesPerSector : Word;    wSectorsPerTrack : Word;    wVendorUnique : Array[0..2] of Word;    sSerialNumber : Array[0..19] of Char;    wBufferType : Word;    wBufferSize : Word;    wECCSize : Word;    sFirmwareRev : Array[0..7] of Char;    sModelNumber : Array[0..39] of Char;    wMoreVendorUnique : Word;    wDoubleWordIO : Word;    wCapabilities : Word;    wReserved1 : Word;    wPIOTiming : Word;    wDMATiming : Word;    wBS : Word;    wNumCurrentCyls : Word;    wNumCurrentHeads : Word;    wNumCurrentSectorsPerTrack : Word;    ulCurrentSectorCapacity : ULONG;    wMultSectorStuff : Word;    ulTotalAddressableSectors : ULONG;    wSingleWordDMA : Word;    wMultiWordDMA : Word;    bReserved : Array[0..127] of Byte;  end;  PIdSector = ^TIdSector;const  IDE_ID_FUNCTION = $EC;  IDENTIFY_BUFFER_SIZE = 512;  DFP_RECEIVE_DRIVE_DATA = $0007c088;  IOCTL_SCSI_MINIPORT = $0004d008;  IOCTL_SCSI_MINIPORT_IDENTIFY = $001b0501;  DataSize = sizeof(TSendCmdInParams)-1+IDENTIFY_BUFFER_SIZE;  BufferSize = SizeOf(SRB_IO_CONTROL)+DataSize;  W9xBufferSize = IDENTIFY_BUFFER_SIZE+16;var  hDevice : THandle;  cbBytesReturned : DWORD;  pInData : PSendCmdInParams;  pOutData : Pointer; // PSendCmdOutParams  Buffer : Array[0..BufferSize-1] of Byte;  srbControl : TSrbIoControl absolute Buffer;procedure ChangeByteOrder( var Data; Size : Integer );var ptr : PChar;  i : Integer;  c : Char;begin  ptr := @Data;  for i := 0 to (Size shr 1)-1 do  begin    c := ptr^;    ptr^ := (ptr+1)^;    (ptr+1)^ := c;    Inc(ptr,2);  end;end;begin  Result := '';  FillChar(Buffer,BufferSize,#0);  if Win32Platform=VER_PLATFORM_WIN32_NT then  begin // Windows NT, Windows 2000// Get SCSI port handle    hDevice := CreateFile( '\\.\Scsi0:', GENERIC_READ or GENERIC_WRITE,             FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0 );    if hDevice=INVALID_HANDLE_VALUE then Exit;    try      srbControl.HeaderLength := SizeOf(SRB_IO_CONTROL);      System.Move('SCSIDISK',srbControl.Signature,8);      srbControl.Timeout := 2;      srbControl.Length := DataSize;      srbControl.ControlCode := IOCTL_SCSI_MINIPORT_IDENTIFY;      pInData := PSendCmdInParams(PChar(@Buffer)      +SizeOf(SRB_IO_CONTROL));      pOutData := pInData;      with pInData^ do      begin        cBufferSize := IDENTIFY_BUFFER_SIZE;        bDriveNumber := 0;        with irDriveRegs do        begin          bFeaturesReg := 0;          bSectorCountReg := 1;          bSectorNumberReg := 1;          bCylLowReg := 0;          bCylHighReg := 0;          bDriveHeadReg := $A0;          bCommandReg := IDE_ID_FUNCTION;        end;      end;      if not DeviceIoControl( hDevice, IOCTL_SCSI_MINIPORT,              @Buffer, BufferSize, @Buffer, BufferSize,              cbBytesReturned, nil ) then        Exit;    finally      CloseHandle(hDevice);    end;  end  else  begin // Windows 95 OSR2, Windows 98    hDevice := CreateFile( '\\.\SMARTVSD', 0, 0, nil, CREATE_NEW, 0, 0 );    if hDevice=INVALID_HANDLE_VALUE then Exit;    try      pInData := PSendCmdInParams(@Buffer);      pOutData := @pInData^.bBuffer;      with pInData^ do      begin        cBufferSize := IDENTIFY_BUFFER_SIZE;        bDriveNumber := 0;        with irDriveRegs do        begin          bFeaturesReg := 0;          bSectorCountReg := 1;          bSectorNumberReg := 1;          bCylLowReg := 0;          bCylHighReg := 0;          bDriveHeadReg := $A0;          bCommandReg := IDE_ID_FUNCTION;        end;      end;      if not DeviceIoControl( hDevice, DFP_RECEIVE_DRIVE_DATA,              pInData, SizeOf(TSendCmdInParams)-1, pOutData,              W9xBufferSize, cbBytesReturned, nil ) then        Exit;    finally      CloseHandle(hDevice);    end;  end;  with PIdSector(PChar(pOutData)+16)^ do  begin    ChangeByteOrder(sSerialNumber,Sizeof(sSerialNumber));    SetString(Result,sSerialNumber,Sizeof(sSerialNumber));    Result := Trim(Result);  end;end;
    end.
      

  3.   

    乖乖
    老兄太能了
    我头都大了
    with adoquery1 do
    begin
    close;
    sql.clear;
    sql.add(strsql);
    parameters[0].valuse:=sst;
    parameters[1].valuse:=namesst;
    execsql;
    end;
      

  4.   

    =======================老兄,贴那么多出来????下面的都够了
    if Form1_play.ADOQuery1.RecordCount = 0 then            begin
                strsql:='Insert into zcm(pid,name) Values(:sst,:namesst)';
          with ADOQuery1 do
        begin
         close;
          sql.Clear;
          sql.Add(strsql);      ExecSQL;
    =====================
    你(:sst,:namesst这些参数没有赋值呢?