Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Einfügen in Sourcecode vom RAD Studio ? (https://www.delphipraxis.net/122109-einfuegen-sourcecode-vom-rad-studio.html)

RWarnecke 9. Okt 2008 15:05


Einfügen in Sourcecode vom RAD Studio ?
 
Hallo,

gibt es eine Möglichkeit, dass ich von einem anderen Programm einen Text an die aktuelle Stelle im Sourcecode einfügen kann, wenn Turbo Delphi oder RAD Studio mit einem aktuellen Projekt geöffnet ist. Ich habe schon mit WinSpy rumgespielt, komme aber leider nicht weiter.

Wäre nett, wenn Ihr mir da helfen könntet.

Mein jetziger Sourcecode :
Delphi-Quellcode:
function FindWindowEx2(hParent: HWND; ChildClassName: string; ChildNr: Word): HWND;
var
  i: Word;
  hChild: HWND;
begin
  hChild := 0;
  Result := 0;
  Dec(ChildNr);
  for i := 0 to ChildNr do
  begin
    hChild := FindWindowEx(hParent, hChild, PChar(ChildClassName), nil);
    if hChild = 0 then
      Break;
    Result := hChild;
  end;
end;

procedure TForm5.Button1Click(Sender: TObject);
var
  wndMain, wndChild: HWND;
begin
  wndMain := FindWindow('TAppBuilder',nil);
  if wndMain <> 0 then
  begin
    wndChild := FindWindowEx(wndMain, 0, 'TEditorDockPanel', nil);
    wndChild := FindWindowEx(wndChild, 0, 'TEditWindow', nil);
    wndChild := FindWindowEx(wndChild, 0, 'TPanel', nil);
    wndChild := FindWindowEx(wndChild, 0, 'TPanel', nil);
    wndChild := FindWindowEx2(wndChild,'TPanel', 2);
    wndChild := FindWindowEx(wndChild, 0, 'TPanel', nil);
    wndChild := FindWindowEx(wndChild, 0, 'TPanel', nil);
    wndChild := FindWindowEx(wndChild, 0, 'TPanel', nil);
    wndChild := FindWindowEx(wndChild, 0, 'TEditControl', nil);
    if wndChild <> 0 then
    begin
      SendMessage(wndChild, WM_COPYDATA, 0, LongInt(PChar('Eingefügt')));
      ShowMessage('Window Handle: ' + IntToStr(wndChild));
    end;
  end;
end;
Ich habe mir gedacht, fange ich einfach an und füge nur ein Wort hinzu. Leider funktioniert das weder mit WM_COPYDATA noch mit WM_SETTEXT. Ich vermute mal das liegt auch daran, dass zum Schluss nur ein TEditControl steht. Nur wie komme ich an das eigentlich Memo wo der Sourcecode drinsteht ?

Meflin 9. Okt 2008 15:25

Re: Einfügen in Sourcecode vom RAD Studio ?
 
Für diese Problemstellung läge es irgendwie erstmal auf der Hand, die OpenTools API zu verwenden, oder spricht etwas gegen ein Delphi-Plugin? Wenn du nicht dein ganzes Programm als Plugin integrieren willst, könntest du z.B. auch eine Art "Communicator-Plugin" schreiben welches dir via OpenTools-API Zugriff auf den Editor gibt und an dein Programm weiterleitet!

RWarnecke 9. Okt 2008 15:36

Re: Einfügen in Sourcecode vom RAD Studio ?
 
Zitat:

Zitat von Meflin
... du z.B. auch eine Art "Communicator-Plugin" schreiben welches dir via OpenTools-API Zugriff auf den Editor gibt und an dein Programm weiterleitet!

Ich wollte von meinem Programm auf den Sourcecodeeditor von der IDE zugreifen und nicht umgekehrt und das ganze am besten ohne Plugin für die IDE.

Edit: Rechtschreibfehler korrigiert.

Edit 2: Deshalb bin ich auf die Variante mit WinSpy gekommen.

Meflin 9. Okt 2008 15:52

Re: Einfügen in Sourcecode vom RAD Studio ?
 
Tja, dann hast du das Problem, dass du zum ermitteln des Handles prinzipiell erstmal das Handle des Delphi-Main-Windows bräuchtest, welches man über den Fenstertitel ermittelt - nur den weißt du vermutlich nicht, da er sich ja je nach geöffnetem Projekt ständig ändert :stupid:

DeddyH 9. Okt 2008 15:56

Re: Einfügen in Sourcecode vom RAD Studio ?
 
Naja, über den Classname ginge es ja auch.

RWarnecke 9. Okt 2008 16:03

Re: Einfügen in Sourcecode vom RAD Studio ?
 
Zitat:

Zitat von Meflin
Tja, dann hast du das Problem, dass du zum ermitteln des Handles prinzipiell erstmal das Handle des Delphi-Main-Windows bräuchtest, welches man über den Fenstertitel ermittelt - nur den weißt du vermutlich nicht, da er sich ja je nach geöffnetem Projekt ständig ändert :stupid:

Also kann ich jetzt daraus schliessen, dass das PlugIn für die IDE besser dafür geeignet wäre ?

Meflin 9. Okt 2008 16:06

Re: Einfügen in Sourcecode vom RAD Studio ?
 
Zitat:

Zitat von RWarnecke
Also kann ich jetzt daraus schliessen, dass das PlugIn für die IDE besser dafür geeignet wäre ?

Naja ich sags mal so: Ich finde die FindWindow-Methode wesentlich umständlicher, zumindest kenne ich keinen Weg, elegant an das Handle zu kommen (Abgesehen von der ToolsAPI :mrgreen: ). *Ich* würde das Plugin bevorzugen, aber vielleicht gibts ja einen halbwegs praktikablen anderen Weg...

RWarnecke 9. Okt 2008 16:10

Re: Einfügen in Sourcecode vom RAD Studio ?
 
Zitat:

Zitat von Meflin
Naja ich sags mal so: Ich finde die FindWindow-Methode wesentlich umständlicher, zumindest kenne ich keinen Weg, elegant an das Handle zu kommen (Abgesehen von der ToolsAPI :mrgreen: ). *Ich* würde das Plugin bevorzugen, aber vielleicht gibts ja einen halbwegs praktikablen anderen Weg...

Hast Du ein paar brauchbare Tutorials für mich. Die ich bis jetzt gefunden habe, bauen noch auf Delphi 5 - 7 auf. Oder hat sich da bis jetzt nicht groß etwas geändert ?

Edit: Aber ich werde mal etwas abwarten, ob jemand anderes noch einen anderen Weg weiß, wie ich das realisieren kann.

Meflin 9. Okt 2008 16:26

Re: Einfügen in Sourcecode vom RAD Studio ?
 
Zitat:

Zitat von RWarnecke
Hast Du ein paar brauchbare Tutorials für mich. Die ich bis jetzt gefunden habe, bauen noch auf Delphi 5 - 7 auf. Oder hat sich da bis jetzt nicht groß etwas geändert ?

Naja, das Problem ist: Es gibt nicht wirklich viele und gute Tutorials oder gar eine Dokumentation. Aber D7 ist OK, da war die ToolsAPI ja schon Interface-Basiert, blöder wäre D3, wo sie noch Klassenbasiert war. So musst du nur im Quelltext der ToolsAPI.pas gucken ob es evtl noch eine höhere/neuere Version des Interfaces aus dem Tutorial gibt. Eine gute Quelle für konkrete Problemstellungen sind die Quelltexte der GExperts ;)

Zitat:

Edit: Aber ich werde mal etwas abwarten, ob jemand anderes noch einen anderen Weg weiß, wie ich das realisieren kann.
Nuja, du könntest dir über den Prozessnamen alle Window-Handle des Prozesses ermitteln, über diese iterieren und mittels Trial & Error versuchen, ob du auf irgendeinem dann das entsprechende Editor-Fenster findest, dafür sollte dann der restliche WinSpy-Code schon passen. Ist aber auch nicht ohne...

shmia 9. Okt 2008 16:55

Re: Einfügen in Sourcecode vom RAD Studio ?
 
Zitat:

Zitat von RWarnecke
Ich wollte von meinem Programm auf den Sourcecodeeditor von der IDE zugreifen und nicht umgekehrt und das ganze am besten ohne Plugin für die IDE.

Wozu soll das gut sein ?
Ich meine es gibt auch schlauere Methoden, Daten aus einem Programm in den Sourcecode einfliesen zu lassen, als der Zugriff ins Editorfenster der IDE.
Sowieso versagen unter Windows Vista & Windows 7 alle Programme, die auf diese unsaubere Art anderen Programmen etwas unterschieben wollen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:10 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