2014-12-05 64 views
1

當我寫它的標題時,由於FTouchManager引起的運行時主題被啓用,導致AV出現問題。在主窗體上,我有一個按鈕的框架。 OnClick事件調用必須銷燬幀的主窗體方法。如果我點擊那個按鈕,我會在'Vcl.Controls'中獲得AV。當我禁用運行時主題時,一切都會正常工作。我怎麼解決這個問題?當運行時主題被啓用時,FTouchManager導致AV

謝謝你在前進,蒂姆

測試上:德爾福XE3,XE6 平臺:Win32的

Vcl.Controls:

procedure TWinControl.WndProc(var Message: TMessage); 
... 
WM_MOUSEFIRST..WM_MOUSELAST: 
     with FTouchManager do 
      if (GestureEngine <> nil) and (efMouseEvents in GestureEngine.Flags) then // <-- here I get AV error because FTouchManager = nil 
      GestureEngine.Notification(Message); 
... 
end; 

FrameUnit:

constructor TFrame2.Create(AOwner: TWinControl); 
begin 
    inherited Create(AOwner); 
    Parent := AOwner; 
end; 

destructor TFrame2.Destroy; 
begin 
    Parent := nil; 
    inherited; 
end; 

procedure TFrame2.Button1Click(Sender: TObject); 
begin 
    Form1.DestroyFrame; 
end; 

MainFormUnit :

procedure TForm1.FormShow(Sender: TObject); 
begin 
    Frame2 := TFrame2.Create(Form2); 
end; 

procedure TForm1.DestroyFrame; 
begin 
    FreeAndNil(Frame2); 
end; 

回答

4

您正在銷燬框架,並因此在其OnClick事件期間包含的按鈕。因此,OnClick事件之後的按鈕和/或框架實例中的每個代碼都會引用一個被破壞的自我。這對我來說看起來不太理智。

更好地將消息發佈到調用消息處理程序中的DestroyFrame的表單(PostMessage)。

+0

或者像'TForm'通過'Postmessage'實現'TFrame'的'Release'方法。同樣在構造函數中設置'Parent'對我來說不正確。 – kobik 2014-12-05 11:27:21

+0

謝謝你的幫助。正如你所建議的,我將使用PostMessage。它似乎是那個按鈕被摧毀了,然後又收到了一條導致AV的信息。 – Tim 2014-12-05 11:30:41

相關問題