Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Bitmap als form für fenster (https://www.delphipraxis.net/61061-bitmap-als-form-fuer-fenster.html)

King Lui 16. Jan 2006 16:53


Bitmap als form für fenster
 
Hallo ich habe schon öfters gesehn, dass ein fester in form einer bitmap ist also niht eckig, nun meine frage wie geht das? Sicher mit dem bild und ner alpha map, aber wo stellt man das ein? Danke für eure Hilfe

ichbins 16. Jan 2006 17:04

Re: Bitmap als form für fenster
 
Delphi-Quellcode:
form1.transparentcolor:=true;
form1.transparentcolorvalue:=clblack; //schwarze Teile transparent
form1.borderstyle:=bsnone; //keinen Rahmen anzeigen
dann pappst du noch ein timage drauf, machst align:=alclient und lädtst ein image rein.

King Lui 16. Jan 2006 17:32

Re: Bitmap als form für fenster
 
sry wenn ich mich falsch ausgedrückt hab, aber ich möchte nicht eine bestimmte farbe als transparent, sondern einmal das bild und nach noch nen bild, welches nur aus schwarz und weiss besteht, wo dann das schwwarz transparent ist oder geht das damit auch?

turboPASCAL 16. Jan 2006 17:43

Re: Bitmap als form für fenster
 
Also mit einer Bildmaske. Stichworte [oh]CreateRegion, CreateRegionEx, CombineRgn[/oh]

z.B: http://www.delphipraxis.net/internal...=477599#477599

Christian Seehase 16. Jan 2006 17:48

Re: Bitmap als form für fenster
 
Moin King Lui,

das Stichwort dürft hier "Region" lauten.
Such' hier doch mal danach.

(z.B. auch: CreateEllipticRgn, CreatePolygonRgn oder auch einfach CreateRectRgn)

Leider klappt bei mir das Suchen im Moment nicht, ich kann also nicht prüfen, was Du hier für Fundstellen erhältst :?

noch_ein_hannes 16. Jan 2006 17:54

Re: Bitmap als form für fenster
 
Hmm, wenn du den ersten Beitrag von "ichbins" mal genauer anschaust,
dann hast Du doch genau das was Du möchtest ...

Delphi-Quellcode:
form1.transparentcolor:=true;
form1.transparentcolorvalue:=clblack; //schwarze Teile transparent
form1.borderstyle:=bsnone; //keinen Rahmen anzeigen
Du kannt statt Schwarz ja auch eine Farbe einsetzen, die garantiert
nicht in Deinem Bild vorkommt. Und im Bild werden die transparenten Bereiche
dann genau in der Farbe markiert.

King Lui 16. Jan 2006 19:24

Re: Bitmap als form für fenster
 
und bei den farben gibt man die in hex an?

EDIT: und ich würd gern noch wissen wie man anti aliased ecken hinbekommt.
und wie kann ich es machen wenn die borders weg sind, dass man durch klick in das fenster das verschieben kann?

Khabarakh 16. Jan 2006 19:42

Re: Bitmap als form für fenster
 
Zitat:

Zitat von King Lui
und bei den farben gibt man die in hex an?

Jupp, TColor als $00BBGGRR.

Zitat:

EDIT: und ich würd gern noch wissen wie man anti aliased ecken hinbekommt.
Da brauchst du ein Bitmap mit richtigem Alphakanal. http://www.delphipraxis.net/internal...=453853#453853
Zitat:

und wie kann ich es machen wenn die borders weg sind, dass man durch klick in das fenster das verschieben kann?
Ab hier übernimmt die DP-Suche :wink: .

King Lui 16. Jan 2006 19:50

Re: Bitmap als form für fenster
 
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  Alpha: Boolean;
begin
  Bit := TBitmap32.Create;
  LoadPNGintoBitmap32(Bit, ExtractFilePath(ParamStr(0)) + 'test.png', Alpha);

  setWindowLong(Handle, GWL_EXSTYLE,
    getWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED {or WS_EX_TRANSPARENT});
  // WS_EX_TRANSPARENT macht das Fenster für Mausklicks transparent
 
  BlendF.BlendOp := AC_SRC_OVER;
  BlendF.BlendFlags := 0;
  BlendF.SourceConstantAlpha := 255;
  BlendF.AlphaFormat := AC_SRC_ALPHA;
  P := Point(0, 0);
  Size.cx := Bit.Width;
  Size.cy := Bit.Height;

  UpdateLayeredWindow(Handle, 0, nil, @Size, Bit.Handle, @P, 0, @BlendF, ULW_ALPHA);
end;
bei dem hier, was muss ich da bei uses eintragen sry bin noch anfänger

Khabarakh 16. Jan 2006 20:13

Re: Bitmap als form für fenster
 
TBitmap32 ist eine Klasse der GR32-Lib, du kannst aber genausogut ein TBitmap benutzen.
Delphi-Quellcode:
LoadPNGintoBitmap32(Bit, ExtractFilePath(ParamStr(0)) + 'test.png', Alpha);
Hier wird ein PNG mit Alphakanal geladen, diese Zeile musst du dann noch ersetzen.


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