![]() |
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 |
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.
|
Re: Wie arbeiten die Regionen unter Windows?
Liste der Anhänge anzeigen (Anzahl: 1)
Ein Hallöle von
![]() 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 ![]() ![]() ![]() |
Re: Wie arbeiten die Regionen unter Windows?
Warum ist die Frage noch als Offen markiert?
|
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. |
Re: Wie arbeiten die Regionen unter Windows?
Zitat:
|
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. |
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. |
Re: Wie arbeiten die Regionen unter Windows?
Zitat:
|
Re: Wie arbeiten die Regionen unter Windows?
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:53 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