MDI 子視窗如何在 runtime調整 borderstyle |
答題得分者是:歸木淡
|
gerojeng
一般會員 ![]() ![]() 發表:23 回覆:25 積分:9 註冊:2004-06-19 發送簡訊給我 |
|
歸木淡
中階會員 ![]() ![]() ![]() 發表:1 回覆:49 積分:75 註冊:2005-09-07 發送簡訊給我 |
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 發送簡訊給我 |
在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 發送簡訊給我 |
對不起,我沒有用過在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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |