DAX 错误另外一种解决办法

 一个是ParkingWindowProc()函数,修改如下: function ParkingWindowProc(Wnd: HWND; Msg, wParam, lParam: Longint): Longint; stdcall; var   ControlWnd: HWND; begin   case Msg of     WM_COMPAREITEM, WM_DELETEITEM, WM_DRAWITEM, WM_MEASUREITEM, WM_COMMAND:       begin         case Msg of           WM_COMPAREITEM: ControlWnd := PCompareItemStruct(lParam).CtlID;           WM_DELETEITEM:  ControlWnd := PDeleteItemStruct(lParam).CtlID;           WM_DRAWITEM:    ControlWnd := PDrawItemStruct(lParam).CtlID;           WM_MEASUREITEM: ControlWnd := PMeasureItemStruct(lParam).CtlID;           WM_COMMAND:     ControlWnd := HWND(lParam);         else           Result := 0;           Exit;         end;         Result := SendMessage(ControlWnd, OCM_BASE + Msg, wParam, lParam);       end;   else          //zhaoyan edit begin     {     if (Msg = WM_NCDESTROY) and (Wnd = xParkingWindow) then xParkingWindow := 0;     Result := DefWindowProc(Wnd, Msg, WParam, LParam);     }     if (Msg = WM_NCDESTROY) and (Wnd = xParkingWindow) then     begin         xParkingWindow := 0;         Result := DefWindowProc(Wnd, Msg, WParam, LParam);     end else begin         Result := SendMessage(ControlWnd, OCM_BASE + Msg, wParam, lParam);     end;     //zhaoyan edit end     /   end; end; -------------------------------------------------------- 另外一个是ParkingWindow()函数,修改如下: function ParkingWindow: HWND; var   TempClass: TWndClass;   ParkingName:String; //zhaoyan add begin   Result := xParkingWindow;   if Result <> 0 then Exit;   //zhaoyan add start   //fixDaxerror:accessviolation(win2k,winxp)   ParkingName:='DAXParkingWindow_'+Format('%p',[@ParkingWindowProc]);   //zhaoyan add end   FillChar(TempClass, sizeof(TempClass), 0);   //zhaoyan edit start   //fixDaxerror:accessviolation(win2k,winxp)   if not GetClassInfo(HInstance,PChar(ParkingName),TempClass)then   //if not GetClassInfo(HInstance, 'DAXParkingWindow', TempClass) then   //zhaoyan edit end   begin     TempClass.hInstance := HInstance;     TempClass.lpfnWndProc := @ParkingWindowProc;     //zhaoyan edit start     TempClass.lpszClassName:=PChar(ParkingName);//fixDaxerror:accessviolation(win2k,winxp)     //TempClass.lpszClassName := 'DAXParkingWindow';     //zhaoyan edit end     if Windows.RegisterClass(TempClass) = 0 then       raise EOutOfResources.Create(SWindowClass);   end;   xParkingWindow := CreateWindowEx(WS_EX_TOOLWINDOW, TempClass.lpszClassName, nil,     WS_POPUP, GetSystemMetrics(SM_CXSCREEN) div 2,     GetSystemMetrics(SM_CYSCREEN) div 2, 0, 0, 0, 0, HInstance, nil);   SetWindowPos(xParkingWindow, 0, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOREDRAW     or SWP_NOZORDER or SWP_SHOWWINDOW);   Result := xParkingWindow; end; -------------------------------------------------------- 结贴 -------------------------------------------------------- 一个是ParkingWindowProc()函数,修改如下:   function  ParkingWindowProc(Wnd:  HWND;  Msg,  wParam,  lParam:  Longint):  Longint;  stdcall;   var      ControlWnd:  HWND;   begin      case  Msg  of          WM_COMPAREITEM,  WM_DELETEITEM,  WM_DRAWITEM,  WM_MEASUREITEM,  WM_COMMAND:              begin                  case  Msg  of                      WM_COMPAREITEM:  ControlWnd  :=  PCompareItemStruct(lParam).CtlID;                      WM_DELETEITEM:    ControlWnd  :=  PDeleteItemStruct(lParam).CtlID;                      WM_DRAWITEM:        ControlWnd  :=  PDrawItemStruct(lParam).CtlID;                      WM_MEASUREITEM:  ControlWnd  :=  PMeasureItemStruct(lParam).CtlID;                      WM_COMMAND:          ControlWnd  :=  HWND(lParam);                  else                      Result  :=  0;                      Exit;                  end;                  Result  :=  SendMessage(ControlWnd,  OCM_BASE  +  Msg,  wParam,  lParam);              end;      else                    //zhaoyan  edit  begin          {          if  (Msg  =  WM_NCDESTROY)  and  (Wnd  =  xParkingWindow)  then  xParkingWindow  :=  0;          Result  :=  DefWindowProc(Wnd,  Msg,  WParam,  LParam);          }          if  (Msg  =  WM_NCDESTROY)  and  (Wnd  =  xParkingWindow)  then          begin                  xParkingWindow  :=  0;                  Result  :=  DefWindowProc(Wnd,  Msg,  WParam,  LParam);          end  else  begin                  Result  :=  SendMessage(ControlWnd,  OCM_BASE  +  Msg,  wParam,  lParam);          end;          //zhaoyan  edit  end          /      end;   end;  按上面改后,对原有的在XP和2000系统的IE6环境下,控件无法释放的问题解决了,但随之而来的问题是原来在Tscrollbar中有一个TImage控件进行画图时,出现错拉!造成更大的问题!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值