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 Markiertes Wort übernehmen (https://www.delphipraxis.net/31808-markiertes-wort-uebernehmen.html)

ulli3000 14. Okt 2004 10:39


Markiertes Wort übernehmen
 
Ich will folgendes machen.

Mein Programm reagiert via hooks.dll auf einen bestimmten Tastendruck.
Nun möchte ich aber wenn ein Wort markiert ist dieses in meinem Programm übernehmen. Beispiel:

User: Markiert

Bei einem bestimmten Tastendruck soll in meinem Programm das Wort Markiert übernommen werden.

Es soll wenn möglich aus jeder Anwendung übernommen werden.

Shaman 14. Okt 2004 10:59

Re: Markiertes Wort übernehmen
 
Hoi

Du könntest das über die Zwischenablage machen, indem Du Ctrl+C simulierst. Doch Du musst dir überlegen, wie Du die Daten, die sich in der Zwischenablage befanden, erhalten kannst...

Gruss
Shaman

ulli3000 14. Okt 2004 11:05

Re: Markiertes Wort übernehmen
 
Ist das nicht einwenig aufwendig?????

Es müßte doch erheblich einfacher gehen. Denn ich könnte ja mit der hooks auch Tastatureingaben abfangen. Nur anstatt eine Eingabe abzufangen würde ich z.b bei Tastendruck F12 das markierte Wort übernehmen.

Shaman 14. Okt 2004 12:42

Re: Markiertes Wort übernehmen
 
Soviel ich weiss, ist Copy&Paste das, was am zuverlässigsten funktioniert. Das geht nämlich auch bei Eingabefelder im Browser, die kein Handle haben.

Gruss
Shaman

Art 14. Okt 2004 13:12

Re: Markiertes Wort übernehmen
 
Hallo,

versuch in follgende Richtung zu denken:
1. mit GetActiveWindow erhälst do ein Handle für das aktive Fenster auf dem Desktop
2. mit der Hilfe der Sendmessage-Prozedur kannst du ein Objekt finden, das im Moment Focus hat.
3. mit der Hilfe von demselben Prozedurchen (Sendmessage) kannst du den markierenden Text erhalten.

Code:
SendMessage(Window.Handle, Windowsmessage, Param1, Param2)
Das Problemm besteht darin passendes Windowsmessage zu finden. Die Liste ist zimmlich groß, meanche Messages geben dir als Ergebniss die Record-Structur zurück, auf die du ein Zeiger als Parameter verwenden sollst.

Wenn du geduld hast, kannst du das ausprobieren.

ulli3000 14. Okt 2004 17:44

Re: Markiertes Wort übernehmen
 
Ich hatte es erstmal mit STRG+C simulieren probiert.

Es funktioniert auch alles soweit. Hotkey Taste gedrückt die Markierung wird auch übernommen. Das funktioniert zu 99%.

Zitat:

mit GetActiveWindow erhälst do ein Handle für das aktive Fenster auf dem Desktop
Nach dem Hotkey ist mein Programm das Aktive, oder sehe ich das falsch??? Eigentlich nicht sonst würde STRG+C ja nicht funktionieren. Mal gucken eventuell ist das ja besser.

Art 15. Okt 2004 07:34

Re: Markiertes Wort übernehmen
 
Ich habe dich so verstanden, dass dein Programm im Hintergrund leuft, und du willst einen markierenden Text aus einer fremden Anwendung kriegen.
Wenn du eine Markierung aus deinem Programm bekommen willst, geht es glaube ich noch leichter.

Bei den Eingabefelder (TEdit) und ihre Erben (TRichEdit usw.) gibt es zwei Eigenschaften 'SelStart' und 'SelLength', bei einigen sogar 'SelText'.


Bsp.:

Code:
Var
  Mark: String;
     i: Integer;
begin
  for i:=0 to MyForm.ComponentCount-1 do
    if myForm.Components[i] is TEdit then with MyForm.Components[i] as TEdit do
      if Focused then Mark:=Copy(Text,SelStart,SelLength);
end;
oder aus im Moment laufendem Programm

Code:
procedure TSDIAppForm.EditSearch1Execute(Sender: TObject);
Begin
  if ResTxt.SelLength>0 then //ResTxt ist ein TRichText
    FindDialog.FindText:=Trim(Copy(ResTxt.SelText,1,length(ResTxt.SelText)));
  FindDialog.Execute;
end;


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