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 Hintergrund transparent (https://www.delphipraxis.net/86794-shape-hintergrund-transparent.html)

owolicious 19. Feb 2007 20:44


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 ;)

owolicious 21. Feb 2007 15:32

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:

EDatabaseError 21. Feb 2007 15:34

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

owolicious 21. Feb 2007 15:43

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...

b1zZ 21. Feb 2007 15:55

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.

owolicious 21. Feb 2007 15:59

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...

Namenloser 21. Feb 2007 16:42

Re: Shape Hintergrund transparent
 
Was genau ist das für ein Shape? (Meins kann keine Pfeile)

owolicious 21. Feb 2007 19:50

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.

Namenloser 21. Feb 2007 20:02

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.

owolicious 21. Feb 2007 20:09

Re: Shape Hintergrund transparent
 
hmm dann funktioniert das doublebuffered aber nicht mehr... ?!?

LizardKaiser 21. Feb 2007 21:13

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

owolicious 21. Feb 2007 21:25

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...

Namenloser 21. Feb 2007 21:28

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:
procedure TMyPfeil.SetSelection(Value : Boolean);
begin
  FSelected := Value;
  doublebuffered := value;
  Invalidate;
end;
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)

owolicious 21. Feb 2007 21:42

Re: Shape Hintergrund transparent
 
und wie trickst man?!? :)

owolicious 21. Feb 2007 21:45

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?!?

Kill0r 21. Feb 2007 22:47

Re: Shape Hintergrund transparent
 
Ändere mal den den BrushStyle auf bsClear :wink:

Das geht so:
Delphi-Quellcode:
Canvas.Brush.Style := bsClear;
Setz diese Zeile bevor du den Pfeil zeichnest.
Dann sollte es gehen :)

Hoffe geholfen zu haben :coder:

Gruss
Kill0r

owolicious 21. Feb 2007 23:22

Re: Shape Hintergrund transparent
 
nope funktioniert nicht :P

owolicious 23. Feb 2007 18:56

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