Delphi-PRAXiS
Seite 1 von 2  1 2      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:27 Uhr.
Seite 1 von 2  1 2      

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