AGB  ·  Datenschutz  ·  Impressum  







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

Markiertes Wort übernehmen

Ein Thema von ulli3000 · begonnen am 14. Okt 2004 · letzter Beitrag vom 15. Okt 2004
Antwort Antwort
ulli3000

Registriert seit: 28. Apr 2004
3 Beiträge
 
#1

Markiertes Wort übernehmen

  Alt 14. Okt 2004, 10:39
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.
  Mit Zitat antworten Zitat
Benutzerbild von Shaman
Shaman

Registriert seit: 2. Nov 2003
Ort: Schweiz
407 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Markiertes Wort übernehmen

  Alt 14. Okt 2004, 10:59
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
Daniel Pauli
Looking for answers from the great beyond
  Mit Zitat antworten Zitat
ulli3000

Registriert seit: 28. Apr 2004
3 Beiträge
 
#3

Re: Markiertes Wort übernehmen

  Alt 14. Okt 2004, 11:05
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.
  Mit Zitat antworten Zitat
Benutzerbild von Shaman
Shaman

Registriert seit: 2. Nov 2003
Ort: Schweiz
407 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Markiertes Wort übernehmen

  Alt 14. Okt 2004, 12:42
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
Daniel Pauli
Looking for answers from the great beyond
  Mit Zitat antworten Zitat
Art

Registriert seit: 14. Okt 2004
Ort: Neuwied
7 Beiträge
 
#5

Re: Markiertes Wort übernehmen

  Alt 14. Okt 2004, 13:12
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.
  Mit Zitat antworten Zitat
ulli3000

Registriert seit: 28. Apr 2004
3 Beiträge
 
#6

Re: Markiertes Wort übernehmen

  Alt 14. Okt 2004, 17:44
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.
  Mit Zitat antworten Zitat
Art

Registriert seit: 14. Okt 2004
Ort: Neuwied
7 Beiträge
 
#7

Re: Markiertes Wort übernehmen

  Alt 15. Okt 2004, 07:34
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;
  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 20:44 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