![]() |
Shape auf Paintbox
Ich versuche verzweifelt (im Programm, nicht in der IDE) einige TShape-Elemente auf einer Paintbox als Grafikhotspot zu platzieren.
Leider gelingt dies nicht. Habe den Verdacht, dass die Paintbox die Shapes "überdeckt", habe aber keine Idee wie ich das ändern könnte. Hat jemand hier Shapes auf Paintboxen platziert - und hat es geklappt? |
Re: Shape auf Paintbox
Versuch es mal mit Shape.BringToFront.
|
Re: Shape auf Paintbox
Vielen Dank.
Hat im Einzeltest geklappt. Die Integration ins eigentliche Programm ist aufwändiger und muss noch durchgeführt werden. |
Re: Shape auf Paintbox
Weitere intensive Tests gemacht. Leider mit nicht erwünschten Resultaten.
Für die Paintbox existiert eine Routine für OnRepaint. Was dann passiert ist, dass die Shapes zwar wie gewünscht in den Vordergrund rücken, dann aber trotz Eigenschaft bsClear nicht durchsichtig sind, sondern die Schrift auf dem Canvas überdecken. Mache ich einen grundsätzlichen Überlegungsfehler bzg. Shapes. Sollten Shapes mit bsClear nicht auf jeden Fall durchsichtig sein? Delphi-Version BDS 2006. Bin für jeden Hinweis dankbar. |
Re: Shape auf Paintbox
Hallo,
ich nutz statt einer Paintbox ein TImage und zeichne da auf den Canvas. Da kann ich problemlos TShapes drüber legen, was ich auch mache. Gruß Matthias |
Re: Shape auf Paintbox
Es war doch ein Verständnisfehler.
Wollte dem Shape trotz der Brush-Eigenschaft bsClear eine Farbe geben.
Delphi-Quellcode:
Das klappt als Code, aber die zweite Anweisung macht implizit ein
Shape.Brush.Style := bsClear;
Shape.Brush.Color := clMoneyGreen;
Delphi-Quellcode:
Dieses Verhalten ist im Help nirgens direkt beschrieben, entsprach aber nicht meinen Erwartungen.
Shape.Brush.Style := bsSolid;
Nun da ich's weiss, konnte ich eine andere für mich befriedigende, wenn auch aufwendigere Lösung finden. Danke für die Hilfe |
Re: Shape auf Paintbox
Zitat:
Aber warum aufwendiger ... hätte es dann nicht gereicht einfach nur Shape.Brush.Color := clMoneyGreen; wegzulassen? |
Re: Shape auf Paintbox
Die Idee der ersten Lösung war, in einer Turnier-Tabelle bestimmte Spiele mit Shapes
1.) hervorzuheben (deshalb Brush.Color := clFarbe1 für ein laufendes Spiel, Brush.Color := clFarbe2 für ein beendetes Spiel usw. ) 2.) auf OnMouseEnter / OnMouseLeave / OnMouseDown / OnMouseUp zu reagieren Nun verwende ich die unsichtbaren Shapes "nur" noch, um zu erkennen, ob ich auf einem bestimmten Spiel in der Tabelle bin. Dann setze ich eine Variable mit dem entsprechenden Spiel und mache ein Repaint. Inzwischen hätte ich das ganze auch völlig ohne Shapes lösen können, da mir die Shapes weniger halfen als angenommen. Wenn ich von Beginn weg gewusst hätte, dass transparente Shapes nur ohne Farbe funktionieren, hätte ich alles direkt via Maus-Koordinaten gelöst. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09: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-2025 by Thomas Breitkreuz