在delphi中如何把MDI工作区的粗边框去掉

尛阳小号逡p

尛阳小号逡p

2016-02-19 19:59

有了下面这个在delphi中如何把MDI工作区的粗边框去掉教程,不懂在delphi中如何把MDI工作区的粗边框去掉的也能装懂了,赶紧get起来装逼一下吧!
 

  最近在考虑MIS系统界面的整体框架,决定使用MDI Form+模块中的MDI Child,但是MDI form的工作区总有讨厌的粗边。

  昨天下午从网上查到C++版本的解决方法,就花了点时间翻译成delphi的,呵呵,供大家参考。

  在MDI Form中写入如下代码:

  interface

  TFmMain = class(TForm)

  ...
      procedure FormCreate(Sender: TObject);

  ...

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  private

  ...
      procedure CreateDefWndProc();
      PROCEDURE ClientWndProc(VAR Message: TMessage);

  end;

  implementation

  ...

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  procedure TFmMain.CreateDefWndProc;
  var
    hWnd1 : HWND;
    ccs : TClientCreateStruct;
  begin
      ccs.hWindowMenu := 0;
      ccs.idFirstChild := $FF00;
      hWnd1 := CreateWindowEx(WS_EX_CLIENTEDGE,
          'MDICLIENT', '', WS_CHILD or WS_VISIBLE or WS_GROUP or
          WS_TABSTOP or WS_CLIPCHILDREN or WS_HSCROLL or WS_VSCROLL or
          WS_CLIPSIBLINGS or MDIS_ALLCHILDSTYLES, 0, 0, ClientWidth,
          ClientHeight, Handle, 0, HInstance, @ccs);
      FClientInstance := pointer(GetWindowLong(hWnd1,GWL_WNDPROC));
      DestroyWindow(hWnd1);
  end;

  procedure TFmMain.ClientWndProc(var Message: TMessage);
  //VAR
  //  MyDC : hDC;
  begin
    if (Message.Msg = WM_ERASEBKGND)  then
    begin
      //这儿模拟VCL的源程序用主窗口的背景色填充客户区,
      //你也可以在客户区画一个图形。
      FillRect(HDC(Message.WParam), ClientRect,Brush.Handle);
    //  MyDC := TWMEraseBkGnd(Message).DC;
      //BitBlt(MyDC, (ClientWidth - imBack.Picture.Width)div 2,
       //  (ClientHeight - imBack.Picture.Height) div 2,
       // imBack.Picture.Width, imBack.Picture.Height,
      //  imBack.Picture.Bitmap.Canvas.Handle, 0, 0, SRCCOPY);

      Message.Result := 1;
    end
    else
        Message.Result := CallWindowProc(FClientInstance, ClientHandle,
            Message.Msg, Message.WParam, Message.LParam); 
  end;

         
  procedure TFmMain.FormCreate(Sender: TObject);
  begin
  //*******去除MDIchild粗边框**********
    CreateDefWndProc();
    SetWindowLong(ClientHandle, GWL_WNDPROC,
        LongInt(MakeObjectInstance(ClientWndProc)));
    SetWindowLong(ClientHandle,GWL_EXSTYLE,GetWindowLong(
        ClientHandle,GWL_EXSTYLE) and (not WS_EX_CLIENTEDGE));
    SetWindowPos(ClientHandle,0,0,0,0,0,SWP_FRAMECHANGED
        or SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE or SWP_NOZORDER);
  //***********************************
  end;

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

在delphi中如何把MDI工作区的粗边框去掉

编程语言 网络编程
在delphi中如何把MDI工作区的粗边框去掉

在EVC3.0中创建MDI程序

C语言教程 C语言函数
在EVC3.0中创建MDI程序

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Delphi中API编程--在Delphi中调用API函数

Delphi
Delphi中API编程--在Delphi中调用API函数

在Delphi中定位文件位置

Delphi
在Delphi中定位文件位置

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

picplaypost怎么把视频中的水印去掉

电脑网络
picplaypost怎么把视频中的水印去掉

边框与底色在设计中的作用

平面设计 海报设计 广告设计 画报设计 签名设计 服装设计 名片设计 画册设计 版式设计 商标设计
边框与底色在设计中的作用

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

用delphi操作INI文件

用delphi操作INI文件

Dreamweaver使用快技法十三则

Dreamweaver使用快技法十三则
下拉加载更多内容 ↓