2012-10-18 16 views
8

Ben bile (non-modal ve kalmak-on-top) uygulamasını kullanırken her zaman erişilebilir olmalıdır (uygulama ile çalışırken not almak için kullanılabilecek bir iletişim düşünün) bir yardımcı iletişim var Bir kalıcı iletişim kutusu görüntülenir.Başka bir form gösterildiğinde devre dışı olmayan bir form nasıl hazırlanabilir?

başvurunun geri kalan değiştirilemez.

Mümkün mü? Bunun için nasıl gidebilirim? ShowModal çağrıldığında

+0

Windows'ta 'Modalite' gerçekten bir PITA olabilir. (Düşündüğüm en kötü örnek, başka bir Word penceresinin kalıcı bir iletişim kutusunun açık olması durumunda, bir Word belgesini açamadığınız (örneğin, bir .docx dosyasını çift tıklatarak) Microsoft Word 2010 olabilir.) farklı bir uygulamanın parçası? –

+0

@Andreas Rejbrand: Bunu ayrı bir uygulama yapmayı düşündüm ama uygulama içi (bazı yakalama/tekrarlama mekanizması için) uygulamalara erişmem gerekiyor. – jpfollenius

+0

İki uygulama arasındaki iletişim için adlandırılmış yöneltmeler kullanmak oldukça kolaydır. İyi bir başlangıç ​​için [cromis-ipc] 'ye bakın (http://www.cromis.net/blog/downloads/cromis-ipc/). –

cevap

15

, tüm varolan üst düzey pencere devre dışı kalır. Modalitenin çalışması bu şekilde. Etkileşimin makul olduğu bir pencereniz varsa, tekrar etkinleştirmeniz gerekir.

Örneğin, size yarar penceresine bu ekleyebilirsiniz: Bu yardımcı program penceresi devre dışı asla emin olacaktır

type 
    TMyUtilityForm = class(TForm) 
    protected 
    procedure WMEnable(var Message: TWMEnable); message WM_ENABLE; 
    end; 
.... 
procedure TMyUtilityForm.WMEnable(var Message: TWMEnable); 
begin 
    if not Message.Enabled then 
    EnableWindow(Handle, True); 
    inherited; 
end; 

.

+2

+1. David her zaman işlerin nasıl yürüdüğünü bilir! :) –

+1

@AndreasRejbrand Bunu söylemekten çok hoş ve sadece gerçek olduğunu söyleyebilirim! ;-) –

+0

Bir "WM_ENABLE" işleyicisi ve devralınan çağrıdan önce "EanbleWindow()") için bir çağrı kullanırdım. Daha doğal görünecekti. –

İlgili konular