![]() |
Shape Hintergrund transparent
Hi,
folgendes: Wie kann ich den Hintergrund von einem Shape transparent machen, wenn ich das Shape immer wieder zeichnen muss? Fettes Merci ;) |
Re: Shape Hintergrund transparent
Liste der Anhänge anzeigen (Anzahl: 1)
hat niemand ne ahnung?
vllt kann man es ja auch anders machen aber ich weiss nicht wie und hab auch keine idee :) hier nochmal das problem: |
Re: Shape Hintergrund transparent
Hmm...du setzt die Transparentcolor des Forms auf bspw: clFuchsia und den Hintergrund deines Shapes auch auf clFuchsia. dann sollte er transparent sein.
Tobi |
Re: Shape Hintergrund transparent
hmm ne funktioniert leider nicht :(
kann ich nicht in der ursprungs datei von shape schauen? weil mit den normalen shapes geht es ja nur mit meinen definierten formen nicht... |
Re: Shape Hintergrund transparent
Ich weiss zwar nicht ob es dir hilft, aber im Prinzip kannst du das selbe ja auch mit einem Image lösen.
|
Re: Shape Hintergrund transparent
hmm ich glaube das ein image mehr resourcen frisst und da ich wahrscheinlich später mehr als 100 objekte habe werde ich mit diesen resourcen äußerst sparsam umgehen müssen...
|
Re: Shape Hintergrund transparent
Was genau ist das für ein Shape? (Meins kann keine Pfeile)
|
Re: Shape Hintergrund transparent
ist eine abgeleitete komponente von tcustomcontrol in der die paint funktion einfach überschrieben bzw erweitert wurde... hab einfach auf das canvas einen pfeil gemalt...
Delphi-Quellcode:
unit Pfeil;
interface uses SysUtils, Classes, Controls, Windows, Graphics; type TMyPfeil = class(TCustomControl) private { Private declarations } FSelected : Boolean; procedure SetSelection(Value : Boolean); protected { Protected declarations } protected procedure Paint();override; public { Public declarations } published { Published declarations } property Selected: Boolean read FSelected write SetSelection; end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TMyPfeil]); end; procedure TMyPfeil.SetSelection(Value : Boolean); begin FSelected := Value; if Value = True then Self.DoubleBuffered := true else Self.DoubleBuffered := False; Invalidate; end; procedure TMyPfeil.Paint; begin inherited; // Canvas.Brush.Color := $00654987; // Canvas.Fillrect(Rect(0,0,self.Width, self.Height)); Canvas.Brush.Color := $00000000; Canvas.Polygon([ Point(self.Width-18,3), Point(self.Width - 10, Trunc(self.Height / 2)), Point(self.Width-18,self.Height-4) ]); Canvas.Pen.Color := $00000000; Canvas.MoveTo(8, Trunc(self.Height /2)); Canvas.LineTo(self.Width - 4, Trunc(self.Height / 2)); if self.Selected = True then begin Canvas.Pen.Color := $00000000; Canvas.Brush.Color := $00FFFFFF; Canvas.Rectangle(0, Trunc(self.Height /2)-4, 8, Trunc(self.Height /2)+4); Canvas.Rectangle(self.Width - 8, Trunc(self.Height /2)-4, self.Width, Trunc(self.Height /2)+4); end; end; end. |
Re: Shape Hintergrund transparent
Also bei einem CustomControl könnts schwierig werden. Ich würde die Komponente von TGraphicControl ableiten, dann müsste es gehen.
|
Re: Shape Hintergrund transparent
hmm dann funktioniert das doublebuffered aber nicht mehr... ?!?
|
Re: Shape Hintergrund transparent
Guten Abend :)
Ohne Gewähr: Wenn dein TForm doch schon double-gebuffered ist, sollte sich das auf dein TGraphicControl auswirken. Grüße, Lk |
Re: Shape Hintergrund transparent
stimmt wahrscheinlich aber wenn ich mehrere objekte habe sind alle doublegebuffered und das wird dann wieder zuviel ressourcen fressen denke ich... ich verstehe davon aber ehrlich gesagt auch nicht so viel...
|
Re: Shape Hintergrund transparent
übrigens fällt mir gerade auf, dass das schwachsinn ist:
Delphi-Quellcode:
procedure TMyPfeil.SetSelection(Value : Boolean);
begin FSelected := Value; if Value = True then //Ist ohnehin gefährlich, denn das Prüfen auf True kann Probleme mit sich bringen. "if value then" wäre korrekt. Self.DoubleBuffered := true else Self.DoubleBuffered := False; Invalidate; end; Sinnvoller wäre:
Delphi-Quellcode:
zum thema doublebuffered: das kannst du ja selber machen, indem du zuerst auf ein bitmap zeichnest und dann auf canvas. (Wobei mir gerade einfällt, dass man dann mit dem transparenten hintergrund ein bisschen tricksen muss)
procedure TMyPfeil.SetSelection(Value : Boolean);
begin FSelected := Value; doublebuffered := value; Invalidate; end; |
Re: Shape Hintergrund transparent
und wie trickst man?!? :)
|
Re: Shape Hintergrund transparent
frage, keine ahnung ob das was bringt oder geht: kann man nicht einfach in der shape unit von borland nachschauen wie die das gemacht haben?!?
|
Re: Shape Hintergrund transparent
Ändere mal den den BrushStyle auf bsClear :wink:
Das geht so:
Delphi-Quellcode:
Setz diese Zeile bevor du den Pfeil zeichnest.
Canvas.Brush.Style := bsClear;
Dann sollte es gehen :) Hoffe geholfen zu haben :coder: Gruss Kill0r |
Re: Shape Hintergrund transparent
nope funktioniert nicht :P
|
Re: Shape Hintergrund transparent
niemand mehr eine idee?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 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