Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

Здесь есть возможность читать онлайн «Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Советы по Delphi. Версия 1.4.3 от 1.1.2001: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Советы по Delphi. Версия 1.4.3 от 1.1.2001»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

…начиная с 1001. Смотрите другие файлы…

Советы по Delphi. Версия 1.4.3 от 1.1.2001 — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Советы по Delphi. Версия 1.4.3 от 1.1.2001», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

end

elseResult := CallWindowProc(WProc, Handle, Msg, wParam, lParam);

end;

procedureSubClassApplication;

begin

WProc := TFNWndProc(SetWindowLong(Application.Handle, GWL_WNDPROC, Longint(@NewWndProc)));

ifWProc = Nil thenMIError := MIError orMI_FAIL_SUBCLASS;

end;

procedureDoFirstInstance;

begin

SubClassApplication;

MutHandle := CreateMutex( Nil, False, UniqueAppStr);

ifMutHandle = 0 thenMIError := MIError orMI_FAIL_CREATE_MUTEX;

end;

procedureBroadcastFocusMessage;

begin

Application.ShowMainForm := False;

PostMessage(HWND_BROADCAST, MessageId, 0, 0);

end;

functionInitInstance : Boolean;

begin

MutHandle := OpenMutex(MUTEX_ALL_ACCESS, False, UniqueAppStr);

ifMutHandle = 0 then begin

ShowWindow(Application.Handle, SW_ShowNormal);

Application.ShowMainForm:=True;

DoFirstInstance;

result := True;

end

else begin

RegWork.RWSetParamStr1;

BroadcastFocusMessage;

result := False;

end;

end;

initialization

begin

UniqueAppStr := PChar(Application.ExeName);

MessageID := RegisterWindowMessage(UniqueAppStr);

ShowWindow(Application.Handle, SW_Hide);

Application.ShowMainForm:=FALSE;

end;

finalization

begin

ifWProc <> Nil thenSetWindowLong(Application.Handle, GWL_WNDPROC, LongInt(WProc));

end;

end.

Как не допустить запуск второй копии программы IX

YoungHackerрекомендует следующий код:

Был взят из кулибы и доработан, поскольку возникали ситуации когда программа, по HotKey назначенным на ярлык, запускалась дважды и более раз. Связано с тем что поиск мутекса и его создание разнесены во времени и пока в одном приложении мутекс не нашелся но еще не создался второе приложение тоже не находит мутекса и инициирует его создание

Поиск окон и создание их нарываются на те-же проблемы. Из RxLib Функция тоже не обходит этой ситуации.

Мой вариант немного дорабатывает уже значительно переработанное то что предоставили разработчики Delphi 2 Пачека (Pacheco) и Тайхайра (Teixeira). и находится в файле TPrevInstUnit. В файле проекта пишется следующий вызов:

begin

//– Найти предыдущую версию программы

if(initinstance) then begin

Application.Initialize;

Application.CreateForm( );

Application.Run;

end;

end.

Файл TPrevInstUnit

unitTPrevInstUnit;

interface

usesForms, Windows, Dialogs, SysUtils;

functionInitInstance : Boolean;

implementation

const

UniqueAppStr : PChar = #0; // Различное для каждого приложения

// Но одинаковое для каждой копии программы

var

MessageId : Integer;

OldWProc : TFNWndProc = Nil;

MutHandle : THandle = 0;

SecondExecution : Boolean = False;

functionNewWndProc(Handle: HWND; Msg: Integer; wParam, lParam: Longint): Longint; StdCall;

begin

//- Если это - сообщение о регистрации... }

if(Msg = MessageID) then begin

//- если основная форма минимизирована

if IsIconic(Application.Handle) then begin

//- восстанавливаем

ееApplication.Restore;

end

else begin

//- вытаскиваем на перед

ShowWindow(Application.Handle, SW_SHOW);

SetForegroundWindow(Application.Handle);

Application.BringToFront;

end;

Result := 0;

end

else

{ В противном случае посылаем сообщение предыдущему окну }

Result := CallWindowProc(OldWProc, Handle, Msg, wParam, lParam);

end;

functionInitInstance : Boolean;

var

BSMRecipients: DWORD;

begin

Result := False;

//- пробуем открыть MUTEX созданный предыдущей копией программы

MutHandle := CreateMutex( Nil, True, UniqueAppStr);

//- Мутекс уже был создан ?

SecondExecution := (GetLastError = ERROR_ALREADY_EXISTS);

if(MutHandle = 0) then begin

ShowMessage('Ошибка создания Mutex.');

Exit;

end;

if Not(SecondExecution) then begin

//- назначаем новый обработчик сообщений приложения, а старый сохраняем

OldWProc := TFNWndProc(SetWindowLong(Application.Handle, GWL_WNDPROC, Longint(@NewWndProc)));

//- если обработчик не найден устанавливаем ошибку

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Советы по Delphi. Версия 1.4.3 от 1.1.2001»

Представляем Вашему вниманию похожие книги на «Советы по Delphi. Версия 1.4.3 от 1.1.2001» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Советы по Delphi. Версия 1.4.3 от 1.1.2001»

Обсуждение, отзывы о книге «Советы по Delphi. Версия 1.4.3 от 1.1.2001» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x