mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-29 11:22:50 +02:00
IDE: further migration external tools
git-svn-id: trunk@42335 -
This commit is contained in:
parent
0fbb1e90df
commit
ddd03e966d
@ -79,8 +79,7 @@ type
|
||||
);
|
||||
TMessageLineFlags = set of TMessageLineFlag;
|
||||
|
||||
{ TMessageLine
|
||||
Access needs Lines.Tool.Enter/LeaveCriticalSection }
|
||||
{ TMessageLine }
|
||||
|
||||
TMessageLine = packed class
|
||||
private
|
||||
@ -176,8 +175,7 @@ type
|
||||
property MaxLine: integer read FMaxLine;
|
||||
end;
|
||||
|
||||
{ TMessageLines
|
||||
Access needs Tool.Enter/LeaveCriticalSection }
|
||||
{ TMessageLines }
|
||||
|
||||
TETMarksFixedEvent = procedure(ListOfTMessageLine: TFPList) of object;
|
||||
|
||||
@ -235,7 +233,7 @@ type
|
||||
{ TExtToolParser
|
||||
Read the output of a tool, for example the output of the Free Pascal compiler.
|
||||
It does not filter. Some parsers can work together, for example make and fpc.
|
||||
Usage: Tool.AddParser('fpc');
|
||||
Usage: Tool.AddParsers('fpc');
|
||||
}
|
||||
TExtToolParser = class(TComponent)
|
||||
private
|
||||
@ -270,7 +268,7 @@ type
|
||||
TMakeParser = class(TExtToolParser)
|
||||
end;
|
||||
|
||||
{ TDefaultParser - simple parser for simple text output, no filter at all }
|
||||
{ TDefaultParser - simple parser for simple text output, no filtering }
|
||||
|
||||
TDefaultParser = class(TExtToolParser)
|
||||
public
|
||||
@ -283,8 +281,7 @@ type
|
||||
const
|
||||
DefaultETViewMinUrgency = mluHint;
|
||||
type
|
||||
{ TExtToolView
|
||||
Access needs Enter/LeaveCriticalSection }
|
||||
{ TExtToolView }
|
||||
|
||||
TExtToolView = class(TComponent)
|
||||
private
|
||||
@ -1985,7 +1982,7 @@ begin
|
||||
end;
|
||||
|
||||
end.
|
||||
{$ELSE}
|
||||
{$ELSE EnableNewExtTools}
|
||||
interface
|
||||
|
||||
uses
|
||||
|
@ -285,7 +285,12 @@ type
|
||||
// progress and error messages
|
||||
function ShowProgress(const SomeText: string;
|
||||
Step, MaxStep: integer): boolean; virtual; abstract; // False if canceled by user
|
||||
function DoJumpToCompilerMessage(Index:integer;
|
||||
function DoJumpToCompilerMessage(
|
||||
{$IFDEF EnableNewExtTools}
|
||||
Msg: TMessageLine; // if nil then it jumps to first message
|
||||
{$ELSE}
|
||||
Index:integer;
|
||||
{$ENDIF}
|
||||
FocusEditor: boolean): boolean; virtual; abstract;
|
||||
procedure DoJumpToNextError(DirectionDown: boolean); virtual; abstract;
|
||||
procedure DoShowMessagesView(BringToFront: boolean = true); virtual; abstract;
|
||||
|
@ -694,7 +694,7 @@ begin
|
||||
LfmFixer.RootMustBeClassInIntf:=true;
|
||||
LfmFixer.ObjectsMustExist:=true;
|
||||
if LfmFixer.ConvertAndRepair<>mrOK then begin
|
||||
LazarusIDE.DoJumpToCompilerMessage(-1,true);
|
||||
LazarusIDE.DoJumpToCompilerMessage({$IFDEF EnableNewExtTools}nil{$ELSE}-1{$ENDIF},true);
|
||||
fOwnerConverter.fErrorMsg:='Problems when repairing form file '
|
||||
+ChangeFileExt(fOrigUnitFilename, '.lfm');
|
||||
exit(mrAbort);
|
||||
|
@ -53,8 +53,25 @@ type
|
||||
ImgIDFatal: integer;
|
||||
function GetDblClickJumps: boolean;
|
||||
procedure SetDblClickJumps(AValue: boolean);
|
||||
protected
|
||||
function GetViews(Index: integer): TExtToolView; override;
|
||||
public
|
||||
SourceMarks: TETMarks;
|
||||
function AddCustomMessage(TheUrgency: TMessageLineUrgency; Msg: string;
|
||||
aSrcFilename: string=''; LineNumber: integer=0; Column: integer=0;
|
||||
const ViewCaption: string=''): TMessageLine; override;
|
||||
procedure Clear; override;
|
||||
procedure DeleteView(View: TExtToolView); override;
|
||||
function FindUnfinishedView: TExtToolView; override;
|
||||
function GetSelectedLine: TMessageLine; override;
|
||||
function GetView(aCaption: string; CreateIfNotExist: boolean
|
||||
): TExtToolView; override;
|
||||
function IndexOfView(View: TExtToolView): integer; override;
|
||||
function SelectFirstUrgentMessage(aMinUrgency: TMessageLineUrgency;
|
||||
WithSrcPos: boolean): boolean; override;
|
||||
function SelectNextUrgentMessage(aMinUrgency: TMessageLineUrgency;
|
||||
WithSrcPos, Downwards: boolean): boolean; override;
|
||||
function ViewCount: integer; override;
|
||||
property DblClickJumps: boolean read GetDblClickJumps write SetDblClickJumps;
|
||||
end;
|
||||
|
||||
@ -137,6 +154,71 @@ begin
|
||||
MessagesFrame1.MessagesCtrl.Options+[mcoSingleClickOpensFile]
|
||||
end;
|
||||
|
||||
function TMessagesView.GetViews(Index: integer): TExtToolView;
|
||||
begin
|
||||
Result:=MessagesFrame1.Views[Index];
|
||||
end;
|
||||
|
||||
function TMessagesView.AddCustomMessage(TheUrgency: TMessageLineUrgency;
|
||||
Msg: string; aSrcFilename: string; LineNumber: integer; Column: integer;
|
||||
const ViewCaption: string): TMessageLine;
|
||||
begin
|
||||
Result:=MessagesFrame1.AddCustomMessage(TheUrgency,Msg,aSrcFilename,
|
||||
LineNumber,Column,ViewCaption);
|
||||
end;
|
||||
|
||||
procedure TMessagesView.Clear;
|
||||
begin
|
||||
MessagesFrame1.ClearViews;
|
||||
end;
|
||||
|
||||
procedure TMessagesView.DeleteView(View: TExtToolView);
|
||||
begin
|
||||
if View is TLMsgWndView then
|
||||
MessagesFrame1.DeleteView(TLMsgWndView(View));
|
||||
end;
|
||||
|
||||
function TMessagesView.FindUnfinishedView: TExtToolView;
|
||||
begin
|
||||
Result:=MessagesFrame1.FindUnfinishedView;
|
||||
end;
|
||||
|
||||
function TMessagesView.GetSelectedLine: TMessageLine;
|
||||
begin
|
||||
Result:=MessagesFrame1.MessagesCtrl.GetSelectedMsg;
|
||||
end;
|
||||
|
||||
function TMessagesView.GetView(aCaption: string; CreateIfNotExist: boolean
|
||||
): TExtToolView;
|
||||
begin
|
||||
Result:=MessagesFrame1.GetView(aCaption,CreateIfNotExist);
|
||||
end;
|
||||
|
||||
function TMessagesView.IndexOfView(View: TExtToolView): integer;
|
||||
begin
|
||||
if View is TLMsgWndView then
|
||||
Result:=MessagesFrame1.IndexOfView(TLMsgWndView(View))
|
||||
else
|
||||
Result:=-1;
|
||||
end;
|
||||
|
||||
function TMessagesView.SelectFirstUrgentMessage(
|
||||
aMinUrgency: TMessageLineUrgency; WithSrcPos: boolean): boolean;
|
||||
begin
|
||||
Result:=MessagesFrame1.SelectFirstUrgentMessage(aMinUrgency,WithSrcPos);
|
||||
end;
|
||||
|
||||
function TMessagesView.SelectNextUrgentMessage(
|
||||
aMinUrgency: TMessageLineUrgency; WithSrcPos, Downwards: boolean): boolean;
|
||||
begin
|
||||
Result:=MessagesFrame1.SelectNextUrgentMessage(aMinUrgency,WithSrcPos,Downwards);
|
||||
end;
|
||||
|
||||
function TMessagesView.ViewCount: integer;
|
||||
begin
|
||||
Result:=MessagesFrame1.ViewCount;
|
||||
end;
|
||||
|
||||
function TMessagesView.GetDblClickJumps: boolean;
|
||||
begin
|
||||
Result:=not (mcoSingleClickOpensFile in MessagesFrame1.MessagesCtrl.Options);
|
||||
|
@ -603,9 +603,13 @@ end;
|
||||
|
||||
function TExternalToolDialog.ToolDescription(Index: integer): string;
|
||||
begin
|
||||
{$IFDEF EnableNewExtTools}
|
||||
Result:=fExtToolList[Index].Title;
|
||||
{$ELSE}
|
||||
Result:=fExtToolList[Index].ShortDescription;
|
||||
if Result='' then
|
||||
Result:=fExtToolList[Index].Title;
|
||||
{$ENDIF}
|
||||
if Result='' then
|
||||
Result:=ExtractFilename(fExtToolList[Index].Filename);
|
||||
//DebugLn(['TExternalToolDialog.ToolDescription Index=',Index,' Result=',Result,' Cmd="',fExtToolList[Index].Filename,' ',fExtToolList[Index].CmdLineParams,'"']);
|
||||
@ -638,7 +642,7 @@ begin
|
||||
exit;
|
||||
end;
|
||||
{$IFDEF EnableNewExtTools}
|
||||
NewTool:=TExternalToolMenuItem.Create;
|
||||
NewTool:=TExternalToolMenuItem.Create(nil);
|
||||
{$ELSE}
|
||||
NewTool:=TExternalToolOptions.Create;
|
||||
{$ENDIF}
|
||||
@ -668,7 +672,7 @@ begin
|
||||
OldTool := fExtToolList.Items[Listbox.ItemIndex];
|
||||
If Assigned(OldTool) Then Begin
|
||||
{$IFDEF EnableNewExtTools}
|
||||
NewTool:=TExternalToolMenuItem.Create;
|
||||
NewTool:=TExternalToolMenuItem.Create(nil);
|
||||
{$ELSE}
|
||||
NewTool:=TExternalToolOptions.Create;
|
||||
{$ENDIF}
|
||||
@ -783,7 +787,9 @@ begin
|
||||
EnableButtons;
|
||||
end;
|
||||
|
||||
{$IFNDEF EnableNewExtTools}
|
||||
initialization
|
||||
ExternalToolListClass:=TExternalToolList;
|
||||
{$ENDIF}
|
||||
|
||||
end.
|
||||
|
@ -126,6 +126,7 @@ type
|
||||
procedure Assign(Src: TExternalToolMenuItems);
|
||||
procedure Add(Item: TExternalToolMenuItem);
|
||||
procedure Insert(Index: integer; Item: TExternalToolMenuItem);
|
||||
procedure Delete(Index: integer);
|
||||
procedure Move(CurIndex, NewIndex: integer);
|
||||
function Load(Config: TConfigStorage): TModalResult;
|
||||
function Load(Config: TConfigStorage; const Path: string): TModalResult;
|
||||
@ -138,6 +139,9 @@ type
|
||||
function Count: integer; inline;
|
||||
property Items[Index: integer]: TExternalToolMenuItem read GetItems; default;
|
||||
end;
|
||||
|
||||
var
|
||||
ExternalToolMenuItems: TExternalToolMenuItems = nil;
|
||||
{$ELSE}
|
||||
type
|
||||
{ TExternalToolOptions }
|
||||
@ -472,6 +476,8 @@ end;
|
||||
|
||||
destructor TExternalToolMenuItems.Destroy;
|
||||
begin
|
||||
if ExternalToolMenuItems=Self then
|
||||
ExternalToolMenuItems:=nil;
|
||||
Clear;
|
||||
FreeAndNil(fItems);
|
||||
inherited Destroy;
|
||||
@ -519,6 +525,11 @@ begin
|
||||
fItems.Insert(Index,Item);
|
||||
end;
|
||||
|
||||
procedure TExternalToolMenuItems.Delete(Index: integer);
|
||||
begin
|
||||
fItems.Delete(Index);
|
||||
end;
|
||||
|
||||
procedure TExternalToolMenuItems.Move(CurIndex, NewIndex: integer);
|
||||
begin
|
||||
fItems.Move(CurIndex,NewIndex);
|
||||
|
62
ide/main.pp
62
ide/main.pp
@ -625,7 +625,9 @@ type
|
||||
Scanner: TLinkScanner);
|
||||
|
||||
// MessagesView events
|
||||
{$IFNDEF EnableNewExtTools}
|
||||
procedure MessagesViewSelectionChanged(sender: TObject);
|
||||
{$ENDIF}
|
||||
|
||||
// SearchResultsView events
|
||||
procedure SearchResultsViewSelectionChanged(sender: TObject);
|
||||
@ -693,7 +695,9 @@ type
|
||||
procedure SetupDialogs;
|
||||
procedure SetupComponentPalette;
|
||||
procedure SetupHints;
|
||||
{$IFNDEF EnableNewExtTools}
|
||||
procedure SetupOutputFilter;
|
||||
{$ENDIF}
|
||||
procedure SetupObjectInspector;
|
||||
procedure SetupFormEditor;
|
||||
procedure SetupSourceNotebook;
|
||||
@ -839,7 +843,9 @@ type
|
||||
|
||||
// external tools
|
||||
function PrepareForCompile: TModalResult; override;
|
||||
{$IFNDEF EnableNewExtTools}
|
||||
function OnRunExternalTool(Tool: TIDEExternalToolOptions): TModalResult;
|
||||
{$ENDIF}
|
||||
function DoRunExternalTool(Index: integer; ShowAbort: Boolean): TModalResult;
|
||||
function DoSaveBuildIDEConfigs(Flags: TBuildLazarusFlags): TModalResult; override;
|
||||
function DoExampleManager: TModalResult; override;
|
||||
@ -964,7 +970,12 @@ type
|
||||
function DoConvertDelphiPackage(const DelphiFilename: string): TModalResult;
|
||||
|
||||
// message view
|
||||
function DoJumpToCompilerMessage(Index:integer;
|
||||
function DoJumpToCompilerMessage(
|
||||
{$IFDEF EnableNewExtTools}
|
||||
Msg: TMessageLine;
|
||||
{$ELSE}
|
||||
Index:integer;
|
||||
{$ENDIF}
|
||||
FocusEditor: boolean): boolean; override;
|
||||
procedure DoJumpToNextError(DirectionDown: boolean); override;
|
||||
procedure DoShowMessagesView(BringToFront: boolean = true); override;
|
||||
@ -1289,7 +1300,12 @@ begin
|
||||
SetupIDEMsgQuickFixItems;
|
||||
EditorOpts.Load;
|
||||
|
||||
{$IFDEF EnableNewExtTools}
|
||||
ExternalToolMenuItems:=TExternalToolMenuItems(EnvironmentOptions.ExternalToolMenuItems);
|
||||
ExternalToolMenuItems.LoadShortCuts(EditorOpts.KeyMap);
|
||||
{$ELSE}
|
||||
ExternalTools.LoadShortCuts(EditorOpts.KeyMap);
|
||||
{$ENDIF}
|
||||
|
||||
MiscellaneousOptions := TMiscellaneousOptions.Create;
|
||||
MiscellaneousOptions.Load;
|
||||
@ -1327,6 +1343,7 @@ begin
|
||||
FWaitForClose := False;
|
||||
|
||||
SetupDialogs;
|
||||
{$IFNDEF EnableNewExtTools}
|
||||
RunExternalTool:=@OnRunExternalTool;
|
||||
{$IFDEF UseAsyncProcess}
|
||||
if Widgetset.GetLCLCapability(lcAsyncProcess) = 1 then
|
||||
@ -1336,6 +1353,7 @@ begin
|
||||
{$ELSE}
|
||||
TOutputFilterProcess := TProcessUTF8;
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
|
||||
MainBuildBoss:=TBuildManager.Create(nil);
|
||||
MainBuildBoss.HasGUI:=true;
|
||||
@ -1431,7 +1449,9 @@ begin
|
||||
HelpBoss.ConnectMainBarEvents;
|
||||
{$IFDEF IDE_MEM_CHECK}CheckHeapWrtMemCnt('TMainIDE.Create MANAGERS');{$ENDIF}
|
||||
// setup the IDE components
|
||||
{$IFNDEF EnableNewExtTools}
|
||||
SetupOutputFilter;
|
||||
{$ENDIF}
|
||||
MainBuildBoss.SetupCompilerInterface;
|
||||
SetupObjectInspector;
|
||||
SetupFormEditor;
|
||||
@ -1532,7 +1552,13 @@ begin
|
||||
// free IDE parts
|
||||
FreeFormEditor;
|
||||
FreeTextConverters;
|
||||
{$IFDEF EnableNewExtTools}
|
||||
FreeThenNil(IDEQuickFixes);
|
||||
{$ELSE}
|
||||
FreeStandardIDEQuickFixItems;
|
||||
FreeThenNil(IDEMsgScanners);
|
||||
FreeThenNil(TheOutputFilter);
|
||||
{$ENDIF}
|
||||
FreeThenNil(GlobalDesignHook);
|
||||
FreeThenNil(LPKInfoCache);
|
||||
FreeThenNil(PkgBoss);
|
||||
@ -1541,8 +1567,6 @@ begin
|
||||
FreeThenNil(TheCompiler);
|
||||
FreeThenNil(HiddenWindowsOnRun);
|
||||
FreeThenNil(LastActivatedWindows);
|
||||
FreeThenNil(IDEMsgScanners);
|
||||
FreeThenNil(TheOutputFilter);
|
||||
FreeThenNil(GlobalMacroList);
|
||||
FreeThenNil(IDEMacros);
|
||||
FreeThenNil(IDECodeMacros);
|
||||
@ -1577,7 +1601,9 @@ end;
|
||||
procedure TMainIDE.CreateOftenUsedForms;
|
||||
begin
|
||||
MessagesView:=TMessagesView.Create(nil);
|
||||
{$IFNDEF EnableNewExtTools}
|
||||
MessagesView.OnSelectionChanged := @MessagesViewSelectionChanged;
|
||||
{$ENDIF}
|
||||
|
||||
LazFindReplaceDialog:=TLazFindReplaceDialog.Create(nil);
|
||||
end;
|
||||
@ -2030,12 +2056,14 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
{$IFNDEF EnableNewExtTools}
|
||||
procedure TMainIDE.SetupOutputFilter;
|
||||
begin
|
||||
TheOutputFilter:=TOutputFilter.Create;
|
||||
TheOutputFilter.OnGetIncludePath:=@CodeToolBoss.GetIncludePathForDirectory;
|
||||
IDEMsgScanners:=TMessageScanners.Create;
|
||||
end;
|
||||
{$ENDIF}
|
||||
|
||||
procedure TMainIDE.SetupObjectInspector;
|
||||
begin
|
||||
@ -3136,7 +3164,7 @@ begin
|
||||
|
||||
ecContextHelp:
|
||||
if Sender=MessagesView then
|
||||
HelpBoss.ShowHelpForMessage(-1)
|
||||
HelpBoss.ShowHelpForMessage{$IFDEF EnableNewExtTools}(){$ELSE}(-1){$ENDIF}
|
||||
else if Sender is TObjectInspectorDlg then
|
||||
HelpBoss.ShowHelpForObjectInspector(Sender);
|
||||
ecEditContextHelp:
|
||||
@ -4374,12 +4402,14 @@ end;
|
||||
|
||||
procedure TMainIDE.mnuToolConfigureClicked(Sender: TObject);
|
||||
begin
|
||||
if ShowExtToolDialog(ExternalTools,GlobalMacroList)=mrOk then
|
||||
if ShowExtToolDialog(
|
||||
{$IFDEF EnableNewExtTools}ExternalToolMenuItems{$ELSE}ExternalTools{$ENDIF},
|
||||
GlobalMacroList)=mrOk then
|
||||
begin
|
||||
// save to environment options
|
||||
SaveEnvironment(true);
|
||||
// save shortcuts to editor options
|
||||
ExternalTools.SaveShortCuts(EditorOpts.KeyMap);
|
||||
{$IFDEF EnableNewExtTools}ExternalToolMenuItems{$ELSE}ExternalTools{$ENDIF}.SaveShortCuts(EditorOpts.KeyMap);
|
||||
EditorOpts.Save;
|
||||
UpdateHighlighters(True);
|
||||
SourceEditorManager.ReloadEditorOptions;
|
||||
@ -7083,10 +7113,13 @@ begin
|
||||
OldToolStatus := ToolStatus; // It can still be itDebugger, if the debugger is still stopping. Prevent any "Run" command after building, until the debugger is clear
|
||||
ToolStatus:=itBuilder;
|
||||
|
||||
{$IFDEF EnableNewExtTools}
|
||||
{$ELSE}
|
||||
ConnectOutputFilter;
|
||||
for err := Low(TFPCErrorType) to High(TFPCErrorType) do
|
||||
with Project1.CompilerOptions.CompilerMessages do
|
||||
TheOutputFilter.ErrorTypeName[err] := ErrorNames[err];
|
||||
{$ENDIF}
|
||||
|
||||
// compile
|
||||
CompilerFilename:=Project1.GetCompilerFilename;
|
||||
@ -7180,7 +7213,7 @@ function TMainIDE.DoAbortBuild: TModalResult;
|
||||
begin
|
||||
Result:=mrOk;
|
||||
if ToolStatus<>itBuilder then exit;
|
||||
TheOutputFilter.StopExecute:=true;
|
||||
AbortBuild;
|
||||
end;
|
||||
|
||||
procedure TMainIDE.DoQuickCompile;
|
||||
@ -8080,12 +8113,14 @@ begin
|
||||
MainBuildBoss.RescanCompilerDefines(false,false,false,false);
|
||||
end;
|
||||
|
||||
{$IFNDEF EnableNewExtTools}
|
||||
function TMainIDE.OnRunExternalTool(Tool: TIDEExternalToolOptions): TModalResult;
|
||||
begin
|
||||
SourceEditorManager.ClearErrorLines;
|
||||
Result:=ExternalTools.Run(Tool,GlobalMacroList,false);
|
||||
DoCheckFilesOnDisk;
|
||||
end;
|
||||
{$ENDIF}
|
||||
|
||||
function TMainIDE.DoCheckSyntax: TModalResult;
|
||||
var
|
||||
@ -8521,8 +8556,12 @@ end;
|
||||
|
||||
procedure TMainIDE.AbortBuild;
|
||||
begin
|
||||
{$IFDEF EnableNewExtTools}
|
||||
ExternalTools.TerminateAll;
|
||||
{$ELSE}
|
||||
if TheOutputFilter<>nil then
|
||||
TheOutputFilter.StopExecute:=true;
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
procedure TMainIDE.UpdateCaption;
|
||||
@ -8841,7 +8880,12 @@ begin
|
||||
ErrType:=FPCErrorTypeNameToType(ALine.Parts.Values['Type']);
|
||||
end;
|
||||
|
||||
function TMainIDE.DoJumpToCompilerMessage(Index:integer;
|
||||
function TMainIDE.DoJumpToCompilerMessage(
|
||||
{$IFDEF EnableNewExtTools}
|
||||
Msg: TMessageLine;
|
||||
{$ELSE}
|
||||
Index:integer;
|
||||
{$ENDIF}
|
||||
FocusEditor: boolean): boolean;
|
||||
var
|
||||
MaxMessages: integer;
|
||||
@ -11141,10 +11185,12 @@ end;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
{$IFNDEF EnableNewExtTools}
|
||||
procedure TMainIDE.MessagesViewSelectionChanged(sender: TObject);
|
||||
begin
|
||||
DoJumpToCompilerMessage(TMessagesView(Sender).SelectedMessageIndex,True);
|
||||
end;
|
||||
{$ENDIF}
|
||||
|
||||
procedure TMainIDE.SearchResultsViewSelectionChanged(sender: TObject);
|
||||
begin
|
||||
|
@ -3943,7 +3943,7 @@ begin
|
||||
mtInformation,[mbOk],'');
|
||||
end;
|
||||
end else begin
|
||||
MainIDE.DoJumpToCompilerMessage(-1,true);
|
||||
MainIDE.DoJumpToCompilerMessage({$IFDEF EnableNewExtTools}nil{$ELSE}-1{$ENDIF},true);
|
||||
Result:=mrAbort;
|
||||
exit;
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user