Rechteck in einem Rechteck finden

Hallo ihr Allgemein-Programmierer,

eigentlich gehört mein konkretes Problem ins VBA-Brett, aber da ich einen Algorithmus suche, bin ich hier evtl. besser aufgehoben.
Es geht darum, herauszufinden, wo in einem Rechteck ein kleineres Rechteck liegt. Konkret möchte ich feststellen, wo auf dem Bildschirm die Diagrammfläche eines Excel-Diagramms liegt.
Natürlich könnte ich Pixel für Pixel abscannen und abfragen, ob dieser Pixel zur Diagrammfläche gehört. Das dauert aber relativ lange.
Gibt es irgend einen schnellen Algorithmus für so etwas, z.B. irgendwie spiralförmig von der Mitte nach außen scannen. Ich gehe mal davon aus, dass das Diagramm mit der höchsten Wahrscheinlichkeit in der Mitte des Bildschirms liegt.

Schon mal Danke für eure Ideen.

Gruß, Andreas

Moin, Andreas,

falls es um Dialogfenster geht, sollte es auf die Schnelligkeit nicht so sehr ankommen. Jedes Programm rechnet jedenfalls schneller, als mensch gucken kann :smile:

Andernfalls könnte die stetige Halbierung des Intervalls zum Ziel führen:

Bildschirm halbieren,
linke Hälfte betrachten,
Intervall halbieren oder zur rechten Hälfte wechseln,
linke Hälfte betrachten,
Intervall halbieren oder zur rechten Hälfte wechseln,

Den gleichen Zickzack für die Vertikale und gut iss.

Gruß Ralf

Hi Ralf,

danke für den Tipp mit der Intervallhalbierung. Das werde ich mal versuchen.
Nein, es geht nicht um eine Userform. Ich möchte feststellen, auf welche Koordinaten eines X-Y-Diagramms geklickt wird. Dazu brauche ich die Position des Klicks und Position und Größe des Diagramms.
Die Klickposition bekomme ich mit dem MouseDown-Ereignis in Bildchirmkoordinaten (Pixeln). Für Größe und Position des Diagramms kann ich aber nicht Left, Width, Top und Height benutzen. Da kriege ich die Werte in Points und das auch noch relativ zum „Container“, also zum Excel-Fenster. Alle meine Versuche, das in Pixel umzurechnen, sind bisher gescheitert. Bei einer entsprechenden Anfrage im VBA-Brett vor längerer Zeit kam nix gescheites raus.
Ich kann aber mit GetChartElement die Art des Objektes an einer bestimmten Position in Pixeln ermitteln. Ich möchte also mit möglichst wenigen GetChartElement Aufrufen das Diagramm auf dem Bildschirm finden und dann Position und Größe bestimmen.

Gruß, Andreas

Hallo Andreas,

Nein, es geht nicht um eine Userform. Ich möchte feststellen,
auf welche Koordinaten eines X-Y-Diagramms geklickt wird. Dazu
brauche ich die Position des Klicks und Position und Größe des
Diagramms.

hilft dir dieses weiter?

http://www.herber.de/bbs/user/29716.xls
ist von K.Rola, eine Xl-Größe.

Wenn nicht, kram ich nochmal. Dein Problem ist ja nicht neu aber nicht einfach.
Win/Vb hat es uns da nicht einfach gemacht.
Gibt zwar irgendwas mit PixelToPoints oder so, oft ist das aber nur die halbe Miete. Zu dem Thema sah ich schon Proficode die dann irgendwann einfach einen Faktor einbauen mußten wie
F=0.93562738456
Liegt irgendwie an dem, was ist ein Bildpunkt, Pixel, Point oder ich glaub da gibts noch was?. Wie rechnet man die um? Dazu noch Laptop oder Großbildschirm, welche Auflösung,…, ein weites Feld.

Gruß
Reinhard

Hallo Reinhard,

du sagst es. Genau an diesen Rumrechnereien bin ich bisher auch gescheitert. Kommt noch hinzu, dass sich die Breite eines Plotbereichs ändert, abhängig davon, ob die Achse sichtbar ist oder nicht, bzw. wie dick die Achse dargestellt ist.
Den Link schau ich mir heute Abend an. Ich sitz hier gerade an einem Rechner ohne Excel.

Danke erst mal und Gruß,
Andreas

Klick in Diagramm auswerten

du sagst es. Genau an diesen Rumrechnereien bin ich bisher
auch gescheitert. Kommt noch hinzu, dass sich die Breite eines
Plotbereichs ändert, abhängig davon, ob die Achse sichtbar ist
oder nicht, bzw. wie dick die Achse dargestellt ist.

Hallo Andreas,

genau an diesem Problem bin ich auch mal gescheitert, nach stundenlnagen tagelangen Recherchen und austesten.

Es kommen ja im Excelbrett öfters mal Anfragen zu Diagrammen, wie kann ich ein dritte y-Achse zeichnen lassen oder dies das.

Da habe ich mir gedacht, da nehme ich doch ein Standarddiagramm, die Extras zeichne ich einfach rein mittels Vba.
Pustekuchen. Ich weiß es nicht mehr genau wie es war, irgendwie so, die Position des Diagrammes konnte ich glaub genau ermitteln.
Nun ist das das Diagramm, die eigentliche Diagrammfläche, von mir aus der Plotbereich, hat andere Koordinaten.

So einigermaßen mit Tricks gelang mir das Zeichnen, ABER, wenn man die legende aus- oder einblendete, oder sonstwas macht, passte wieder alles nicht.

Einfach weil ich die eigentliche Diagrammfläche nicht lokalisieren konnte :frowning:

Gruß
Reinhard

Hallo Reinhard,

ich habe mir eben den Link mal angeschaut. Bringt aber leider nichts: Da wird nur der Klick auf einen Datenpunkt ausgewertet. Mit Koordinaten passiert da garnichts.

Zu meinen/deinem Problem mit den Koordinaten hab ich noch mal ein bisschen gespielt: Wenn man den LineStyle der Achsen per VBA auf XlNone setzt, verschiebt sich die PlotArea nicht. Wenn die Achsen ausgeblendet sind, liegt GetChartElement immer genau 2 Pixel daneben, d.h. die PlotArea wird an jedem Rand um 2 Pixel zu klein angegeben. Ich habe es mit mehreren Diagrammgrößen und 2 Bildschirmauflösungen getestet. Das kann man also rausrechnen. Dann sollte man die Plotarea pixelgenau haben.

Gruß, Andreas

OT: Rechteck in einem Rechteck finden
Hi.

Hab mal mitgelesen, bei dem excel-Problem kann ich dir leider nicht helfen, aber nur so eine Idee: muss es Excel sein? Tut’s vielleicht auch ein Graphen-Tool wie „ZedGraph“?
Wenn es nur um Diagramme-Zeichnen geht, lässt sich das Tool sicherlich einfacher zu Kunststücken überreden.

Wenn du allerdings auf Excel angewiesen bist, dann betrachte diesen Post als gegenstandslos.

Gruß,
Andreas

Off-Topic
Solche Probleme gäbe es in einer anständigen Programmiersprache sicher nicht.
Gibt es in VBA keine Möglichkeit über alle Diagramme des aktuellen Sheets zu iterieren und deren Position und Größe auszulesen?
Falls nein, ist VBA wirklich ne besch*eidene* Sprache! :smiley: