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 Kopieren mittels Shift Ende (https://www.delphipraxis.net/94620-text-kopieren-mittels-shift-ende.html)

Dumpfbacke 24. Jun 2007 10:58


Text Kopieren mittels Shift Ende
 
Hallo,
ich wollte z.B. eine Text aus dem Editior mittels eines anderen Programmes kopieren. Dazu positioniere ich erst die Maus in den Editor und klicke mit links. Nun vershciebe ich den Cursor an die endsprechende Stelle. (Anfang der Zeile). Nun wolle ich ein Shift Ende senden, damit der Text markiert ist. Dises mache ich mittels.

Delphi-Quellcode:
Keybd_event(vk_Shift,0,0,0);
keybd_event(VK_end,0,0,0);
keybd_event(vk_Shift,0,keyeventf_keyup,0);
keybd_event(ck_end,keyevent_keyup,0);
Der Cursor geht auch ans ende der Zeile nur die Zeile ist nicht blau makiert. Ich wollte dann einfach dein CTRL C senden um den Text in die Zwischenablege zu bekommen.

Wie kann ich den ein Shift End simumieren ?
Was mich jedoch wurdeter ein CRTL End geht ohne Probleme

:gruebel:

Tanja

bitsetter 24. Jun 2007 12:30

Re: Text Kopieren mittels Shift Ende
 
Hi,

eigentlich funktioniert es doch, zumindest wird Shift + End simuliert. Wenn ich zum Testen vorher ein Seep(2000) ausführe und innerhalb der 2 Sekunden den Cursor zum Beispiel in die Mitte einer Zeile im Editor setze, wird die Zeile von der Mitte bis zum Ende bei mir markiert.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  sleep(2000);
  Keybd_event(vk_Shift,0,0,0);
  keybd_event(VK_end,0,0,0);
  keybd_event(vk_Shift,0, keyeventf_keyup, 0);
  keybd_event(vk_end,0, keyeventf_keyup, 0);
end;

Dumpfbacke 24. Jun 2007 13:47

Re: Text Kopieren mittels Shift Ende
 
Zitat:

Zitat von bitsetter
Hi,

eigentlich funktioniert es doch, zumindest wird Shift + End simuliert. Wenn ich zum Testen vorher ein Seep(2000) ausführe und innerhalb der 2 Sekunden den Cursor zum Beispiel in die Mitte einer Zeile im Editor setze, wird die Zeile von der Mitte bis zum Ende bei mir markiert.

Komisch bei mir im normalel Editor von Windows wird nichts blau. Ich habe auch mal eine Pause eingefügt und es geht nicht.
Das es bei Dir geht wurdert mich nun.

:gruebel:

Tanja

bitsetter 24. Jun 2007 14:10

Re: Text Kopieren mittels Shift Ende
 
Zitat:

Zitat von Dumpfbacke
Komisch bei mir im normalel Editor von Windows wird nichts blau. Ich habe auch mal eine Pause eingefügt und es geht nicht.

Beim Editor von Windows funktioniert es bei mir auch, habe es mal eben noch an einen 2. PC getestet. Der Cursor befindet sich danach am Ende der zur Hälfte markierten Zeile.

Dumpfbacke 24. Jun 2007 15:41

Re: Text Kopieren mittels Shift Ende
 
Zitat:

Zitat von bitsetter

Beim Editor von Windows funktioniert es bei mir auch, habe es mal eben noch an einen 2. PC getestet. Der Cursor befindet sich danach am Ende der zur Hälfte markierten Zeile.

Mein Cursor geht auch ans Ende. Ist bei Dir der text von der Mitte bis zum Ende auch blau hinterlegt (makiert) ? Das ist bei mir nicht der Fall

Tanja :twisted:

bitsetter 24. Jun 2007 19:09

Re: Text Kopieren mittels Shift Ende
 
Zitat:

Zitat von bitsetter
Der Cursor befindet sich danach am Ende der zur Hälfte markierten Zeile.

Ja die Hälfte des Textes ist danach blau hinterlegt.

Beim Windows Editor zumindest, könnte man ansonsten noch mit
Delphi-Quellcode:
var
  SelStart, SelEnd : Integer;
begin
  sleep(2000);
  //lesen
  SelStart:= 0;
  SelEnd:= 0;
  SendMessage(WindowFromPoint(mouse.CursorPos), EM_GETSEL, Integer(@SelStart), Integer(@SelEnd));
  caption:= inttostr(SelStart)+' '+  inttostr(SelEnd);

  //selektieren
  SelStart:= 3;//Beispiel
  SelEnd:= 10;
  SendMessage(WindowFromPoint(mouse.CursorPos), EM_SETSEL, SelStart, SelEnd);
die Länge und die Position des selektierten Textes auslesen oder setzen. Eventuell kannst du dich ja damit behelfen, wenn du dazwischen noch VK_END sendest.

EDIT: Also so in etwa:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  SelStart, SelEnd : Integer;
  EdtHandle: HWND;
begin
  sleep(2000);
  EdtHandle:= WindowFromPoint(mouse.CursorPos);
  SelStart:= 0;
  SelEnd:= 0;
  SendMessage(EdtHandle, EM_GETSEL, Integer(@SelStart), 0);
  keybd_event(VK_end,0,0,0);
  keybd_event(vk_end,0, keyeventf_keyup, 0);
  sleep(100);
  SendMessage(EdtHandle, EM_GETSEL, 0, Integer(@SelEnd));
  SendMessage(EdtHandle, EM_SETSEL, SelStart, SelEnd);
end;
Mit dem Sleep() ist es zwar nicht gerade das Wahre, aber zum Testen reicht es erst einmal.

Luckie 24. Jun 2007 21:55

Re: Text Kopieren mittels Shift Ende
 
Man könnte natürlich auch einfach die Nachricht WM_GETTEXT benutzen. :roll:


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