Autor Beitrag
mathias
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 58
Erhaltene Danke: 3



BeitragVerfasst: Fr 14.06.02 20:16 
Macht ein rundes Formular mit 4 Löchern :lol:
Das Formular kann mit Maus verschoben werden.
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button1Click(Sender: TObject);
  private
    Reg, FRegion : THandle;
    mx, my       : Integer;
  public
    destructor Destroy; override;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
  x1, x2, y1, y2 : Integer;
const
  r : Integer= 25;
begin
  Caption := '';
  x1 := 90; y1 := 90; x2 := Width - 90; y2 := Height - 90;
  FRegion := CreateRoundRectRgn(510, Width - 10, Height - 10, Width, Height);
  Reg := CreateRoundRectRgn(x1 - r, y1 - r, x1 + r, y1 + r, r * 2, r * 2);
  CombineRgn(FRegion, FRegion, Reg, RGN_DIFF);
  Reg := CreateRoundRectRgn(x1 - r, y2 - r, x1 + r, y2 + r, r * 2, r * 2);
  CombineRgn(FRegion, FRegion, Reg, RGN_DIFF);
  Reg := CreateRoundRectRgn(x2 - r, y1 - r, x2 + r, y1 + r, r * 2, r * 2);
  CombineRgn(FRegion, FRegion, Reg, RGN_DIFF);
  Reg := CreateRoundRectRgn(x2 - r, y2 - r, x2 + r, y2 + r, r * 2, r * 2);
  CombineRgn(FRegion, FRegion, reg, RGN_DIFF);
  SetWindowRgn(Handle, FRegion, True);
  DeleteObject(Reg);
end;

destructor TForm1.Destroy;
begin
  if FRegion <> 0 then begin
    SetWindowRgn(Handle, 0, True);
    DeleteObject(FRegion);
  end;
  inherited Destroy;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  mx := x; my := y;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if ssleft in Shift then begin
    Top := Top + (y - my);
    Left := Left + (x - mx);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Close;
end;

end.[/code]Für andere Formen siehe auch[code]CreateEllipticRgn, CreatePolygonRgn, CreateRectRgn
:)