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 RichEdit eines anderen Programms kontrollieren (https://www.delphipraxis.net/4465-richedit-eines-anderen-programms-kontrollieren.html)

flow 30. Apr 2003 10:59


RichEdit eines anderen Programms kontrollieren
 
Ich habe ein Programm das soll ein anderes 'bedienen'!

Das zu 'bedienende' Programm hat ein RichEdit und ich habe den Handle davon. Es wurde in Visual Basic geschrieben aber ich habe den Source Code nicht!

Ich will jetzt mit meinem Programm die RichEdit des anderen durchscrollen und in einer bestimmten Zeile stehenbleiben.

Bis jetzt mache ich es so das ich den Handle des anderen Programms nehme und an dieses Programm KeyEvents sende. Immer einen KeyDown damit der Cursor immer eine Zeile weiter runter springt.

Es geht auch irgendwie das ich der RichEdit sage das der Cursor in die Zeile 25 springen soll nur weiß ich nicht ganz wie!

Kann mir bitte jemand helfen!?

FLOW

Luckie 30. Apr 2003 11:09

EM_LINESCROLL. wParam: 0, lParam: Die Anzahl der zu scrollenden Zeilen.

flow 30. Apr 2003 11:17

Könntest du das bitte etwas genauer beschreiben :roll: !?

Das Problem ist ich habe den Class Name und nicht den Handle! Wie kann ich jetzt den Handle aus dem Class Name ermitteln!?

FLOW

Luckie 30. Apr 2003 11:36

Also um 12 Uhr hattest du noch das Handle. :roll: Was hast du damit gemacht?
Delphi-Quellcode:
SendMessage(REHandle, EM_LINESCROLL, 0, 10);
Sollte um 10 Zeilen scrollen.

Oder Moment? Hast du nur das Handle des fensters oder wie?
Delphi-Quellcode:
var
  hWnd, REHandle : cardinal;
begin
  hWnd := FindWindow(nil, 'Fenstertext'); // Handle des Hauptfensters
  REHandle := FindWindowEx(hWnd, 0, 'REClass', nil);
  SendMessage(REHandle, EM_LINESCROLL, 0, 10);

flow 30. Apr 2003 12:01

Ich habe mich verschrieben, tut mir leid!

Ich habe nur den Classname des Fensters und der RichEdit!

Den Handle des Fenster bekomme ich durch
Delphi-Quellcode:
H := findWindow('ThunderRT6FormDC',nil);
jedoch sucht FindWindowEx nach einem ChildWindow und gibt mir 0 zurück!

Funktioniert nicht ganz, gibts sonst noch etwas!?

FLOW

Luckie 30. Apr 2003 12:10

Genau FindWindowEx sucht nach dem Kindfenster, denn das ist ja dein RichEdit. Und wenn du da den richtigen Klassennamen angibst, solltest du auch ein gültiges Handle bekommen.

flow 30. Apr 2003 12:39

Bist du sicher das das geht?

Das Programm hat nämlich keine 'Kinder'. Es ist ein Fenster mit einer RichEdit! Der ClassName ist RichTextWndClass und das der Code:

Delphi-Quellcode:
  H := findWindow('ThunderRT6FormDC',nil);
  H1 := FindWindowEx(H, 0, 'RichTextWndClass', nil);
  SendMessage(H1,EM_LINESCROLL,0,iBKmarks[i]);
FLOW

Luckie 30. Apr 2003 12:56

Zitat:

Zitat von flow
Bist du sicher das das geht?

Ziemlich sicher.
Zitat:

Das Programm hat nämlich keine 'Kinder'. Es ist ein Fenster mit einer RichEdit!
Das RichEdit schwebt also ohne Elternfenster so über den Desktop oder wie? :roll:

Delphi-Quellcode:
  H := findWindow('ThunderRT6FormDC',nil);
  H1 := FindWindowEx(H, 0, 'RichTextWndClass', nil);
  SendMessage(H1,EM_LINESCROLL,0,iBKmarks[i]);
Mit dem Code widersprichst du dir doch selber. Das Elternfenster hat den Klassennamen ThunderRT6FormDC und das Kindfenster (das RichEdit) den Klassennamen RichTextWndClass. Aber liegt das RichEdit eventuell noch auf einem Panel oder so? Dann kommst du mit FindWindowEx nicht so einfach dran.

Ist das Programm nicht mit Delphi programmiert und hat das RichEdit einen eindeutige ID, kannst du an das Handle mit GetDlgItem() rankommen.

FLOW[/quote]

Alexander 30. Apr 2003 14:46

Jedes Element auf so einer Form ist ein Fenster und somit abhängig des Elternfensters. Deswegen sollte es damit funktionieren.
Kuck dir mal Luckies Tutorials an, sind wirklich gut (Lob an dich Luckie ;-))

flow 5. Mai 2003 08:20

Erklär mir das bitte genauer. Es ist schon möglich das die RichEdit noch auf einem Panel liegt, jedoch wurde das Programm in Visual Basic geschrieben.

Wie funktioniert das mit GetDlgItem()?

FLOW

Luckie 8. Mai 2003 04:40

GetDlgItem
Delphi-Quellcode:
hRichEdit := GetDlgItem(hMainWindow, ID_RICHEDIT);
Die ID kannst du mit meinem Tool WindowInfo von meiner Seite bekommen.

flow 8. Mai 2003 12:53

Danke Lukie, werd mich gleich mal darum kömmern!

Dein Tool ist klasse, hab mir auch so etwas in der Art geschrieben, nur zeigt es nicht so viel an.

Allerdings wird bei der RichEdit 0x00000000 angezeigt! Ist das ein gültiger Wert!?

Ach ja, hab mit deinem Tool gerade bemerkt das die RichEdit in einem Panel/Frame liegt das den Classname ThunderRT6Frame und die ID 0x00000004 hat.

Muß ich das vielleicht auch noch einbinden!?

FLOW

flow 8. Mai 2003 14:06

Ich habs schon, klappt sehr gut!

Aber, die Richedit scrollt nur die gewisse Zeilenanzahl nach unten, der Cursor jedoch bleibt in der ersten Zeile stehen!
Wie kann ich das lösen!?

FLOW

flow 12. Mai 2003 07:35

Lukie, bitte gib mir doch noch einen Tipp :roll: !

FLOW

Luckie 12. Mai 2003 07:42

sakura hat gerade irgendwo Code gepostet, wie man den Cursor an die Stelle bekommt.

flow 12. Mai 2003 09:46

OK, kannst mir noch sagen wo!?

FLOW

Luckie 12. Mai 2003 17:23

Finde es auch nicht mehr, sorry.

Christian Seehase 16. Mai 2003 16:51

Moin Flow,

schau Dir mal die Messages EM_SCROLL bzw. EM_SCROLLCARET an.


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