当前位置:主页>销售管理软件> 列表

Delphi怎么实现不规则窗口?例如三角形 找人员信息管理软件

财务软件版1楼: 请问怎么样实现不规则窗口,包括三角形。可否使用位图呢?请高手帮忙。谢谢

2楼: BOOL PolyPolygon(
HDC hdc, // handle to DC
CONST POINT *lpPoints, // array of vertices
CONST INT *lpPolyCounts, // array of count of vertices
int nCount // count of polygons
); 如人员信息管理软件

3楼: // 方法一 :利用不规则图片

(1)
procedure TForm1.FormCreate(Sender: TObject);
begin
self.ClientWidth := HotImage1.Width ;
self.ClientHeight := HotImage1.Height ;
brush.style:=bsClear;
end;

(2)把Form1 的 BorderStyle 属性设置为 bsSizeable

(3)在Form1 上放置一个 TImage,设置其Transparent属性为 true,
并在 TImage.picture 中设置一个不规则图片

// 方法二

procedure TForm1.FormCreate(Sender: TObject);
var
hR : THandle;
begin
// hR := CreateEllipticRgn(self. ,self.top ,self.Width ,self.Height );
hR := CreateEllipticRgn(0,self.height-self.clientHeight,self.clientWidth,self.clientHeight );


SetWindowRgn(Handle,hR,True);
end;

4楼: unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
HTTPApp, SvcMgr, ExtCtrls, StdCtrls, Menus;

type
TForm1 = class(TForm)
Image1: TImage;
PopupMenu1: TPopupMenu;
C1: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
OriginalPos:TPoint; // 记录原始位置
CurrentPos:TPoint; // 记录当前位置
DownPos:TPoint; // 记录鼠标按下时位置
MouseLButtonDown:Boolean; // 标记鼠标左键是否按下
public

{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
hr :THandle;
begin
MouseLButtonDown:=False;
// 创建一个圆形窗口
hr:=CreateEllipticRgn(0,0,Width,Height);
SetWindowRgn(Handle,hr,True);
end;

procedure TForm1.FormResize(Sender: TObject);
var
hr :THandle;
begin
// 刷新圆形窗口
hr:=CreateEllipticRgn(0,0,width,height);
setwindowrgn(handle,hr,true);
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
OriginalPos.x:=Form1.Left; // 记录下原始坐标位置
OriginalPos.y:=Form1.Top;
DownPos.x:=X; // 鼠标按下的位置
DownPos.y:=Y;
DownPos:=ClientToScreen(DownPos); // 将客户区坐标转换为屏幕坐标
if Button = mbLeft then
MouseLButtonDown:=True;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if MouseLButtonDown then
begin
CurrentPos.x:=X;
CurrentPos.y:=Y;
CurrentPos:=ClientToScreen(CurrentPos); // 将客户区坐标转换为屏幕坐标
// 确定窗体的新位置
Form1.Left:=OriginalPos.x+(CurrentPos.x-DownPos.x);
Form1.Top :=OriginalPos.y+(CurrentPos.y-DownPos.y);
end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MouseLButtonDown:=False; // 鼠标左键弹起
end;


end.

5楼: 这个是以字作窗体,希望对你有点用处!
procedure TForm4.FormPaint(Sender: TObject);
var
rgn:HRGN;
begin
BeginPath(Canvas.Handle);
SetBkMode(Canvas.Handle, TRANSPARENT );
Canvas.Font.Name:= ''宋体'';
Canvas.Font.Size:=100;
Canvas.TextOut( 20, 20, ''Hao'');
EndPath(Canvas.Handle);
rgn:= PathToRegion(Canvas.Handle);
SetWindowRgn(Handle, rgn, true );
end;

6楼: 使用第三方控件吧;
自己写太麻烦了,
写不规则图形,写窗口的paint事件,捕获鼠标消息。处理鼠标,处理标题,处理窗口移动。 多少,自己写?累死你,不过学习还可以。

财务软件版7楼: 谢谢各位的热心讲解。^_^感激[:)]