Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Farben transparent nutzen (https://www.delphipraxis.net/161198-farben-transparent-nutzen.html)

Matze33 22. Jun 2011 09:37

Farben transparent nutzen
 
Hi,

ich habe schon im Netz gesucht, aber nichts gefunden, was mir hilft.
Ich bin dabei, eine Art Spiel zu programmieren, wo die Spielfigur ein simples Kästchen ist. Überall wo es schon war, bleibt eine Markierung. Momentan habe ich da eine Farbe, die die selbe ist, wie die Figur selbst. Um auch besser hin und Rückwege zu erkennen, möchte ich die "Spur" mit einer transparenten Farbe legen (also z.B. grün mit dem Wert 155 (von 255=volle Farbe). Wenn man dann auf ein Feld kommt, wo man schon war, sollen sich die Farben ergänzen, sodass der Farbton an dieser Stelle dunkler ist als bei einmaligem Betreten.
Hat jemand eine Idee, wie das geht?
Ich habe schon
AlphablendValue:=155;
gesetzt - hat das was damit zu tun? Da bin ich mir nicht ganz sicher.

PS: Ich nutze Delphi 6, wie ihr links auch in meinem Profil seht.

CCRDude 22. Jun 2011 09:46

AW: Farben transparent nutzen
 
Ich denke das hängt komplett damit zusammen, wie Du die grafische Darstellung realisiert hast.

Ist das ganze einfach ein Canvas, auf das Du zeichnest, berechnest Du einfach den entsprechenden Farbwert vor der Ausgabe, also etwa den Grundwert plus abhängig von der Anzahl der Besuche auf dem Feld mehr grün reingemischt.

Matze33 22. Jun 2011 09:52

AW: Farben transparent nutzen
 
Danke erstmal für die Antwort.
Also ich nutze einfach ein Image als Oberfläche und male auf der/dem (?) Canvas.
Wie würde das in der Praxis dann aussehen?

DeddyH 22. Jun 2011 10:16

AW: Farben transparent nutzen
 
Ein Beispiel mit nichts als einem Button auf der Form:
Delphi-Quellcode:
type
  TFormTest = class(TForm)
    Button1: TButton;
    procedure FormPaint(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    FSteps: integer;
  end;

...

procedure TFormTest.FormPaint(Sender: TObject);
const
  IncPerStep = 10;
var
  RBig, RSmall: TRect;
  R, G, B: byte;
  InitialColor: TColor;
begin
  RBig := Rect(0, 0, ClientWidth, ClientHeight);
  RSmall := Rect(50, 50, 100, 100);
  InitialColor := $00404040; //dunkelgrau
  Canvas.Brush.Color := InitialColor;
  Canvas.FillRect(RBig);
  //Farbe zerlegen
  R := GetRValue(InitialColor);
  G := GetGValue(InitialColor);
  B := GetBValue(InitialColor);
  //Grünanteil erhöhen, wenn möglich
  if integer(G + FSteps * IncPerStep) <= MAXBYTE then
    inc(G, FSteps * IncPerStep)
  else
    G := MAXBYTE;
  Canvas.Brush.Color := RGB(R, G, B);
  Canvas.FillRect(RSmall);
end;

procedure TFormTest.Button1Click(Sender: TObject);
begin
  inc(FSteps);
  invalidate;
end;

Matze33 22. Jun 2011 10:19

AW: Farben transparent nutzen
 
Danke, ich werds später einbauen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:03 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