![]() |
IDE von "außen" steuern
Hi,
ich arbeite gerade an einem Projekt, welches mir Fehlernachrichten, die mir von MadExcept per Mail zugeschickt werden, automatisch einliest, verdichtet und katalogisiert. Mit den daraus gewonnenen Informationen möchte ich gerne direkt in die IDE springen und netterweise gleich an die passende Zeile, die betreffende Unit laden oder wenn noch nicht offen auch gleich das dazugehörige Projekt. Kenn mir jemand sagen, wie die IDE diesbezüglich anspricht, oder wo so etwas dokumentiert ist? Auch Links auf Beispiel wären willkommen. Danke. Gruß Hobbycoder |
AW: IDE von "außen" steuern
Dafür kannst du dir die Unit ToolsAPI anschauen.
![]() |
AW: IDE von "außen" steuern
Du könntest es mit einem IDE-Experten probieren und dann fleißig mit der ToiolsAPI hantieren.
Hier mal ein paar einschlägige Code-Schnipsel:
Delphi-Quellcode:
procedure TDMSParserWizMainForm.ShowUnitSource(const FileName: string);
begin (BorlandIDEServices as IOTAActionServices).OpenFile(FileName); end; procedure ShowMessageView; var h: HWND; c: TComponent; begin // The GetFocus/SetFocus is necessary in my case the IDE is popped up some // other message ("the contents of a.txt have changed: reload?") -- without // doing SetFocus, the technique would result in the messageview being in the // foreground, but the messagebox still waiting for an answer. h := Windows.GetFocus; try c := Application.FindComponent('EditorActionLists'); if c = nil then Exit; c := c.FindComponent('ecMessageView'); if (c = nil) or not (c is TAction) then Exit; TAction(c).Execute; finally Windows.SetFocus(h); end; end; procedure TDMSParserWizMainForm.ShowInMessageView(const FileName, MessageStr: string; LineNumber, ColumnNumber: Integer); var MessageServices: IOTAMessageServices40; begin MessageServices := BorlandIDEServices as IOTAMessageServices40; MessageServices.ClearCompilerMessages; MessageServices.ClearToolMessages; MessageServices.AddToolMessage(FileName, MessageStr, 'DMS-Parser', LineNumber, ColumnNumber); ShowMessageView; end; procedure TDMSParserWizMainForm.ShowParseError(e: EParseError); var EditorServices: IOTAEditorServices; TopView: IOTAEditView; EditActions: IOTAEditActions; begin ShowInMessageView(CurrUnit, e.Message, e.LineNo, e.ColumnNo); EditorServices := BorlandIDEServices as IOTAEditorServices; TopView := EditorServices.TopView; if TopView = nil then begin ShowUnitSource(CurrUnit); TopView := EditorServices.TopView; end; if TopView <> nil then begin EditActions := TopView as IOTAEditActions; EditActions.NextError; end; Close; Beep; end; |
AW: IDE von "außen" steuern
madExcept bietet sowas bereits von Haus aus. Wenn du z.B. im madExceptViewer einen Doppelclick im Callstack machst, dann springt er ja auch in der IDE an die betreffende Codezeile.
Du kannst diesen Mechanismus ebenfalls nutzen, indem du die komplette Zeile aus dem Stacktrace nimmst, alle Tabs (#9) durch Blanks ersetzt und damit die Methode HyperJumpCallStack aus madExcept.pas aufrufst. Kann allerdings zu Problemen führen, wenn meherere IDEs gleichzeitig offen sind. Vielleicht wäre es auch eine Idee, den Viewer komplett in deine Applikation zu integrieren. Die Sourcen liegen ja vor. |
AW: IDE von "außen" steuern
Wenn ich das richtig verstanden habe, dann geht der Weg also immer über eine IDE-Erweiterung, die dann ihrerseits die Tools-API aufruft.
Und die IDE-Erweiterung kann ich dann so steuerbar machen, wie ich es will (http, Filebasieren, oder was mir grad so einfällt). |
AW: IDE von "außen" steuern
Zitat:
Das der Viewer als Source vorliegt nicht. Schaue ich mir mal an. Danke :-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz