AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Transparentes Rechteck zeichnen
Thema durchsuchen
Ansicht
Themen-Optionen

Transparentes Rechteck zeichnen

Ein Thema von xZise · begonnen am 25. Jun 2007 · letzter Beitrag vom 25. Jun 2007
Antwort Antwort
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

Transparentes Rechteck zeichnen

  Alt 25. Jun 2007, 17:05
Wie kann ich ein transparentes Rechteck zeichnen, also dass man sozusagen die Stelle einfärbt.

Angeblich soll ja der Farbcode folgendermaßen lauten:
$AABBGGRR // A = Alphakanal, BGR = RGB andersherum Oder habe ich da was falsch verstanden? Jedenfalls wird das Rechteck bei einen ungeraden A schwarz ansonsten Blau (ich hatte als RGB Blau angegeben)
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Transparantes Rechteck zeichnen

  Alt 25. Jun 2007, 17:48
vllt kannst dir die letzte funktion nen bissel selber umbasteln, um dein gewünschtes ergebnis zu erhalten..

siehe:

rechteck
Martin
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Transparentes Rechteck zeichnen

  Alt 25. Jun 2007, 17:53
Na... Das wird net sein...

Ich ahbe mal ein Beispiel angehangen wie ich das dachte
Angehängte Grafiken
 
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Transparentes Rechteck zeichnen

  Alt 25. Jun 2007, 18:00
Vielleicht hilft Dir dies (ungetestet).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#5

Re: Transparentes Rechteck zeichnen

  Alt 25. Jun 2007, 18:05
Zitat von xZise:
$AABBGGRR // A = Alphakanal, BGR = RGB andersherum
So sollte es funktionieren, tut es aber nicht, da Delphi das uralte GDI benutzt. Nutze GDI+, eine der üblichen 3D-APIs (was wohl eher in die Kategorie "Overkill"gehört ) oder 3rd-Party-Libs wie GR32.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Transparentes Rechteck zeichnen

  Alt 25. Jun 2007, 18:28
Hallo Fabian,

meinst du so etwas?

Delphi-Quellcode:
// zeichnet ein transparentes Rechteck
//
// aCanvas Ziel-Canvas
// aRect Zeichenbereich
// aColor Füllfarbe
// aIntensity Intensität (0=min, 255=max)

procedure AlphaBlendRect (const aCanvas: TCanvas;
                          const aRect: TRect;
                          const aColor: TColor;
                          const aIntensity: Byte);
var
  w, h : Integer;
  Bitmap : TBitmap;
  BlendParams : TBlendFunction;
begin
  w := Succ(aRect.Right - aRect.Left);
  h := Succ(aRect.Bottom - aRect.Top);
  Bitmap := TBitmap.Create;
  try
    Bitmap.Width := w;
    Bitmap.Height := h;
    Bitmap.Canvas.Brush.Color := ColorToRGB(aColor);
    Bitmap.Canvas.FillRect (Rect(0, 0, w, h));
    BlendParams.BlendOp := AC_SRC_OVER;
    BlendParams.BlendFlags := 0;
    BlendParams.SourceConstantAlpha := aIntensity;
    BlendParams.AlphaFormat := 0;
    Windows.AlphaBlend(aCanvas.Handle, aRect.Left, aRect.Top, w, h,
                       Bitmap.Canvas.Handle, 0, 0, w, h,
                       BlendParams);
  finally
    Bitmap.Free;
  end;
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Transparentes Rechteck zeichnen

  Alt 25. Jun 2007, 19:26
Zitat von Hawkeye219:
Hallo Fabian,

meinst du so etwas?

Delphi-Quellcode:
// zeichnet ein transparentes Rechteck
//
// aCanvas Ziel-Canvas
// aRect Zeichenbereich
// aColor Füllfarbe
// aIntensity Intensität (0=min, 255=max)

procedure AlphaBlendRect (const aCanvas: TCanvas;
                          const aRect: TRect;
                          const aColor: TColor;
                          const aIntensity: Byte);
var
  w, h : Integer;
  Bitmap : TBitmap;
  BlendParams : TBlendFunction;
begin
  w := Succ(aRect.Right - aRect.Left);
  h := Succ(aRect.Bottom - aRect.Top);
  Bitmap := TBitmap.Create;
  try
    Bitmap.Width := w;
    Bitmap.Height := h;
    Bitmap.Canvas.Brush.Color := ColorToRGB(aColor);
    Bitmap.Canvas.FillRect (Rect(0, 0, w, h));
    BlendParams.BlendOp := AC_SRC_OVER;
    BlendParams.BlendFlags := 0;
    BlendParams.SourceConstantAlpha := aIntensity;
    BlendParams.AlphaFormat := 0;
    Windows.AlphaBlend(aCanvas.Handle, aRect.Left, aRect.Top, w, h,
                       Bitmap.Canvas.Handle, 0, 0, w, h,
                       BlendParams);
  finally
    Bitmap.Free;
  end;
end;
Gruß Hawkeye
Danke Hawkeye! Die Funktion ist perfekt und erzeugt sogar Polygone Danke ^^
Wenn muss/soll ich als Autor der Funktion nennen? Dich oder hast du die Funktion vielleicht von voandersher?

@ DeddyH: Sry, aber Hawkeyes Code ist übersichtlicher Und funktioniert gut!
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Transparentes Rechteck zeichnen

  Alt 25. Jun 2007, 20:12
Zitat von xZise:
Wenn muss/soll ich als Autor der Funktion nennen? Dich oder hast du die Funktion vielleicht von voandersher?
Wenn du ein wenig im Internet stöberst, wirst du den Code in dieser oder ähnlicher Form wahrscheinlich häufiger finden. Microsoft liefert die Beschreibung der Funktion AlphaBlend, der Rest ist die Anpassung an die eigenen Bedürfnisse. Vielleicht kann man die Routine sogar noch optimieren, für meine Zwecke reichte es so.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:26 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