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 Wie arbeiten die Regionen unter Windows? (https://www.delphipraxis.net/12218-wie-arbeiten-die-regionen-unter-windows.html)

cYaONE 23. Nov 2003 12:52


Wie arbeiten die Regionen unter Windows?
 
Servus,

ich möchte gerne wissen, wie die Regionen unter Windows arbeiten, d.h.:

- Wie ist der Typ HRGN aufgebaut?
- Wie wird überprüft, ob eine bestimmte Region angeklickt wurde? (z.B. bei ganz komplexen Festern, wie z.B. mit mehreren Kreisen, wie es sie bei diversen MP3 Playern gibt)

Ich möchte nicht wissen, wie man so ein Fenster erstellt, sondern wie das mit den Regionen funktioniert!

Vielen Dank schonmal!

cYa

jbg 23. Nov 2003 12:57

Re: Wie arbeiten die Regionen unter Windows?
 
HRGN ist ein Handle. Was genau (Struktur) dahinter steckt verrät Microsoft nicht. Aber wie die Regions funktionieren ist nicht besonders schwer zu erklären. Eine Region besteht aus einem, sagen wir mal Array of TRect. Erzeugst du eine Ellipse als Region, so wird diese in viele Rechtecke zerlegt. Somit ist es ein leichtes zu überprüfen, ob ein Punkt in einer Region liegt. Man muss nur das Array durchlaufen und PtInRect für jedes Rechteck aufrufen.

himitsu 23. Nov 2003 13:05

Re: Wie arbeiten die Regionen unter Windows?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ein Hallöle von http://www.FrankNStein.de/Smiley-Wolke.gif,

Wie diese Clippingbereiche (HRgn) erstellet werden kannst du die in meinem Beispielprojekt ansehen, da ist nahezu alles drin.

Zur abfrage was angeklickt wurde, schau mal in diesen Beitrag (ImageButton.exe). Da wird Abgefragt, welcher Button gedrückt wurde. (4 virtuelle Buttons auf einem Image).
Zusammen gefasst kann man sagen, du fragts ab wo hingeklickt wurde und vergleichst das mit deinen dargestellten Objekten.

http://www.delphipraxis.net/images/common/divider.jpg
http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif

Assarbad 14. Feb 2004 20:48

Re: Wie arbeiten die Regionen unter Windows?
 
Warum ist die Frage noch als Offen markiert?

Robert Marquardt 15. Feb 2004 06:51

Re: Wie arbeiten die Regionen unter Windows?
 
Regions funktionieren schlecht.
Da gab es mal einen Artikel drueber aber das ist schon SEHR lange her. Kann sogar in der "Byte" gewesen sein.
Meine eigenen Erfahrungen sagen das die Performance abhaengig von der Groesse der Regions ist.

GuenterS 30. Jan 2006 22:34

Re: Wie arbeiten die Regionen unter Windows?
 
Zitat:

Zitat von Robert Marquardt
Regions funktionieren schlecht.
Da gab es mal einen Artikel drueber aber das ist schon SEHR lange her. Kann sogar in der "Byte" gewesen sein.
Meine eigenen Erfahrungen sagen das die Performance abhaengig von der Groesse der Regions ist.

Was würdest Du dann anstelle von Regions nehmen? Die Zeichenfunktionen von Delphi, ala Rectangle, LineTo, etc?

thomasw 30. Jan 2006 22:45

Re: Wie arbeiten die Regionen unter Windows?
 
Ein HRGN ist einfach ein Handle auf ein Regionsobjekt. Die Raw-Daten einer Region kann man mit der Funktion GetRegionData erhalten, und sind nichts anderes als eine RGNDATA struktur mit einem array von RECTs. Regionen sind intern einfach eine Liste von Rechtecken, die von oben nach unten und links nach rechts sortiert sind. Dabei ist zu beachten, dass sie in "Zeilen" aufgebaut sind, d.h. man hat kein grosses Rechteck, das ueber z.b. zwei Zeilen geht. Diese werden dann in zwei Rechtecke aufgeteilt um die Algorithmen zu vereinfachen. Der Performanceverlust dadurch duerfte nur bei komplexeren Zeichenoperationen bemerksam sein.

Falls ich noch Informationen liefern sollen, wie Regionen bei Zeichenoperationen und Fenstern verwendet werden, kann ich dazu genuegend Informationen liefern.

GuenterS 30. Jan 2006 22:52

Re: Wie arbeiten die Regionen unter Windows?
 
Danke für diese Informationen erstmal.

Ich arbeite bzw. bin daran eine Software zu erweitern, welche hauptsächlich mit Regions arbeitet und diese sehr viel verwendet.

Leider ist der ursprüngliche author der Software nicht mehr in dieser Firma beschäftigt und so hilft nur Code anschauen und versuchen zu verstehen, warum und weswegen er das so und nicht anderes programmiert hat.

Wie ich es im moment sehe, wird der ganze Clientbereich als Region genommen und mit anderen Combiniert, bzw. gewisse Rechtecke werden rausgeschnitten. Ist allerdings auch nicht wirklich leicht, das hier zu beschreiben, ohne zu viel Firmengeheimnisse preiszugeben. Deswegen halte ich mich da eher ein wenig knapp.

Woher hast Du Dein Wissen über Regions? Gibt es da vielleicht was gutes zum Lesen drüber, abgesehen der zeitweise recht kurzen Hilfe in Delphi?

Wenn Du da ein gutes und Umfangreiches Tutorial kennst ... würd wahrscheinlich hier im Forum nicht nur mich intressieren.

thomasw 30. Jan 2006 22:54

Re: Wie arbeiten die Regionen unter Windows?
 
Zitat:

Zitat von Robert Marquardt
Regions funktionieren schlecht.
Da gab es mal einen Artikel drueber aber das ist schon SEHR lange her. Kann sogar in der "Byte" gewesen sein.
Meine eigenen Erfahrungen sagen das die Performance abhaengig von der Groesse der Regions ist.

mit der "Groesse" ist die Komplexitaet der Region gemeint. Je komplexer, desto mehr Rechtecke hat die Region. Die Anzahl der Rechtecke ist dafuer verantwortlich, wie schnell bzw. langsam die Zeichenoperation ist, da intern der Grafiktreiber jedes einzelne Rechteck manuell fuellen muss und je nach komplexitaet der Zeichenoperation dadurch viel extra-Aufwand entsteht

thomasw 30. Jan 2006 22:57

Re: Wie arbeiten die Regionen unter Windows?
 
Zitat:

Zitat von GuenterS
Woher hast Du Dein Wissen über Regions? Gibt es da vielleicht was gutes zum Lesen drüber, abgesehen der zeitweise recht kurzen Hilfe in Delphi?

Die Informationen hab ich, weil ich daran programmiert habe (nicht in Windows) und unter anderem einige Routinen in Grafiktreibern programmiert habe.

Zitat:

Zitat von GuenterS
Wenn Du da ein gutes und Umfangreiches Tutorial kennst ... würd wahrscheinlich hier im Forum nicht nur mich intressieren.

Kenn ich leider nicht, das einzige was mir bekannt ist, ist die Dokumentation im PSDK und DDK.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:32 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 by Thomas Breitkreuz