AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Text an Cursorposition auslesen (global)
Thema durchsuchen
Ansicht
Themen-Optionen

Text an Cursorposition auslesen (global)

Ein Thema von nezumi · begonnen am 23. Aug 2008 · letzter Beitrag vom 23. Aug 2008
Antwort Antwort
nezumi

Registriert seit: 20. Apr 2006
Ort: Berlin
56 Beiträge
 
#1

Text an Cursorposition auslesen (global)

  Alt 23. Aug 2008, 10:57
Hallo zusammen,

für ein Übersetzungsprogramm möchte ich, dass bei drücken der mittleren Maustaste, der Text an der aktuellen Cursorposition ausgelesen wird.

Das soll natürlich bei einem Mausklick außerhalb meines Programms funktionieren (z.B. in Word Dokument, auf einer Internetseite usw)

Kann mir jemand einen Tipp geben wie ich da weiterkomme? (Ich hab bisher keinerlei Erfahrung, wie ich etwas außerhalb meines Programms machen kann)

Danke
nezumi
- Eddy the Eagle unter den Programmierern -
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Text an Cursorposition auslesen (global)

  Alt 23. Aug 2008, 11:00
Falls es sich um ein Wincontrol handelt, ist es einfach: Du holst dir mit WindowFromPoint das Handle und liest mit WM_GETTEXT den Text aus. Falls es allerdings kein Wincontrol ist (z.B. bei den meisten Browsern), wird es äußerst schwierig.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
nezumi

Registriert seit: 20. Apr 2006
Ort: Berlin
56 Beiträge
 
#3

Re: Text an Cursorposition auslesen (global)

  Alt 23. Aug 2008, 11:16
Hallo Apollonius,

danke für die schnelle Antwort.

Dass es bei Browsern etc schwierig wird hatte ich mir schon gedacht. Daher war meine Idee, dass ich das mit Keybd_Event mache.

Also ich gehe mit
Keybd_Event(VK_LEFT,0,KEYEVENTF_KEYUP,0); zurück bis zum Wortanfang und mit
Delphi-Quellcode:
Keybd_Event(VK_Shift,0,0,0);
Keybd_Event(VK_RIGHT,0,0,0);
Keybd_Event(VK_Shift,0,KEYEVENTF_KEYUP,0);
Keybd_Event(VK_RIGHT,0,KEYEVENTF_KEYUP,0);
markiere ich das Wort bis zu seinem Ende (halt noch mit Schleife und einer sinnvollen Abbruchbedingung, Leerzeichen oder so). Dann kann ich das Wort in die Zwischenablage kopieren und übersetzen.

Nur: wie löse ich diese Prozedur aus? Das soll ja immer passieren, wenn die mittlere Maustaste gedrückt wird.
nezumi
- Eddy the Eagle unter den Programmierern -
  Mit Zitat antworten Zitat
helgew

Registriert seit: 30. Jul 2008
125 Beiträge
 
#4

Re: Text an Cursorposition auslesen (global)

  Alt 23. Aug 2008, 11:18
Ich hab gerade etwas im Forum herumgesucht und schlage einen anderen Ansatz vor: Mit GetDC(0) und BitBlt kannst du einen snapshot des aktuellen Desktops erzeugen ( bei mehreren Monitoren weiß ich nicht, ob das schief gehen kann ) und dann Texterkennung darauf loslassen, so funktioniert das auch in Flashobjekten, pdf-Ansichten und von graphischen Eingabefeldern.

Such mal nach "OCR", da findet man sowas:
http://www.delphipraxis.net/internal...ade76b7b30e962
  Mit Zitat antworten Zitat
nezumi

Registriert seit: 20. Apr 2006
Ort: Berlin
56 Beiträge
 
#5

Re: Text an Cursorposition auslesen (global)

  Alt 23. Aug 2008, 11:34
Danke helgew,

das klingt interessant, ist mir aber echt zu schwierig. Ich kann gar nicht glauben, dass es nicht einfacher geht (aber vielleicht gehts ja tatsächlich nicht).

Vorläufig würde mir ja schon die Möglichkeit reichen, den Cursor in irgendeinem Text zu bewegen, unabhängig davon, in welcher Anwendung sich der Text befindet (word, wordpad, pdf). Der Rest ist dann glaub ich nicht mehr so schwer...
nezumi
- Eddy the Eagle unter den Programmierern -
  Mit Zitat antworten Zitat
helgew

Registriert seit: 30. Jul 2008
125 Beiträge
 
#6

Re: Text an Cursorposition auslesen (global)

  Alt 23. Aug 2008, 11:41
Wenn man den Text markieren kann, kannst du ihn auch in die Zwischenablage kopieren lassen und dann hast du ihn ja
  Mit Zitat antworten Zitat
nezumi

Registriert seit: 20. Apr 2006
Ort: Berlin
56 Beiträge
 
#7

Re: Text an Cursorposition auslesen (global)

  Alt 23. Aug 2008, 11:46
Stimmt, mein Problem ist nur, dass nichts markiert ist.

Der Anwender klickt in einem Text auf ein Wort. Jetzt muss mein Programm ein paar Zeichen rechts und links des Cursors markieren und dann in die Zwischenablage kopiern.

Aber wie löse ich das aus? Es soll ja nicht zuerst auf einen Knopp meines Programms gedrückt werden, damit das passiert.
nezumi
- Eddy the Eagle unter den Programmierern -
  Mit Zitat antworten Zitat
helgew

Registriert seit: 30. Jul 2008
125 Beiträge
 
#8

Re: Text an Cursorposition auslesen (global)

  Alt 23. Aug 2008, 14:24
Das Ablegen in die Zwischenablage obliegt dem Programm selbst, so wäre man um mögliche custrom draw Probleme herumgekommen, wie sie dir Acrobat Reader präsentieren wird Da du aber offensichtlich ein eigenes Click-Event behandeln willst und nach Möglichkeit nicht nur das Fenster unter dem Cursor melken, weiß ich auch nicht weiter, wie es einfach gehen könnte
  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 21:18 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