在delphi的一般窗體,你可以通過使鉤子hook住tform的doshow方法。那樣,窗體不管是否是showmodal的,都會觸發,然后通過給此窗體發送一個特殊消息,并在此窗體中,使用鉤子,處理此消息。那么就可以在窗體完全顯示之后,真正處理你的任務了。這里有一個技巧,窗體真正顯示,并不是調用doshow的時候,而是經過windows的消息循環,完全處理好所有顯示相關消息之后。這里,通過消息循環機制,給它發送一個額外消息,那么可以保障,觸發你的任務的時機,是在窗體處理完原有消息之后。
當然了,在vcl中,并不是這么簡單就能處理所有問題。最主要的是那些標準windows窗體,比如messagebox,opendialog。這些窗體不是由tform組合而成的。所以對象和消息機制都不一樣。需要單獨處理。