AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

IDE von "außen" steuern

Ein Thema von Hobbycoder · begonnen am 31. Mär 2017 · letzter Beitrag vom 31. Mär 2017
Antwort Antwort
Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#1

IDE von "außen" steuern

  Alt 31. Mär 2017, 10:13
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
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.351 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: IDE von "außen" steuern

  Alt 31. Mär 2017, 10:21
Dafür kannst du dir die Unit ToolsAPI anschauen.

http://docwiki.embarcadero.com/RADSt..._der_Tools-API
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#3

AW: IDE von "außen" steuern

  Alt 31. Mär 2017, 10:25
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;
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.021 Beiträge
 
Delphi 12 Athens
 
#4

AW: IDE von "außen" steuern

  Alt 31. Mär 2017, 11:08
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#5

AW: IDE von "außen" steuern

  Alt 31. Mär 2017, 11:14
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).
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#6

AW: IDE von "außen" steuern

  Alt 31. Mär 2017, 11:16
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.
Aus madExcept heraus, das war mir bekannt.
Das der Viewer als Source vorliegt nicht. Schaue ich mir mal an.
Danke
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz