看到有资料上是如下方法:procedure TForm1.FormCreate(Sender: TObject);
begin
  {搜索数据库看程序是否运行}
  if GlobalFindAtom('PROGRAM_RUNNING') = 0 then
  { 假如没有找到,就添加到数据库}
    atom := GlobalAddAtom('PROGRAM_RUNNING')
  else begin
  { 如果程序已经运行,显示信息并退出程序 }
    MessageDlg('程序已经运行!', mtWarning, [mbOK], 0);
    Halt;
    end;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
  { 退出程序时,从数据表中删除添加的条目 }
  GlobalDeleteAtom(atom);
end;但我搬过来用时,编译出错,说atom后面需要'(',找帮助也没有对atom的说明。
哪位大虾帮帮忙!

解决方案 »

  1.   

    这样:在dpr文件中写入
    {$R *.RES}
    var
      hmutex:hwnd;
      ret:integer;
    begin
      Application.Initialize;
      hmutex:=createmutex(nil,false,dpr文件名);
      ret:=getlasterror;
      if ret<>error_already_exists then
        begin
         Application.CreateForm(TfrmReceive, frmReceive);
         Application.Run;
        end
         else
          begin
            Application.MessageBox('该程序已经有一个在运行中!','系统提示',MB_ICONINFORMATION+MB_OK);
            releasemutex(hmutex);
          end;
    end.当然不要忘了在前面的uses中加上:
      Forms,
      windowsgood luck,hoho...
      

  2.   

    在你的程序中,定义一个
    atom: integer;的私有变量
      

  3.   

    const mypro='tmainapp';\\主窗体名
     var handle:integer;
    begin
      handle:=findwindow(mypro,nil);
      if handle<>0 then
       begin
        messagebox(0,'程序正在运行,请退出!','警告!',0);
     //   halt;
       end;
      

  4.   

    不得不承认adoquery8(ado)的方法比我看到的那种方法要好,不过有点高深的说