By using API calls (their easy, just add ShellAPI to your uses clause) the following will work...
{ attempt to create a named nutex }
CreateMutex(Nil,False,'AppName');
{ check to see if it was created }
if ( GetLastError = ERROR_ALREADY_EXISTS ) then begin
{ inform the user only one instance is allowed }
MessageDlg('App is already running...' + CHR(10) +
'Shutting down ',mtError,[mbOk],0);
{ send a broadcast message to all windows, your app will recognize it and show itself }
SendMessage(HWND_BROADCAST,RegisterWindowMessage('AppName'),0,0);
Application.Terminate;
end;
Just change 'AppName' to your applications name - found in Project, Options, Application, Title.
Let me know if you'd like more info.