Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Shape auf Paintbox (https://www.delphipraxis.net/125938-shape-auf-paintbox.html)

beat2006 15. Dez 2008 09:46


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?

DeddyH 15. Dez 2008 09:51

Re: Shape auf Paintbox
 
Versuch es mal mit Shape.BringToFront.

beat2006 15. Dez 2008 10:10

Re: Shape auf Paintbox
 
Vielen Dank.
Hat im Einzeltest geklappt.
Die Integration ins eigentliche Programm ist aufwändiger und muss noch durchgeführt werden.

beat2006 30. Jan 2009 09:21

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.

matashen 30. Jan 2009 10:13

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

beat2006 31. Jan 2009 23:43

Re: Shape auf Paintbox
 
Es war doch ein Verständnisfehler.
Wollte dem Shape trotz der Brush-Eigenschaft bsClear eine Farbe geben.

Delphi-Quellcode:
Shape.Brush.Style := bsClear;
Shape.Brush.Color := clMoneyGreen;
Das klappt als Code, aber die zweite Anweisung macht implizit ein
Delphi-Quellcode:
Shape.Brush.Style := bsSolid;
Dieses Verhalten ist im Help nirgens direkt beschrieben, entsprach aber nicht meinen Erwartungen.
Nun da ich's weiss, konnte ich eine andere für mich befriedigende, wenn auch aufwendigere Lösung finden.

Danke für die Hilfe

himitsu 1. Feb 2009 00:07

Re: Shape auf Paintbox
 
Zitat:

Zitat von beat2006
Nun da ich's weiss, konnte ich eine andere für mich befriedigende, wenn auch aufwendigere Lösung finden.

Welche Lösung wurde es denn? (vielleicht hat ja nochmal einer soein Problem :zwinker: )

Aber warum aufwendiger ... hätte es dann nicht gereicht einfach nur Shape.Brush.Color := clMoneyGreen; wegzulassen?

beat2006 1. Feb 2009 02:25

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:33 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