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 Anwendung von PtInRegion() (https://www.delphipraxis.net/90420-anwendung-von-ptinregion.html)

luckystar85 17. Apr 2007 10:35


Anwendung von PtInRegion()
 
Hey,

ich habe ein Problem bei der Anwendung von PtInRegion. Mein Programm besteht aus einer MainForm, auf dieser MainForm sind dann verschiedene Forms drauf und ausgerichtet (Menü, Buttonbar, Arbeitsfläche). Die Arbeitsfläche macht etwa 2/3 der gesamten MainForm aus. Auf dieser Arbeitsfläche kann nun auch eine zusätzliche Form eingeblendet werden, die detailierte Informationen ausgibt. Diese Form ist Enabled := False und wird nur unter bestimmten Bedingungen aktiviert. Das besondere an dieser Form ist, dass sie nicht rechteckig ist, sondern ein Polygon. Wenn ich mit dem Cursor über den Arbeitsbereich gehe dann bekommt diese eine bestimmte Form. Da die meine Polygon-Form nun nicht Enabled ist, wird wenn ich mit der Maus darüber gehe auf der Form kein MouseMove-Event ausgelöst sondern von der Form darunter. Aber ich bin ja mit dem Cursor auf der Polygon-Form. Durch das Auslösen des MouseMove-Event wird nun der Cursor auch auf meiner Polygon-Form gesetzt. Das ist aber nicht richtig so, denn die soll den normalen Cursor haben.
Ich dachte mir dazu, dass ich nun einfach im MouseMove des Arbeitsbereiches ein
Delphi-Quellcode:
If ( PtInRegion(fForm.Handle, X, Y) Then
stelle und dann den Cursor setze. Aber die Abfrage ergibt immer False. Ich habe auch schon die Koordinaten vorher mit fForm.ScreenToSclient auf die Koordinaten der Form konvertiert. Dies bringt aber auch keinen Erfolg. Habt ihr Erfahrungen mit PtInRegion über mehrere Forms hinweg?

P.S. Das, dass Konzept mit den mehreren Forms nicht gerade das beste ist weiß ich. Frames wären dort wahrscheinlich besser.

Hawkeye219 17. Apr 2007 12:02

Re: Anwendung von PtInRegion()
 
Hallo Michael,

die Windows-Funktion PtInRegion() erwartet ein Handle einer Region, du übergibst ihr aber das Fenster-Handle des Formulars. Ich vermute, daß dies der Grund für den unerwarteten Rückgabewert ist. Erzeuge dir aus den Polygondaten deiner Form mit MSDN-Library durchsuchenCreatePolygonRgn eine gültige Region und versuche es damit.

Gruß Hawkeye

luckystar85 17. Apr 2007 12:51

Re: Anwendung von PtInRegion()
 
Vielen Dank für den Hinweis. Meine Form besteht ja aus der Region. Ich erzeuge meine Region mit
Delphi-Quellcode:
Region1 := CreateRectRGN(0, 0, Bmp.Width, Bmp.Height);
. Anschließend entferne ich einige Pixel aus der Region mit
Delphi-Quellcode:
CombineRGN(Region1, Region1, Excl, RGN_DIFF);
damit sie gewünschte Form bekommt. Nun weiße ich die Region meiner Form zu mit
Delphi-Quellcode:
SetWindowRGN(Handle, Region1, True);
. Ich habe jetzt als Parameter für meine PtInRegion-Abfrage Region1 verwendet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz