导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
bios (阿贡)
★☆☆☆☆
-
盒子中级会员
2003/8/9 8:58:45
标题:
BORLAND的BUG太大了,MDi和SDI不能画图?
浏览:2786
加入我的收藏
楼主:
BORLAND的BUG太大了,MDi和SDI不能画图? 也就是说当你的form1.formstyle:=fsMDIform; 或是form1.formstyle:=fsMDIChild;canvas就不能用了 我该怎么办? procedure TForm1.FormActivate(Sender: TObject); VAR bi:TBitMap; re:TRect; begin bi:=TBitMap.Create ; bi.LoadFromFile('C:\WINNT\Greenstone.bmp'); re:=Rect(0,0,ClientWidth,ClientHeight ); Canvas.StretchDraw(re,bi); end;
----------------------------------------------
作者:
bios (阿贡)
★☆☆☆☆
-
盒子中级会员
2003/8/9 15:37:10
1楼:
注意我的目的是要在,MDI工程的MDI主窗体和SDI子窗体中 用canvas画出硬盘上的一个图片文件,但不行! 而我试过普通的窗体可以很容易搞定,该怎么修改如下程序!
----------------------------------------------
作者:
boy (阿門)
★☆☆☆☆
-
盒子活跃会员
2003/8/10 1:33:07
2楼:
你是要MDI加背景圖嗎?
----------------------------------------------
Delphi開發◆伺服器架設◆免安裝APACHE,PHP,CGI Perl, MYSQL ★
作者:
bios (阿贡)
★☆☆☆☆
-
盒子中级会员
2003/8/10 6:45:40
3楼:
是啊,可以吗?谢谢!
----------------------------------------------
作者:
2003/8/10 8:37:21
4楼:
添加一个tpanel控件,在上面画图,或加一个图片框显示图片
----------------------------------------------
-
作者:
bios (阿贡)
★☆☆☆☆
-
盒子中级会员
2003/8/10 9:42:12
5楼:
你误解了,我把原来的问题贴出来吧: 1使用MDI窗体,可是(使用IMAGE) 背景使用ALCLIENT属性还是顶部有一段距离,这是怎么回事? 2 如果先用PANEL在在PANEL上方 IMAGE那么:当你新建子窗体时 窗体会被PANEL遮住而看不见; 不信你可以试试!
----------------------------------------------
作者:
boy (阿門)
★☆☆☆☆
-
盒子活跃会员
2003/8/10 15:32:00
6楼:
將 Panel1.Visible:=false;
----------------------------------------------
Delphi開發◆伺服器架設◆免安裝APACHE,PHP,CGI Perl, MYSQL ★
作者:
bios (阿贡)
★☆☆☆☆
-
盒子中级会员
2003/8/10 15:46:10
7楼:
不行的,如果PANEL。Visible:=false;那么IMAGE也没了 没有达到我的目的
----------------------------------------------
作者:
2003/8/11 9:05:57
8楼:
你的背景图是加在主窗体吗?
----------------------------------------------
-
作者:
2003/8/11 9:07:14
9楼:
给MDI主窗口加图片(strectch) 将Form1的FormStyle设置为fsMDIForm,设置成MDI的主窗口。 加入image1,并调入一幅图片 在Form1的Private中定义: FClientInstance,FPrevClientProc : TFarProc; PROCEDURE ClientWndProc(VAR Message: TMessage); 在Form1的创建事件中加入: FClientInstance := MakeObjectInstance(ClientWndProc); FPrevClientProc := Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC)); SetWindowLong(ClientHandle, GWL_WNDPROC, LongInt(FClientInstance)); 实现过程: PROCEDURE TForm1.ClientWndProc(VAR Message: TMessage); VAR CanvasClient:TCanvas; begin with Message do case Msg of WM_ERASEBKGND: begin CanvasClient:=Tcanvas.Create; CanvasClient.Handle:=GetDC(self.ClientHandle); CanvasClient.StretchDraw(rect(0,0,clientwidth,clientheight),image1.Picture.Bitmap); CanvasClient.Free; end; else Result := CallWindowProc(FPrevClientProc, ClientHandle, Msg, wParam, lParam); end; end;
----------------------------------------------
-
作者:
bios (阿贡)
★☆☆☆☆
-
盒子中级会员
2003/8/11 10:37:15
10楼:
谢谢我先试试!
----------------------------------------------
作者:
bios (阿贡)
★☆☆☆☆
-
盒子中级会员
2003/8/11 10:58:35
11楼:
非常感谢,实验通过!
----------------------------------------------