Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Text in einem "fremden" Fenster markieren (https://www.delphipraxis.net/96908-text-einem-fremden-fenster-markieren.html)

golisan 1. Aug 2007 14:49


Text in einem "fremden" Fenster markieren
 
Hallo Leute,

ich möchte von meinem Programm aus, einen Text in einem anderen Fenster markieren.
Hört sich ja erst mal einfach an ...
Das "andere" Fenster ist ein Child einer MDI-Anwendung. Das Fenster-Handle habe ich, auch kann ich das Fenster per
ShowWindow(wnd,SW_MAXIMIZE) maximieren. Aber wie komme ich an den Text im Editor und wie kann ich Texte markieren?

Die Hierarchie der Fenster ist:
NIDEWindowClass
->MDIClient
-->PgmEdtMDIWin (mit dem Handle kann man minimieren, maximieren etc.)
--->PgMEdtEditGroup
---->PgmEdtEditWin (hier steht der Text drin)
---->ScrollBar(hor.)
---->ScrollBar(vert.)

Habt ihr eine Idee oder ist das ganze zum Scheitern verurteilt? :coder2:
Danke!

bitsetter 1. Aug 2007 16:03

Re: Text in einem "fremden" Fenster markieren
 
Hallo,

Mit dem Tool Componentfinder von SirT kannst du dir gleich den Quelltext genieren lassen. Du kannst ja mal versuchen, ob
Delphi-Quellcode:
var
  SelStart, SelEnd : Integer;
begin
  SelStart:= ...;
  SelEnd:= ...;
  SendMessage((*HWND*), EM_SETSEL, SelStart, SelEnd);
was bingt.

golisan 1. Aug 2007 21:43

Re: Text in einem "fremden" Fenster markieren
 
Hi bitsetter,

das tut leider nicht, da das Fenster kein edit enthält.
Das andere Fenster(es ist ein Editor einer anderen Programmiersprache), hat auch eine Suchenfunktion, die mit STRG-F aufgerufen werden kann. Habe es auch schon geschafft mit
Delphi-Quellcode:
Keybd_Event(vk_control,0,0,0);
Keybd_Event(VkKeyScan('f'),0,0,0);
Keybd_Event(VkKeyScan('f'),0,KEYEVENTF_KEYUP,0);
Keybd_Event(vk_control,0,KEYEVENTF_KEYUP,0);
den Suchen-Dialog von meinem Programm aus aufzurufen.
Das hilft zwar nicht unbedingt, da ich eigentlich nicht will, daß man diesen Dialog sieht, aber als ich mit Winspector geschaut habe, was da pasiert, habe ich gesehen, daß dieser Suchen-Dialog von der Klasse #32770 abstammt. Also ein Standard-Win-API.
Jetzt hatte ich gleich zwei Ideen auf einmal :roteyes:
1. kann ich nicht einfach einen TFindDialog erzeugen und ihm als Owner das Handle des Editors geben?
Das Problem dabei ist, dass der create ein TComponent verlangt ich aber "nur" ein HWND habe. Kann
man das irgendwie "konvertieren"?(TComponent(hwnd) geht nicht). Oder geht TFindDialog nur mit (Rich)Edits?
2. falls das mit dem TFindDialog nicht geht, kann ich mit CreateWindow mir so einen Such-Dialog
"erschaffen"
sowas wie
Delphi-Quellcode:
CreateWindow(Ex)(WS_EX_TOPMOST??,'#32770','Find',WS_OVERLAPPED??,100,100,200,200,hwnd,null,0,0);
(wobei ich hier nicht richtig weiß, wie ich die Parameter bestücken soll)
und wie schicke ich dann meine Suche los.
Da der Editor den Standard(#32770)-Dialog verwendet, muss er auch eine entsprechende Schnittstelle besitzen um mit dem #32770 kommunizieren zu können.
Uff .. viel geschrieben ... aber mir raucht schon das Hirn ... :wall:
Merci


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