全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1643
推到 Plurk!
推到 Facebook!

MDI 子視窗如何在 runtime調整 borderstyle

答題得分者是:歸木淡
gerojeng
一般會員


發表:23
回覆:25
積分:9
註冊:2004-06-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-08-23 17:58:31 IP:218.160.xxx.xxx 訂閱
爬了文章,如果只是想一開始就要 bsNone 可以
override CreateParams 來做

那如果我想讓mdi子視窗在 Active 事件變成正常的 bsSizeable , 在 Deactive 時變成 bsNone
該怎麼做呢 ? CreateParams 只能在視窗建立的時候使用
歸木淡
中階會員


發表:1
回覆:49
積分:75
註冊:2005-09-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-09-04 05:56:27 IP:130.132.xxx.xxx 訂閱
SetWindowLong應該可以.
[code delphi]
procedure SetFormBorder(Form: tCustomForm; Visible: boolean);
const
BorderStyles = WS_BORDER or WS_CAPTION or WS_SIZEBOX;
var
Styles: integer;
begin
Styles := GetWindowLong(Form.Handle, GWL_STYLE);
if visible
then Styles := Styles or BorderStyles
else Styles := Styles and not BorderStyles;
SetWindowLong(Form.Handle, GWL_STYLE, Styles);
end;
[/code]
gerojeng
一般會員


發表:23
回覆:25
積分:9
註冊:2004-06-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-09-04 20:01:02 IP:219.71.xxx.xxx 訂閱
在MDI內試了,沒有任何效果耶,會不會是缺了Refresh 的指令呢 ?

===================引 用 歸木淡 文 章===================
SetWindowLong應該可以.
[code delphi]
procedure SetFormBorder(Form: tCustomForm; Visible: boolean);
const
BorderStyles = WS_BORDER or WS_CAPTION or WS_SIZEBOX;
var
Styles: integer;
begin
Styles := GetWindowLong(Form.Handle, GWL_STYLE);
if visible
then Styles := Styles or BorderStyles
else Styles := Styles and not BorderStyles;
SetWindowLong(Form.Handle, GWL_STYLE, Styles);
end;
[/code]
歸木淡
中階會員


發表:1
回覆:49
積分:75
註冊:2005-09-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-09-04 23:54:44 IP:130.132.xxx.xxx 訂閱
對不起,我沒有用過在MiDIChild上,剛才我試了試,發現真的不行..........
你可以試試用Region,不過我也不知可不可以
[code delphi]procedure SetFormBorder(const visible: boolean);
var
Rgn: THandle;
p, ps: tpoint;
begin
if visible then
begin
SetWindowRgn(Handle, 0, TRUE);
end else
begin
p:=ClientToScreen(point(0,0)); // p = Client 左上角在SCREEN的位置
ps:=point(Left, Top);
if assigned(parent)
then ps:=parent.ClientToScreen(ps); // ps = Form 左上角在SCREEN的位置
dec(p.x, ps.x);
dec(p.y,ps.y); // p = Client 左上角在Form的位置
Rgn := CreateRectRgn(p.x, p.y, p.x ClientWidth, p.y ClientHeight);
SetWindowRgn(Handle, Rgn, TRUE);
DeleteObject(Rgn);
end;
end;
[/code]
隨手寫來,可能有點語法錯誤.........
gerojeng
一般會員


發表:23
回覆:25
積分:9
註冊:2004-06-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-09-05 02:54:52 IP:219.71.xxx.xxx 訂閱
可以用,部份x ,y 座標自己再調一下就好了 ,感謝
系統時間:2024-04-26 6:36:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!