Polygon (Speed)button

qkxo

Grünschnabel
Hi Leutz!

Ich will eine Landkarte von Rheinland-Pfalz mit allen Kreisen
und kreisfreien Städtenzeichnen und diese (die Kreise) in
verschiedenen Farbabstufungen einfärben.

Bisher habe ich eine Komponente (rngImage) verwendet, will jetzt aber
was anderes versuchen, deshalb jetzt meine Frage:

Gibt es eine (Speed)Button-Komponente, die nich nur das übliche
Rechteckaussehen hat, sondern der man die Form eines Polygons
oder array of tpoints geben kann?
Und sie muss mit Canvas.FloodFill zu färben sein...

Danke schonmal im Voraus
QKXO
 
Es gibt eine TShape - Komponente.
Soweit ich weiß kann man der einen OnClick-Event-Handler zuordnen. Damit kannst Du dann auch einen Schalter definieren.
Inwieweit du allerdings beliebige Polygone verwenden kannst, weiß ich nicht.

vop
 
Ich hab das TShape mal ausprobiert,
aber es können keine Polygone verwendet werden...

Trotzdem danke
 
Und wenn Du ein TImage verwendest und dort im Canvas selbst Linien ziehst?
Auch für TImage gibt es ein OnClick.

vop
 
Das TImage selbst ist ja ein Rechteck.
Wenn ich also für jede Region ein TImage verwende,
würde es Probleme bei den Bereichen geben, die sich überlappen.
 
Vor langer Zeit habe ich mal einen Artikel über Clipping/Region gelesen. Soweit ich mich erinnern kann, kommt das deinem Problem nahe.
Versuch doch mal dazu was zu finden.

Zumindest für Forms habe ich schon solche Ansätze gesehen.

Sorry, dass ich Dir nicht weiter helfen kann.

vop
 
Danke trotzdem...

Ich habe mich entschieden, die Komponente weiterhin zu verwenden.
Ich muss dann zwar ein bisschen basteln, aber egal.

Also, bis zum nächsten Thema... *gg*
 
Auch wenn dus jez anders machen willst :D

Du machst einfach ein Image für die gesamte Karte und stellst die einzelnen Kreise mit Image.Polygon dar. Dazu musst du ein Array mit TPoint-Records übergeben. Die Polygons kannst du dann auch gleich füllen.
Image.Brush.Style:=bsSolid;
Image.Brush.Color:=$FF0000;
was du willst.

Ansonsten guckst du in die WindowsAPI-Hilfe und schaust dir das Clippingzeugs an. Ist auch ganz gut zu verstehen, aber das oben wäre einfacher zu machen.
(edit)
Hab mal die Funktionen rausgesucht
CreatePolygonRgn()
erzeugt eine polygonale Region und gibt eine Zugriffsnummer darauf zurück (INteger)
SelectObject()
der übergibst du, zusammen mit der HDC von dem Button oder was de polygonal machen willst(fenster gehen auch ;)) , die Zugriffsnummer und fertig.

Zum Schluss sollte man die Region noch mit DeleteObject() freigeben. Wenn du aber richtig Microsoft-Like programmieren willst, lässte das sein und argumentierst so, dass es dann schneller geht :D rofl


So simpel geht das....
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück