Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Formulardarstellungen (https://www.delphipraxis.net/13128-formulardarstellungen.html)

Lord_Stifterl 11. Dez 2003 14:38


Formulardarstellungen
 
Hi liebe DP-Gemeinde,

ich hab da mal eine Frage die mir seit einigen Tagen durch den Kopf geistert. Gibt es in Delphi eigentlich eine Möglichkeit Formulare anders darzustellen als in der langweiligen, rechteckigen Fensterform? :?: Sollte es diese Möglichkeit in Delphi nicht geben, kann ich die Formulare in anderen Programmen erstellen und dann in Delphi einbinden?

Ich hoffe es gibt Leute die sowas schon einmal gemacht haben bzw. schon mal irgendwo gelesen haben wie so etwas funktioniert.

Liebe Grüße

Lord_Stifterl

Phoenix 11. Dez 2003 14:47

Re: Formulardarstellungen
 
Klickst Du hier ;-)

Lord_Stifterl 11. Dez 2003 15:03

Re: Formulardarstellungen
 
Ich klicken :coder: ...ich gucken :shock: ...ich nix verstehen :wiejetzt: aber trotzdem probieren. :coder:

Thx,

LS

Uncle Cracker 11. Dez 2003 15:12

Re: Formulardarstellungen
 
Hiermit kannste deine Form einer Bitmap anpassen:

Delphi-Quellcode:
var
  BM  : TBitmap;



function PictureToRGN(Bitmap: TBitmap): hRgn;
var B: TBitmap;
    C: Byte;
    R: hRgn;
    P: PByte;
    S,E,Y: Integer;
begin
 B := TBitmap.Create;
 try
 B.HandleType := bmDIB;
 B.PixelFormat := pf24Bit;
 B.Width := BitMap.Width;
 B.Height := BitMap.Height;
 B.Canvas.Draw(0, 0, BitMap);
 B.Mask(B.TransparentColor);
 B.PixelFormat := pf8Bit;
 C := PByte(B.Scanline[0])^;
 Result := CreateRectRgn(0, 0, B.Width, B.Height);
  for Y := B.Height-1 downto 0 do begin
   P := B.ScanLine[Y];
   S := 0;
   E := 0;
   repeat
    while (P^ = C) and (E < B.Width) do begin
     Inc(P);
     Inc(E);
    end;
    R := CreateRectRgn(S, Y, E, Y+1);
    try
     CombineRgn(Result, Result, R, RGN_DIFF);
    finally
     DeleteObject(R);
    end;
    while (P^ <> C) and (E < B.Width) do begin
     Inc(P);
     Inc(E);
    end;
    S := E;
   until E >= B.Width;
   if S <> E then begin
    R := CreateRectRgn(S, Y, E, Y+1);
    try
     CombineRgn(Result, Result, R, RGN_DIFF);
    finally
     DeleteObject(R);
    end;
   end;
  end;
 finally
  B.Free;
 end;
end;



procedure TForm1.FormCreate(Sender: TObject);
begin
 BM := TBitMap.Create;
 BM.LoadFromFile('c:\test.bmp');
 SetWindowRgn(Form1.Handle, PictureToRGN(BM), true);
end;



procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 BM.Free;
end;

Und hiermit verschiedenes Aussehen:

Delphi-Quellcode:
// als Ellipse (bzw. Kreis):
procedure TForm2.FormCreate(Sender: TObject);
var r:HRgn;
begin
width:=600;
height:=200;
r:=CreateEllipticRgn(0,0,width,height);
setwindowRgn(handle,r,true);
end;

// als Rechteck mit abrerundeten Ecken:
procedure TForm2.FormCreate(Sender: TObject);
var r:HRgn;
begin
width:=400;
height:=400;
r:=CreateRoundRectRgn(0,0,width,height,100,100);
setwindowRgn(handle,r,true);
end;

// als Dreieck:
procedure TForm2.FormCreate(Sender: TObject);
var r:HRgn;
p:array[0..2]of TPoint;
begin
width:=600;
height:=300;
p[0]:=point(0,0);
p[1]:=point(width,0);
p[2]:=point(width div 2, height);
r:=CreatePolygonRgn(p,3,WINDING);
setwindowRgn(handle,r,true);
end;

// als Stern:
procedure TForm2.FormCreate(Sender: TObject);
var r:HRgn;
p:array[0..7]of TPoint;
begin
width:=400;
height:=400;
p[0]:=point(0,height div 2);
p[1]:=point(width div 3,height div 3);
p[2]:=point(width div 2, 0);
p[3]:=point((width div 3)*2, height div 3);
p[4]:=point(width,height div 2);
p[5]:=point((width div 3)*2,(height div 3)*2);
p[6]:=point(width div 2,height);
p[7]:=point(width div 3,(height div 3)*2);
r:=CreatePolygonRgn(p,8,WINDING);
setwindowRgn(handle,r,true);
end;

// als Ring:
procedure TForm2.FormCreate(Sender: TObject);
var r1,r2:HRgn;
begin
width:=400;
height:=400;
r1:=CreateEllipticRgn(0,0,width,height);
r2:=CreateEllipticRgn(100,100,width-100,height-100);
CombineRgn(r2,r1,r2,rgn_xor);
setwindowRgn(handle,r2,true);
end;


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