Autor Beitrag
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mo 20.01.03 15:00 
WindowFromPoint liefert das Handle eines Fensters das unter dem Point liegt. Die Werte des Points sind dabei relativ zu der oberen linken Ecke des Bildschirms.

ChildWindowFromPoint liefert das Handle des Childfensters das unter dem Point liegt. Leider konnte ich noch nicht 100% rausfinden auf welchen Punkt sich hier der Point bezieht. Es ist auf jeden Fall die obere linke Ecke des Hauptfesters, aber welche? Es gibt drei davon. Die außerste Ecke des Fensters, außerste Ecke des Fensters minus Fensterrahmen und die außerste Ecke des Fensters minus Rahmen und Fenstertitel (also Clientbereich). In der Hilfe steht nichts und Versuche haben nichts gebracht. Es scheint keine von denen zu sein, zumindest nicht 100%. Ich muß auf jeden Fall paar Pixel in das Childfenster klicken damit ich ein Ergebnis erhalte. Es scheint so, als ob ich immer zwei bis drei Pixel ungenau bin.

Wer weiß also auf welche Ecke sich die Funktion bezieht?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 20.01.03 15:58 
Ich vermute mal, da ein ChildWindow sich nur im Client-Bereich des Parents befinden kann, könnte ich mir vorstellen, das der Urspung die obere linke Ecke des Clientbereiches des Parent-Fensters ist. Also ohne Titelleiste und ohne Rahmen.
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Do 23.01.03 01:17 
So, ich hab das Problem gelöst. Ein wenig Information:

Der Punkt 0/0 ist immer der Clientbereich des Parent-Fensters. Ist es ein Panel, dann gibt es keine Probleme. Man kann das Handle des Parentfensters auslesen und das Childfenster-Handle relativ zu dem Nullpunkt auslesen. Wenn es das Hauptfenster ist, dann bezieht sich auch hier der Nullpunkt auf den Clientbereich. Allerdings ist somit das auslesen des Childfenster-Handles ein wenig problematischer. Hier muß man zuerst prüfen ob es sich um ein Hauptfenster handelt. Wenn ja, dann muß man die Titelzeile und den Bildschirmrand vorher abziehen (ev. auch das Menü). Wenn man das nicht macht, dann prüft ChildWindowFromPoint einfach zu hoch nach einem Child-Window und findet es nicht.

Ist alles ein wenig kompliziert, aber logisch. Wenn man also das Handle eines Childfensters über ChildWindowFromPoint auslesen will, dann muß man viele Ausnahmen beachten.

Ich hab es bis jetzt von "hand" gemacht, d.h. die Höhe der Titelzeile und des Randes vorher ermittelt. Dann hab ich auch von hand ermittelt ob es das Hauptfenster ist (ein Hauptfenster hat kein Parentfenster). So hab ich den Clientbereich des Hauptfensters ermittelt. Allerdings gilt das nicht für Dialogfenster. Bei denen ist der der Nullpunkt anscheinend der Nullpunkt des Dialogfensters und nicht des Clients. Wieder eine Ausnahme?

Kennst du eine Funktion die den Clientbereich des Hauptfensters anhand des Fensterhandles liefert? Sollte etwas in der Art von ClientRect von dem TControl sein, allerdings für API.

Kennst du auch eine Funktion mit der man einfach durch zuweisen des Handles rausfinden kann ob es das Hauptfenster ist? Ich habst über Parent-Fenster rausgefunden. Allerdings gefällt mit das nicht.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 23.01.03 02:28 
Es gibt noch ChildWindowFromPointEx und RealChildWindowFromPoint. Kuck dir die mal an, eventuell hilft dir ja das weiter.
Ist die Frage beantwortet? Das Problem gelöst?

Dann klicke hier, um das Thema entsprechend zu markieren!