2012-06-08 11 views
12

Ana formun tam olarak en üst düzeye çıkarıldığından emin olmak için önerilen yol nedir ve uygulama ilk yüklemede kalıcı bir form göstermeden önce tüm denetimler yeniden çizilmelidir?Ana formun uygulama formunda kalıcı bir form göstermeden önce ana formun en üst düzeye çıkarıldığından ve tam olarak yeniden çizildiğinden emin olmak için doğru yol

Uygulama başladığında kalıcı bir iletişim kutusu göstermem gerekiyor (oturum açma ekranı değil) ancak ekranı en üst düzeye çıkarırken wsMaximized olarak ayarladıysam, denetimlerin yeniden çizilme şansı kalmaz ve çirkin bir karmaşa ile ayrılırsınız .

aşağıdaki kullanarak şu anda kalıcı ekran gösterir:

procedure TForm1.FormActivate(Sender: TObject); 
var 
    frmOrderLookup:TfrmOrderLookup; 
begin 
    onactivate := nil; 
    frmOrderLookup:=TfrmOrderLookup.Create(nil); 
    try 
    frmOrderLookup.showmodal; 
    finally 
    frmOrderLookup.Free; 
    end; 
end; 

cevap

14

Ne normalde geri forma özel bir ileti göndermek olduğunu. Bu şekilde, form için diğer iletiler zaten ele alınana kadar işlenmeyecektir. Bu mesaj işlendiğinde, formunuz yeniden çizmeyi tamamlamış olmalıdır.

type 
    TMyForm = class(TForm) 
    procedure FormCreate(Sender: TObject); 
    private 
    procedure HandleLookupMessage(var Message: TMessage); message WM_USER + 1; 
    end; 

procedure TMyForm.HandleLookupMessage(var Message: TMessage); 
var 
    frmOrderLookup: TfrmOrderLookup; 
begin 
    frmOrderLookup := TfrmOrderLookup.Create(Application); 
    try 
    frmOrderLookup.ShowModal; 
    finally 
    frmOrderLookup.Release; 
    end; 
end; 

procedure TMyForm.FormCreate(Sender: TObject); 
begin 
    // Maximise form here if needed 
    PostMessage(Handle, WM_USER + 1, 0, 0); 
end; 

ileti yine her nasılsa uygulamanıza alma hakkında endişeleniyorsanız

, her zaman bir kez halledildi belirten özel boolean değişken ekleyebilir.

+1

+1. Mesajı 'OnShow' yerine gönderirseniz, işlem daha sonra işlenir; Bu çok yakında gönderilme şansını ortadan kaldırır. (Ve bunun yerine FormCreate' değil mi? 'OnCreate', mülkün kendisinin adıdır.) –

+0

@Ken: Düzeltme için teşekkürler. 'OnShow' kullanma gelince, formun oluşturulacağını, gösterileceğini, daha sonra 'Application.Run' mesaj kuyruğunu pompalamaya başlamadan önce etkinleştireceğini düşünüyorum, bu yüzden çok da önemli değil. Diğer formlar ve veri modülleri de ilk olarak oluşturulmakta (ve OnCreate' olaylarını tetiklemiş durumda). Bu deyim, henüz OnCreate'dan kullanıldığında uygulamada başarısız oldu. – afrazier

+0

Yardımınız için teşekkür ederiz - @SteBaite önerisine yönelik +1'den @KenWhite de –

İlgili konular