AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Wie arbeiten die Regionen unter Windows?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie arbeiten die Regionen unter Windows?

Ein Thema von cYaONE · begonnen am 23. Nov 2003 · letzter Beitrag vom 30. Jan 2006
Antwort Antwort
cYaONE

Registriert seit: 18. Mai 2003
Ort: Sand am Main
192 Beiträge
 
Delphi 7 Personal
 
#1

Wie arbeiten die Regionen unter Windows?

  Alt 23. Nov 2003, 11:52
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
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Wie arbeiten die Regionen unter Windows?

  Alt 23. Nov 2003, 11:57
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#3

Re: Wie arbeiten die Regionen unter Windows?

  Alt 23. Nov 2003, 12:05
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.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif
Angehängte Dateien
Dateityp: exe zeichnen_bitmapundclipping.exe (66,5 KB, 35x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#4

Re: Wie arbeiten die Regionen unter Windows?

  Alt 14. Feb 2004, 19:48
Warum ist die Frage noch als Offen markiert?
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#5

Re: Wie arbeiten die Regionen unter Windows?

  Alt 15. Feb 2004, 05:51
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 Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Wie arbeiten die Regionen unter Windows?

  Alt 30. Jan 2006, 21:34
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?
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
thomasw

Registriert seit: 3. Dez 2005
36 Beiträge
 
#7

Re: Wie arbeiten die Regionen unter Windows?

  Alt 30. Jan 2006, 21:45
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.
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Wie arbeiten die Regionen unter Windows?

  Alt 30. Jan 2006, 21:52
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.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
thomasw

Registriert seit: 3. Dez 2005
36 Beiträge
 
#9

Re: Wie arbeiten die Regionen unter Windows?

  Alt 30. Jan 2006, 21:54
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
  Mit Zitat antworten Zitat
thomasw

Registriert seit: 3. Dez 2005
36 Beiträge
 
#10

Re: Wie arbeiten die Regionen unter Windows?

  Alt 30. Jan 2006, 21:57
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 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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 Uhr.
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