2017-04-10 101 views
1

我有一個事件過程,它檢查兩個對象/控件的OnKeyUp按鍵(TNewEditTNewComboBox)。在啓用TNewButton之前,兩個對象都需要完成。Inno Setup在事件處理程序中獲取TObject類型/類

但是,我找不到一種方法來知道如何獲得Sender: TObject的類型,如果是TNewEditTNewComboBox

任何人都可以幫忙嗎?

+0

你有什麼需要了解的類型? –

+0

向我們展示一些代碼! –

回答

1

你不需要知道任何類型/類。

這樣的需求是一個糟糕的設計的標誌。


如果每個類型/類的事件處理不同,請爲每個類型/類創建一個單獨的處理程序。

如果部分處理通用,請從特定處理程序中調用通用處理程序。

var 
    Edit: TNewEdit; 
    ComboBox: TNewComboBox; 

procedure CommonKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); 
begin 
    Log('Common handling'); 
end; 

procedure EditKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); 
begin 
    Log('Edit key up'); 
    CommonKeyUp(Sender, Key, Shift); 
end; 

procedure ComboBoxKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); 
begin 
    Log('Combo box key up'); 
    CommonKeyUp(Sender, Key, Shift); 
end; 

procedure InitializeWizard(); 
begin 
    { ... } 

    Edit.OnKeyUp := @EditKeyUp; 
    Combobox.OnKeyUp := @ComboBoxKeyUp; 
end; 

雖然你實際上有兩個控件,你可能要區分,什麼控件引發的事件。

這就是Sender參數的用途。以下代碼顯示如何使用它。但總的來說,這不是正確的路要走。

var 
    Edit: TNewEdit; 
    ComboBox: TNewComboBox; 

procedure ControlKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); 
begin 
    if Sender = Edit then 
    begin 
    Log('Edit key up'); 
    end 
    else 
    if Sender = ComboBox then 
    begin 
    Log('Combo box key up'); 
    end 
    else 
    begin 
    Log('Other key up'); 
    end; 
end; 

procedure InitializeWizard(); 
begin 
    { ... } 

    Edit.OnKeyUp := @ControlKeyUp; 
    Combobox.OnKeyUp := @ControlKeyUp; 
end; 

雖然我還是不明白,你需要這個。

你必須每次檢查兩個控件,那麼爲什麼你需要知道,是什麼控制,是一個改變?

此外,要檢測到更改,請不要使用OnKeyUp,請使用OnChange。通過這種方式,您可以捕獲所有更改(按鍵,拖動&拖放,複製&粘貼,任何內容)。

var 
    Edit: TNewEdit; 
    ComboBox: TNewComboBox; 
    Button: TNewButton; 

procedure ControlChange(Sender: TObject); 
begin 
    Button.Enabled := (Edit.Text <> '') and (ComboBox.Text <> ''); 
end; 

procedure InitializeWizard(); 
begin 
    { ... } 

    Edit.OnChange := @ControlChange; 
    Combobox.OnChange := @ControlChange; 
end; 
+1

非常感謝,這真的有幫助! –

相關問題