AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Komponente mit GDI+ und Transparenten Hintergrund
Thema durchsuchen
Ansicht
Themen-Optionen

Komponente mit GDI+ und Transparenten Hintergrund

Ein Thema von SonnyBoyPro · begonnen am 16. Jan 2013 · letzter Beitrag vom 16. Jan 2013
Antwort Antwort
SonnyBoyPro

Registriert seit: 9. Mai 2007
68 Beiträge
 
#1

Komponente mit GDI+ und Transparenten Hintergrund

  Alt 16. Jan 2013, 09:51
Hallo zusammen,
ich stehe vor einem Problem wo Ihr mir sicher weiterhelfen könnt. Ich habe bisher für eine Visualisierung eine Grafik mit Graphics32 gezeichnet. Aufgrund diverses Änderungen muss ich jetzt auf GDI+ umsteigen.
Das Zeichnen ist mal das geringere Problem, allerdings soll das ganze auf einen transparenten Hintergrund passieren (da hinter der Komponenten ein Bild als zusätzliche Anzeigevisualisierung dient).
Da sich die Darstellung aber mit der Zeit ändert (Maschinenvisualisierung) wird da auch immer wieder reingezeichnet und daher muss vor dem Zeichnen der Hintergrund wieder "clean" gemacht werden. Wie geht das? (Bei Graphic32 hab ich mit Layers gerarbeitet). Bei GDI+ hab ichs momentan noch nicht geschafft
Ansatz war mal:
Delphi-Quellcode:
Graphics := TGPGraphics.Create(Canvas.Handle);
Graphics.Clear(MakeColor(0, 0, 0, 0));
Aber damit wird der Hintergrund nur schwarz.....

Welche Komponenten oder Ansätze könnt Ihr mir empfehlen?

BG
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Komponente mit GDI+ und Transparenten Hintergrund

  Alt 16. Jan 2013, 10:25
kleines Beispiel, Paintbox liegt über dem Bild.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,Gdipapi,Gdipobj, ExtCtrls, jpeg;

type
  TForm1 = class(TForm)
    Image1: TImage;
    PaintBox1: TPaintBox;
    procedure FormCreate(Sender: TObject);
    procedure PaintBox1Paint(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

Procedure AddSprechblase(graphics:TGPGraphics;Base:TGPPointF;SizeRect:TGPRectF;PenColor,BrushColor:TGPColor;Caption:String='';AngleWidth:Integer=20;TextHeight:Integer=10; FontName:String='Arial');
var
  Path : TGPGraphicsPath;
  Pen : TGPPen;
  Brush : TGPSolidBrush;
  StringFormat:TGPStringFormat;
  FontFamily : TGPFontFamily;
  Font : TGPFont;

begin
   Path:=TGPGraphicsPath.Create;
   Pen := TGPPen.Create(PenColor);
   Brush := TGPSolidBrush.Create(BrushColor);
   StringFormat:= TGPStringFormat.Create;
   FontFamily := TGPFontFamily.Create(FontName);
   Font := TGPFont.Create(FontFamily, TextHeight, FontStyleRegular, UnitPixel);
   if Base.Y > SizeRect.Y then Path.AddArc(SizeRect, 90 + AngleWidth, 360 - 2 * AngleWidth)
   else Path.AddArc(SizeRect, - 90 + AngleWidth, 360.0 - 2 * AngleWidth);
   Path.AddLine(Base,Base);
   path.CloseAllFigures;
   graphics.FillPath(brush, path);
   graphics.DrawPath(pen, path);
   if Length(Caption) > 0 then
      begin
        Brush.SetColor(PenColor);
        stringFormat.SetAlignment(StringAlignmentCenter);
        stringFormat.SetLineAlignment(StringAlignmentCenter);
        graphics.DrawString(Caption,-1,Font,Sizerect,stringformat,Brush)
      end;
   Path.Free;
   Pen.Free;
   Brush.Free;
   StringFormat.Free;
   FontFamily.Free;
   Font.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Paintbox1.BringToFront;
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
var
 graphics:TGPGraphics;
begin
  graphics:=TGPGraphics.Create(Paintbox1.Canvas.Handle);
  graphics.SetSmoothingMode(SmoothingModeHighQuality);
  graphics.SetTextRenderingHint(TextRenderingHintAntiAlias);
  AddSprechblase(graphics,MakePoint(200.0,400.0),MakeRect(100.0,100.0,300,200),MakeColor(200,255,0,0),MakeColor(200,255,255,255),'Tescht',10,50);
  graphics.Free;
end;

end.
Miniaturansicht angehängter Grafiken
gp.jpg  
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Komponente mit GDI+ und Transparenten Hintergrund

  Alt 16. Jan 2013, 10:31
Ich mach es so das ich mir eine Bitmap anlege auf die ich zeichne und dann mit TransparentBlt das ganze auf das Zielcanvas kopiere.
Delphi programming is awesome.
  Mit Zitat antworten Zitat
SonnyBoyPro

Registriert seit: 9. Mai 2007
68 Beiträge
 
#4

AW: Komponente mit GDI+ und Transparenten Hintergrund

  Alt 16. Jan 2013, 11:16
Danke Bummi für den Tip
Hast mir weitergeholfen!
  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 22:05 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