zoukankan      html  css  js  c++  java
  • 禁用窗体关闭按钮(使用GetWindowLong修改GWL_STYLE)

    一般我们不想让窗体能够关闭, 首先想到的是在OnCloseQuery事件里设置CanClose := False, 不过在某些情况下这个会和程序关闭窗体的业务逻辑产生冲突

    所以写了下面这个函数, 可以设置窗体上的部分控制按钮禁用和启用, 仅仅是按钮显示及对鼠标键盘的响应, 按钮功能方面不影响

    复制代码
    type
      TSetWinButtons = set of (swb_Close, swb_Minimize, swb_Maximize);
    
      {设置窗体关闭按钮状态}
    procedure SetWindowButton(AButtons: TSetWinButtons; AEnabled: Boolean;
      AWindowHandles: array of THandle);
    var
      i: Integer;
      nHasMenu, nHasWinLong: Boolean;
      nMValue: UINT;
      nWinLong: NativeInt;
    begin
      if Length(AWindowHandles) = 0 then
        Exit;
    
      nHasMenu := swb_Close in AButtons;
      nHasWinLong := (swb_Minimize in AButtons) or (swb_Maximize in AButtons);
    
      if nHasMenu then
      begin
        if AEnabled then
          nMValue := MF_BYCOMMAND or MF_ENABLED
        else
          nMValue := MF_BYCOMMAND or MF_DISABLED or MF_GRAYED;
      end;
    
      for i := Low(AWindowHandles) to High(AWindowHandles) do
      begin
        if nHasMenu then
          EnableMenuItem(GetSystemMenu(AWindowHandles[i], FALSE), SC_CLOSE, nMValue);
    
        if nHasWinLong then
        begin
          nWinLong := GetWindowLong(AWindowHandles[i], GWL_STYLE);
    
          if AEnabled then
          begin
            if swb_Minimize in AButtons then
              nWinLong := nWinLong or WS_MINIMIZEBOX;
            if swb_Maximize in AButtons then
              nWinLong := nWinLong or WS_MAXIMIZEBOX;
          end
          else
          begin
            if swb_Minimize in AButtons then
              nWinLong := nWinLong and not WS_MINIMIZEBOX;
            if swb_Maximize in AButtons then
              nWinLong := nWinLong and not WS_MAXIMIZEBOX;
          end;
    
          SetWindowLong(AWindowHandles[i], GWL_STYLE, nWinLong);
        end;
      end;
    end;
    
    
    
    //调用方式 SetWindowButton([swb_Close, swb_Minimize, swb_Maximize], False, [Application.Handle, Handle]);
    复制代码

    http://www.cnblogs.com/hs-kill/p/4650684.html

  • 相关阅读:
    DataGridView中绑定List泛型的问题 [轉]
    .NET 導入EXCEL後數值型toString會變成空問題
    Linq連接List時多值時使用方法
    SQL2008报表三种实现Reporting Service2008匿名访问的方法(转)
    IIS7 WCF HTTP 错误 404.3 Not Found
    sql2005取得TABLE主鍵及欄位名稱,說明
    MSSQL禁用/啟用TRIGGER
    IE6下a:hover span失效问题(转载)
    asp.ner上传文件限制(转载)
    css优先级(转载)
  • 原文地址:https://www.cnblogs.com/findumars/p/5812163.html
Copyright © 2011-2022 走看看