Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.133.141.6] |
|
Сообщ.
#1
,
|
|
|
Взял сдесь код и никак немогу его запустить.
Запутался в структуре. Я с этими конструкторами дело имел последний раз ещё в институте. Напроч забыл как это делаеться. Êàê ñäåëàòü, ÷òîáû çàïóñêàëàñü òîëüêî îäíà êîïèÿ ïðèëîæåíèÿ 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; |
Сообщ.
#2
,
|
|
|
А что именно непонятно с деструкторами?
|
Сообщ.
#3
,
|
|
|
уже разобрался
|