Просмотр кода
Идентификатор: 2b1ab809 Описание: Код загружен: 7 июля 2011, 15:11 (min@y™)
program SourceEditor; {%ToDo 'SourceEditor.todo'} uses Forms, Windows, Messages, SysUtils, Main in 'Main.pas' {SourceEditorMainForm}, uPages in 'uPages.pas', uXmlUtils in 'uXmlUtils.pas', ECXMLParser in 'ECXMLParser.pas', ECXMLTokenizer in 'ECXMLTokenizer.pas', uRoutines in 'uRoutines.pas', uNodes in 'uNodes.pas', uConsts in 'uConsts.pas', uInputBox in 'uInputBox.pas' {InputBoxForm}, uEncoding in 'uEncoding.pas', uProjectProperties in 'uProjectProperties.pas' {ProjectPropsForm}, uHLManager in 'uHLManager.pas', SynHighlighterBasis in 'SynHighlighterBasis.pas', uHighlightForm in 'uHighlightForm.pas' {HighlightForm}, uGotoLineForm in 'uGotoLineForm.pas' {GotoLineForm}, uTypes in 'uTypes.pas', uLogForm in 'uLogForm.pas' {LogForm}, uSearchReplaceForm in 'uSearchReplaceForm.pas' {SearchReplaceForm}, uSettings in 'uSettings.pas', uParamsForm in 'uParamsForm.pas' {ParamsForm}, uAutoComleteForm in 'uAutoComleteForm.pas' {AutocompleteForm}, uNewKeyForm in 'uNewKeyForm.pas' {NewKeyForm}, rpVersionInfo in 'rpVersionInfo.pas', uHtmlUtils in 'uHtmlUtils.pas', uToolBarsForm in 'uToolBarsForm.pas' {ToolBarsForm}, uBasisUtils in 'uBasisUtils.pas', uDeviceAddressForm in 'uDeviceAddressForm.pas' {DeviceAddressForm}, uCharsForm in 'uCharsForm.pas' {CharsForm}, uEncodingForm in 'uEncodingForm.pas' {EncodingForm}, uNewTableForm in 'uNewTableForm.pas' {CreateTableForm}, uNewLinkForm in 'uNewLinkForm.pas' {CreateLinkForm}, uTextFinder in 'uTextFinder.pas', uTagsForm in 'uTagsForm.pas' {TagsForm}, uNewTagForm in 'uNewTagForm.pas' {NewTagForm}, uPageSetupForm in 'uPageSetupForm.pas' {PageSetupForm}, uPrintPreviewForm in 'uPrintPreviewForm.pas' {PrintPreviewForm}, uFindInFilesForm in 'uFindInFilesForm.pas' {FindInFilesForm}; {$R *.res} const // Запуск только одной копии программы OneInstMutexName = 'SourceEditorMOneInstanceMutex'; OneInstActivateMessage = 'SourceEditorActivateMessage'; procedure HaltProgram; begin try if MutexHandle <> 0 then CloseHandle(MutexHandle); except // Молчим в тряпочку... end; Halt; end; function IsNextInstance: Boolean; begin Result:= False; MutexHandle:= 0; MutexHandle:= CreateMutex(nil, True, OneInstMutexName); if MutexHandle <> 0 then begin if GetLastError = ERROR_ALREADY_EXISTS then begin Result:= True; CloseHandle(MutexHandle); MutexHandle:= 0; end; end; end; // Передача командной строки в первую копию программы procedure SendCommandLine; var PrevMainFormHandle: THandle; // Хэндл формы предыд. копии программы FileName: string; Len: Integer; Data: TCopyDataStruct; // Структура для передачи Buffer: array[0..MAX_PATH - 1] of Char; // Буфер для передачи begin FileName:= ParamStr(1); Len:= Length(FileName); if not FileExists(FileName) or (Len > MAX_PATH) then Exit; PrevMainFormHandle:= FindWindow('TSourceEditorMainForm', nil); if PrevMainFormHandle = 0 then Exit; //Buffer:= FileName; FillChar(Buffer, SizeOf(Buffer), #0); Move(FileNAme[1], Buffer[0], Len); Data.dwData:= 0; Data.cbData:= SizeOf(Buffer); Data.lpData:= @Buffer; SendMessage(PrevMainFormHandle, WM_COPYDATA, 0, Integer(@Data)); end; begin Application.Initialize; // Недопущение второй копии ActivateMessage:= RegisterWindowMessage(OneInstActivateMessage); if IsNextInstance then begin PostMessage(HWND_BROADCAST, ActivateMessage, 0, 0); SendCommandLine(); HaltProgram(); end; GlobalInit(); ProgramSettings:= TProgramSettings.Create(); HighlighterManager:= THighlighterManager.Create(); Application.CreateForm(TSourceEditorMainForm, SourceEditorMainForm); Application.Run; ProgramSettings.Free(); HighlighterManager.Free(); end.