Недавно добавленные исходники

•  TDictionary Custom Sort  3 107

•  Fast Watermark Sources  2 892

•  3D Designer  4 637

•  Sik Screen Capture  3 176

•  Patch Maker  3 394

•  Айболит (remote control)  3 465

•  ListBox Drag & Drop  2 833

•  Доска для игры Реверси  78 953

•  Графические эффекты  3 730

•  Рисование по маске  3 099

•  Перетаскивание изображений  2 473

•  Canvas Drawing  2 589

•  Рисование Луны  2 428

•  Поворот изображения  2 027

•  Рисование стержней  2 062

•  Paint on Shape  1 478

•  Генератор кроссвордов  2 114

•  Головоломка Paletto  1 687

•  Теорема Монжа об окружностях  2 116

•  Пазл Numbrix  1 607

•  Заборы и коммивояжеры  1 902

•  Игра HIP  1 242

•  Игра Go (Го)  1 181

•  Симулятор лифта  1 385

•  Программа укладки плитки  1 137

•  Генератор лабиринта  1 465

•  Проверка числового ввода  1 253

•  HEX View  1 415

•  Физический маятник  1 282

•  Задача коммивояжера  1 318

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Запретить запуск второго экземпляра программы 2



- Чем отличается программист от политика?
- Программисту платят деньги за работающие программы.


var
  AtomText: array [0..31] of Char;

procedure LookForPreviousInstance;
var
  PreviousInstanceWindow : hWnd;
  AppName : array[0..30] of char;
  FoundAtom : TAtom;
begin
  // помещаем имя приложения в AtomText
  StrFmt(AtomText, 'OnlyOne%s', [Copy(Application.Title,1,20)]);
  // Проверяем, не создано ли уже атома с таким именем приложения
  FoundAtom := GlobalFindAtom(AtomText);
  if FoundAtom <> 0 then { эта копия приложения уже запущена }
  begin
    StrFmt(AppName,'%s', [Application.Title]);
    // изменяем текущий заголовок, чтобы FindWindow не видела его
    Application.ShowMainForm := false;
    Application.Title := 'destroy me';
    // ищем предыдущую копию приложения
    PreviousInstanceWindow := FindWindow(nil,AppName);
    // Передаём фокус на предыдущую копию приложения
    // завершаем текущую копию
    Application.Terminate;

    if PreviousInstanceWindow <> 0 then
      if IsIconic(PreviousInstanceWindow) then
        ShowWindow(PreviousInstanceWindow,SW_RESTORE)
      else
        SetForegroundWindow(PreviousInstanceWindow);
  end;
  // создаём глобальный атом, чтобы предотвратить
  // запуск другой копии приложения
  FoundAtom := GlobalAddAtom(AtomText);
end;

constructor TForm.Create(AOwner: TComponent);
begin
  inherited;
  LookForPreviousInstance;
end;

destructor TForm.Destroy;
var
  FoundAtom : TAtom;
  ValueReturned : word;
begin
  // не забудьте удалить глобальный атом
  FoundAtom := GlobalFindAtom(AtomText);
  if FoundAtom <> 0 then
    ValueReturned := GlobalDeleteAtom(FoundAtom);
  inherited Destroy;
end;








Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте