![]() |
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:
Kennt sich damit jemand aus?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); Soll am Ende wie im Anhang aussehen. |
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; |
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... |
AW: GDI+ Graduelles Rechteck (transparent)
Delphi-Quellcode:
Brush := TGPLinearGradientBrush.Create(TGPPoint.create(Y, Y + y1-2),
TGPPoint.create(Y, Y + y2 + 2), F2, F1); |
AW: GDI+ Graduelles Rechteck (transparent)
Und nochmals Danke!
|
AW: GDI+ Graduelles Rechteck (transparent)
ist mit immer ein Fest:-D
|
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... |
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.
|
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 ^^ |
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... |
AW: GDI+ Graduelles Rechteck (transparent)
Wie hast du das gemacht?
Der Anhang ist bei mir unverändert... ? |
AW: GDI+ Graduelles Rechteck (transparent)
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe es nochmals hochgeladen, gegf. hatte ich vergessen zu speichern:oops:
|
AW: GDI+ Graduelles Rechteck (transparent)
Hmmm, Danke, es funktioniert auf jeden Fall.
(Auch wenn ich nicht so richtig weiß, was du da machst) |
AW: GDI+ Graduelles Rechteck (transparent)
Liste der Anhänge anzeigen (Anzahl: 3)
Den Panels wird die gleiche Zeichenroutine zugewiesen wie dem Form, allerdings mit um die Positionen der Panels verschobenen Koordinaten. Ich habe ein kleines Beispiel mit Kommentaren, ohne GDI+ angehängt. (mit und ohne inherited)
|
AW: GDI+ Graduelles Rechteck (transparent)
Aha, ja verstehe! Danke für die Erklärung :shock::thumb:
|
AW: GDI+ Graduelles Rechteck (transparent)
:thumb:
|
AW: GDI+ Graduelles Rechteck (transparent)
Hallo nochmal,
ich habe mich entschlossen den Thread nochmal auszugraben, statt einen neuen zu machen. Ich weiß nicht ob das die richtige Entscheidung war, naja. Jedenfalls wollte ich das was du, Bummi, hochgeladen hast gerne auch auf Images anwenden. Das heißt die Zeichenroutine der Form, die die der Panel überschreibt so programmieren, dass sie auch über Images "drübermalt". Ich hoffe das liest jemand, der damit was anfangen kann... ist ja schon eine Weile her :) Ich Notfall mache ich einen neuen Thread. Ich freue mich auf eine Antwort! |
AW: GDI+ Graduelles Rechteck (transparent)
Liste der Anhänge anzeigen (Anzahl: 2)
Das ist nicht ganz so trivial da man das Canvas des TImage nicht direkt verwenden kann (Würde auf das Canvas eines vorhandenen Bitmaps zugreifen, wenn vorhanden). Man muss sich hier mit ein paar Hacks bis auf das Canvas von TGraphicControl herunterhangeln.
Im Anhang ein Beispiel... |
AW: GDI+ Graduelles Rechteck (transparent)
Oh, okay danke!
Ich werde das vielleicht anders lösen, vielleicht lässt sich das Problem umgehen. Vielen Dank jedenfalls :)! |
AW: GDI+ Graduelles Rechteck (transparent)
Bein reinen Graphiccontrols wird es am einfachsten sein eine Paintbox darüber zu legen, deren Paintroutine kann dann für die Panels o.ä. wie gezeigt mit verwendet werden.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:02 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 by Thomas Breitkreuz