Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi GDI+ Graduelles Rechteck (transparent) (https://www.delphipraxis.net/173022-gdi-graduelles-rechteck-transparent.html)

Dunkelbunt27 3. Feb 2013 09:26

GDI+ Graduelles Rechteck (transparent)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Delphi-PRAXIS,

ich möchte mit Hilfe von GDI+ ein Rechteck erzeugen, das einen Farbverlauf von
Grau (oben) zu weiß (Mitte) zu Grau (unten) beeinhaltet.
Das Rechteck soll außerdem semitransparen sein, also müsste Alpha = 80% mit berücksichtigt werden.

Das Grundprinzip habe ich so aus der Demo, ist aber ziemlich daneben...
Delphi-Quellcode:
 
var  Graphics: IGPGraphics;
[...]

  Graphics := TGPGraphics.Create(Form1.Canvas.Handle);
  {Farben} //Die Farben passen nicht, war nur zum testen
   Farbe1.Initialize(255, 120, 248, 253);
   Farbe2.Initialize(255, 200, 216, 250);

  {Zeichnen}
  Brush := TGPLinearGradientBrush.Create(
    TGPPoint.Create(0, 10), TGPPoint.Create(200, 10),
    Farbe1,
    Farbe2);
  Pen := TGPPen.Create(Brush);

  Waagen.FillRectangle(Brush, 0, 155, 500, 30);
Kennt sich damit jemand aus?
Soll am Ende wie im Anhang aussehen.

Bummi 3. Feb 2013 10:32

AW: GDI+ Graduelles Rechteck (transparent)
 
IMHO nahe genug daran um es nach Deinen Wünschen anzupassen.

Delphi-Quellcode:
procedure TForm1.FormPaint(Sender: TObject);
const
  RelativeIntensities: array [0 .. 2] of Single = (0.0, 0.9, 0.0);
  RelativePositions: array [0 .. 2] of Single = (0.0, 0.6, 1.0);
var
  Graphics: IGPGraphics;
  Blend: IGPBlend;
  Brush: IGPLinearGradientBrush;
  F1, F2: TGPColor;
  y1, y2: Integer;
begin
  y1 := 0;
  y2 := 30;
  { "normle" Ellpise für Transparenztest
    canvas.Brush.Color := clBlue;
    Canvas.Ellipse(0,0,500,500);
    }
  Graphics := TGPGraphics.create(Canvas.Handle);
  F1.Initialize(255 * 80 div 100, 250, 250, 250);
  F2.Initialize(255 * 80 div 100, 100, 100, 100);
  // harte Übergänge verhindern

  Brush := TGPLinearGradientBrush.create(TGPPoint.create(0, y1 - 2)
    // harte Übergänge verhindern
      , TGPPoint.create(0, y2 + 2), F1, F2);

  Blend := TGPBlend.create(RelativeIntensities, RelativePositions);
  Brush.Blend := Blend;
  Graphics.FillRectangle(Brush, y1, 155, 500, y2);
end;

Dunkelbunt27 3. Feb 2013 12:52

AW: GDI+ Graduelles Rechteck (transparent)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke, das sieht echt gut aus :)

EDIT:
Beim Verschieben dieser "Leiste" verschiebt sich der Mittelpunkt des Farbverlaufs,
also ich weiß nicht wie ich das beschreiben soll, deshalb hab ich das ganze mal zurecht gemacht und angehängt.

Ich hätte es lieber, wenn die Leiste dauerhaft wie die Datei aus dem ersten Post aussieht, auch
wenn man sie an einer anderen Stelle neu zeichnet...

Bummi 3. Feb 2013 13:38

AW: GDI+ Graduelles Rechteck (transparent)
 
Delphi-Quellcode:
  Brush := TGPLinearGradientBrush.Create(TGPPoint.create(Y, Y + y1-2),
    TGPPoint.create(Y, Y + y2 + 2), F2, F1);

Dunkelbunt27 3. Feb 2013 14:12

AW: GDI+ Graduelles Rechteck (transparent)
 
Und nochmals Danke!

Bummi 3. Feb 2013 14:19

AW: GDI+ Graduelles Rechteck (transparent)
 
ist mit immer ein Fest:-D

Dunkelbunt27 3. Feb 2013 15:16

AW: GDI+ Graduelles Rechteck (transparent)
 
Bevor ich's vergesse:
Wie kann man eigentlich seine GDI+ Sachen über ein Panel zeichnen?
Das gezeichnete wird so immer nur überdeckt und so...

Bummi 3. Feb 2013 18:55

AW: GDI+ Graduelles Rechteck (transparent)
 
ich fürchte ich habe die Frage nicht ganz verstanden, ein Panel als Wincontrol hat eine eigenen "Canvas" und zeichnet sich selbst darüber, oder in welche Richtung zielt Deine Frage.

Dunkelbunt27 3. Feb 2013 19:07

AW: GDI+ Graduelles Rechteck (transparent)
 
Ähm also es ging darum, dass ich die Oberfläche in Panel unterteile.
Und dann wollte ich eigentlich das ganze Zeichnen nur auf dem mittleren, also dem Hauptpanel vornehmen.
Normal hätte man ein Image genommen und das Panel als Parent, aber das geht ja hier so nicht...

Ich weiß nicht, ob man das so versteht ^^

Bummi 3. Feb 2013 21:50

AW: GDI+ Graduelles Rechteck (transparent)
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich habe mal einen Lösungsansatz angehängt ....
Ich habe die Panels bewusst erkennbar lassen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:24 Uhr.
Seite 1 von 2  1 2      

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