一个是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控件进行画图时,出现错拉!造成更大的问题!
请继续讨论,结束后,再开新贴给分!

解决方案 »

  1.   

    很急,怎样使得activeForm窗口中的ActiveFormDestroy事件也能执行?
      

  2.   

    搞定了,在destroyevent中增加一个close就OK了!不用修改parkingwindowproc中的内容!
      

  3.   

    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); //这里的ControlWnd跟本就是个无效的值,修改成这样只能造成别的错误    
        end;     
        //zhaoyan     edit     end     
        /////////////////////////////////////////////////////////////////////////////     
      end;     
    end;