⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sysedit.pas

📁 小闹钟程序
💻 PAS
字号:
unit SysEdit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls,DB,DBTables, MMSystem, MPlayer;

type
  TSysEditor = class(TForm)
    OKBtn: TButton;
    CancelBtn: TButton;
    GroupBox1: TGroupBox;
    Mode_1: TRadioButton;
    Mode_2: TRadioButton;
    Mode_3: TRadioButton;
    Mode_4: TRadioButton;
    Mode_5: TRadioButton;
    Label1: TLabel;
    cmb_Action: TComboBox;
    Label2: TLabel;
    edt_Hint: TEdit;
    GroupBox2: TGroupBox;
    Sound_1: TRadioButton;
    btn_LoadSound: TButton;
    Sound_2: TRadioButton;
    cmb_Sound: TComboBox;
    edt_SoundFile: TEdit;
    Label4: TLabel;
    edt_Program: TEdit;
    btn_LoadProgram: TButton;
    GroupBox3: TGroupBox;
    ADate: TDateTimePicker;
    ATime: TDateTimePicker;
    AWeek: TDateTimePicker;
    OpenDialog1: TOpenDialog;
    procedure OKBtnClick(Sender: TObject);
    procedure ADateChange(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure cmb_SoundClick(Sender: TObject);
    procedure btn_LoadSoundClick(Sender: TObject);
    procedure Sound_1Click(Sender: TObject);
    procedure Sound_2Click(Sender: TObject);
    procedure btn_LoadProgramClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  SysEditor: TSysEditor;

implementation

uses Control;

{$R *.DFM}

procedure TSysEditor.OKBtnClick(Sender: TObject);
begin
  // 输入合法性校验
  if edt_Hint.Text = '' then
  begin
    Application.MessageBox('提示信息,请重新输入', '错误', MB_OK or MB_ICONEXCLAMATION);
    edt_Hint.SetFocus;
    Exit;
  end;
  Close;
  ModalResult := mrOK;
end;

procedure TSysEditor.ADateChange(Sender: TObject);
begin
    AWeek.DateTime:=ADate.DateTime;  
end;

procedure TSysEditor.FormCreate(Sender: TObject);
var
    mem:TMemoryStream;
begin
   if ControlModule.SoundTable.RecordCount<1 then
    begin
        with ControlModule.SoundTable do
        begin
            Insert;
            FieldByName('Name').AsString:='默认声音';
            mem:=TMemoryStream.Create();
            mem.LoadFromFile('默认声音.wav');
            TBlobField(FieldByName('Data')).LoadFromStream(mem);
            Post;

            Insert;
            FieldByName('Name').AsString:='惊叹号';
            mem:=TMemoryStream.Create();
            mem.LoadFromFile('惊叹号.wav');
            TBlobField(FieldByName('Data')).LoadFromStream(mem);
            Post;

            Insert;
            FieldByName('Name').AsString:='菜单弹出';
            mem:=TMemoryStream.Create();
            mem.LoadFromFile('菜单弹出.wav');
            TBlobField(FieldByName('Data')).LoadFromStream(mem);
            Post;

            Insert;
            FieldByName('Name').AsString:='问题';
            mem:=TMemoryStream.Create();
            mem.LoadFromFile('问题.wav');
            TBlobField(FieldByName('Data')).LoadFromStream(mem);
            Post;

            Insert;
            FieldByName('Name').AsString:='异常停止';
            mem:=TMemoryStream.Create();
            mem.LoadFromFile('异常停止.wav');
            TBlobField(FieldByName('Data')).LoadFromStream(mem);
            Post;

            Insert;
            FieldByName('Name').AsString:='星号';
            mem:=TMemoryStream.Create();
            mem.LoadFromFile('星号.wav');
            TBlobField(FieldByName('Data')).LoadFromStream(mem);
            Post;

            Insert;
            FieldByName('Name').AsString:='嘟嘟声';
            mem:=TMemoryStream.Create();
            mem.LoadFromFile('嘟嘟声.wav');
            TBlobField(FieldByName('Data')).LoadFromStream(mem);
            Post;

            Insert;
            FieldByName('Name').AsString:='清空回收站';
            mem:=TMemoryStream.Create();
            mem.LoadFromFile('清空回收站.wav');
            TBlobField(FieldByName('Data')).LoadFromStream(mem);
            Post;

            Insert;
            FieldByName('Name').AsString:='程序错误';
            mem:=TMemoryStream.Create();
            mem.LoadFromFile('程序错误.wav');
            TBlobField(FieldByName('Data')).LoadFromStream(mem);
            Post;

            Insert;
            FieldByName('Name').AsString:='退出Windows';
            mem:=TMemoryStream.Create();
            mem.LoadFromFile('退出Windows.wav');
            TBlobField(FieldByName('Data')).LoadFromStream(mem);
            Post;

            mem.Free;
        end;
    end;

    with ControlModule.SoundTable do
    begin
        First;
        while not eof do
        begin
            cmb_Sound.Items.Add(FieldByName('Name').AsString);
            Next;
        end;
    end;
end;

procedure TSysEditor.cmb_SoundClick(Sender: TObject);
var
    filename:string;

    //这里是从系统中取得一个临时文件
    function gettemporyfilename:string;
    const  max_path=144;
    var
        lppathbuffer:pchar;
        lpbuffer:pchar;
    begin
        getmem(lpbuffer,max_path);
        getmem(lppathbuffer,max_path);
        gettemppath(max_path,lppathbuffer);
        gettempfilename(lppathbuffer,'tem',0,lpbuffer);
        freemem(lppathbuffer,max_path);
        gettempfilename(PChar(ExtractFilePath(Paramstr(0))),'tem',0,lpbuffer);
        result:=strpas(lpbuffer);
        freemem(lpbuffer,max_path);
    end;

var
    filestream:tfilestream;//a temp file
    blobstream:tstream;//the WAVE blob
begin
    with ControlModule.SoundTable do
    begin
        First;
        while not eof do
        begin
            if FieldByName('Name').AsString=cmb_Sound.Text then
                break;
            Next;
        end;
        //为字段创建BLOB数据流
        blobstream:=CreateBlobStream(FieldByName('Data'),bmRead);
        if blobstream.size=0 then
        begin
            blobstream.free;
            exit;
        end;
        blobstream.Position:=0;
        //创建前删除同名的临时文件
        if filename<>'' then
            deletefile(filename);
            //设置临时文件名
        filename:=gettemporyfilename;
        //为临时文件创建文件流
        filestream:=tfilestream.create(filename,fmcreate or fmopenwrite);
        //拷贝blob到临时文件中
        filestream.copyfrom(blobstream,blobstream.size);
        //释放流
        filestream.free;
        blobstream.free;
        //播放WAVE文件
        PlaySound(PChar(filename),0,SND_FILENAME + SND_ASYNC);
        //删除临时文件
        if filename<>'' then
            deletefile(filename);
    end;
end;

procedure TSysEditor.btn_LoadSoundClick(Sender: TObject);
begin
    with self.OpenDialog1 do
    begin
        Title:='请选择声音文件所在的位置和文件名:';
        InitialDir:=ExtractFilePath(Paramstr(0));
        Filter := '声音文件(*.wav)|*.wav';
        DefaultExt:= 'wav';
        if Execute then
        begin
            edt_SoundFile.Text:=Filename;
            PlaySound(PChar(FileName),0,SND_FILENAME + SND_ASYNC);
        end;
    end;
end;

procedure TSysEditor.Sound_1Click(Sender: TObject);
begin
    self.btn_LoadSound.Enabled:=true;
    self.edt_SoundFile.Enabled:=true;
    self.cmb_Sound.Enabled:=false;
end;

procedure TSysEditor.Sound_2Click(Sender: TObject);
begin
    self.btn_LoadSound.Enabled:=false;
    self.edt_SoundFile.Enabled:=false;
    self.cmb_Sound.Enabled:=true;
end;

procedure TSysEditor.btn_LoadProgramClick(Sender: TObject);
begin
    with self.OpenDialog1 do
    begin
        Title:='请选择程序文件所在的位置和文件名:';
        InitialDir:=ExtractFilePath(Paramstr(0));
        Filter := '声音文件(*.exe)|*.exe';
        DefaultExt:= 'exe';
        if Execute then
        begin
            edt_Program.Text:=Filename;
        end;
    end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -