当前位置:主页>仓库管理软件> 列表

我给一个窗体画了一个边框,但如何将这个边框再删除呢?(就是 找采购管理

财务软件版1楼: 这是一个可以设置窗体边框颜色的函数,大家能帮忙设计一个可以删除该窗体边框颜色的函数吗?
function HighlightWindow(pl_hwnd: Hwnd;cor:tColor):bool;
var
ll_hDC : HDC;
lu_RECT : TRECT;
begin
GetWindowRect(pl_hWnd,lu_RECT);
ll_hDC := GetWindowDC(pl_hWnd);
ll_Pen := CreatePen(ps_solid, 2, cor);
SelectObject(ll_hDC, ll_Pen); //设置新笔
SelectObject(ll_hDC, GetStockObject(HOLLOW_BRUSH));
Rectangle(ll_hDC, 0, 0, lu_RECT.Right - lu_RECT.Left, lu_RECT.Bottom - lu_RECT.Top);
DeleteObject(ll_Pen);
ReleaseDC(pl_hWnd, ll_hDC);
result:=true;
end;

2楼: 再用同样的算法,把画框的颜色改回成原来底色就可以了吧 如用友财务软件

3楼: 其实问题就是怎样获得原来窗口边框的(默认)颜色呢?您能告诉我吗?谢谢!

4楼: 顶!!!!!!!!!!!!!!!

5楼: form1.repaint!

6楼: function HighlightWindow(pl_hwnd: Hwnd;cor:tColor):bool;
var
ll_hDC : HDC;
lu_RECT : TRECT;
ll_Pen : HPEN;
begin
GetWindowRect(pl_hWnd,lu_RECT);
ll_hDC := GetWindowDC(pl_hWnd);

SetROP2(ll_hDC, R2_NOTXORPEN); <<<<<<<

ll_Pen := CreatePen(ps_solid, 1, cor); <<<<<<<画笔大小改了点0, 1差不多
SelectObject(ll_hDC, ll_Pen); //设置新笔
SelectObject(ll_hDC, GetStockObject(HOLLOW_BRUSH));
Rectangle(ll_hDC, 0, 0, lu_RECT.Right - lu_RECT.Left, lu_RECT.Bottom - lu_RECT.Top);
DeleteObject(ll_Pen);
ReleaseDC(pl_hWnd, ll_hDC);
result:=true;
end;

财务软件版7楼: 非常感谢hwljerry,不过这个边框被别的窗体挡住后就消失了,能不能让它不消失,直到我们让它消失为止(即再次调用该函数)?

8楼: http://www.delphibbs.com/delphibbs/dispq.asp?lid=1235742

9楼: 在窗体的ONPAINT事件里加入你的代码试试

10楼: 谢谢“啊啊啊啊啊”,我在这里找了很久相关的问题老是找不到。

11楼: 上面两位的回答综合起来可以解决你的问题的。用了一个简单的方法。
unit Unit1;

interface

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

type
TForm1 = class(TForm)
btn1: TButton;
Button1: TButton;
Button2: TButton;
btn2: TButton;
procedure FormPaint(Sender: TObject);
procedure btn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation

{$R *.dfm}

var
ReDraw: Boolean;

function HighlightWindow(pl_hwnd: Hwnd;cor:tColor):bool;
var
ll_hDC : HDC;
lu_RECT : TRECT;
ll_Pen : HPEN;
begin
GetWindowRect(pl_hWnd,lu_RECT);
ll_hDC := GetWindowDC(pl_hWnd);
ll_Pen := CreatePen(ps_solid, 2, cor);
SelectObject(ll_hDC, ll_Pen); //设置新笔
SelectObject(ll_hDC, GetStockObject(HOLLOW_BRUSH));
Rectangle(ll_hDC, 0, 0, lu_RECT.Right - lu_RECT.Left, lu_RECT.Bottom - lu_RECT.Top);
DeleteObject(ll_Pen);
ReleaseDC(pl_hWnd, ll_hDC);
result:=true;
end;

function HighlightWindow2(pl_hwnd: Hwnd;cor:tColor):bool;
var
ll_hDC : HDC;
lu_RECT : TRECT;
ll_Pen : HPEN;
begin
GetWindowRect(pl_hWnd,lu_RECT);
ll_hDC := GetWindowDC(pl_hWnd);

SetROP2(ll_hDC, R2_NOTXORPEN); //<<<<<<<

ll_Pen := CreatePen(ps_solid, 1, cor); //<<<<<<<画笔大小改了点0, 1差不多
SelectObject(ll_hDC, ll_Pen); //设置新笔
SelectObject(ll_hDC, GetStockObject(HOLLOW_BRUSH));
Rectangle(ll_hDC, 0, 0, lu_RECT.Right - lu_RECT.Left, lu_RECT.Bottom - lu_RECT.Top);
DeleteObject(ll_Pen);
ReleaseDC(pl_hWnd, ll_hDC);
result:=true;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
if ReDraw then
HighlightWindow(Self.Handle, clBlack);
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
ReDraw := False;
HighlightWindow2(Self.Handle, clBlack);
form1.BorderWidth:=1; //引起局部重绘
form1.BorderWidth:=0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ReDraw := True;
end;

procedure TForm1.btn2Click(Sender: TObject);
begin
HighlightWindow(Self.Handle, clBlack)
end;

end.

12楼: repaint 如采购管理

13楼: procedure ResetDrawWindow(HCtrl: HWND);
begin
Windows.RedrawWindow(HCtrl, nil, 0, RDW_INVALIDATE or RDW_FRAME or RDW_ERASE);
end;

财务软件版14楼: 还是这里的人气旺啊,谢谢大家。
最后的解决办法还是用hwljerry的方法,调用第一次画边框,再次调用则删除边框。

晚上结帖。
不过又发现新问题要请教大家啦。
如何给任意一个窗体画边框,且能让这个边框保持恒久。http://www.delphibbs.com/delphibbs/dispq.asp?lid=3344418

15楼: 如何给任意一个窗体画边框
>>>>>>>>>>>这个在”啊啊啊啊啊“提供的连接里面都有啊。
且能让这个边框保持恒久
>>>>>>>>>>>>>这个可能要保存取得的句柄再定时绘制应该可以

16楼: 呵呵,就是“且能让这个边框保持恒久”成了一个新的问题!不知道如何解决?

17楼: 学习ing

18楼: 多人接受答案了。