2016-11-11 13 views
-2

フォームがビジー状態またはアイドル状態であることを示す有効/無効コントロール付きのフォームがあります。 いくつかのプロセスを中止するために無効になっていたときに、1つのコントロール(ボタンなどが可能でした)だけを有効にする必要があります。ボタンのキャプションを「ABORT」に変更します。コントロールのキャプションを見つけて状態を変更します。

ボタンAをクリックすると、ボタンAのキャプションが「ABORT」に変更されます。他のすべてのコントロールは無効になりますが、キャプション 'ABORT'のボタンが有効になっています。

procedure F1.FormBusy (sender); 
var 
    a: Integer; 
begin 
    for a := 0 to TabSheet1.ControlCount - 1 do 
    begin 
    TabSheet1.Controls[a].Enabled := False; 
    (* if TabSheet1.Controls[a] caption := 'ABORT' then 
     TabSheet1.Controls[a].Enabled := True 
     < how to do this ? *) 
    end; 
end; 

使用例:

procedure F1.LB1Click(sender: TObject); 
begin 
    FormBusy(sender); 
    try 
    // do something 
    finally 
    FormIdle(sender); 
    end; 
end; 
+0

@TomBrunberg「TComboBox」のクリックを何度か使用します。 – Bianca

+1

なぜコントロールリファレンスを直接使用しないのですか –

+0

@DavidHeffernanそれは@Owenの回答のようですか?はい、これは私には新しいものです。それは良い仕事です。しかし、 'formbusy'と' formdile'のような単純な方法はありますか? – Bianca

答えて

5

よりもむしろCaptionプロパティによってボタンを見つけようと、なぜ配列から直接アクセスできませんか?

for a := 0 to TabSheet1.ControlCount - 1 do 
begin 
    TabSheet1.Controls[a].Enabled := TabSheet1.Controls[a] = Button1; 
end; 

各TControlは、有効になるButton1を除いて無効になります。

+0

私は 'FormBusy(送信者)'と 'FormIdle(送信者)'によって私のフォームビジー/アイドルを管理しています。だから今、私は各ボタンにそのコードを置く必要があります、そうですか? – Bianca

+0

そのコードはFormBusy()メソッドの中に入るので、フォームを "ビジー"状態にすると、 "ABORT"以外のコントロールは無効になります。 「アイドル」状態に戻るときに適切なコントロールを再度有効にするには、FormIdle()メソッドにコードを追加する必要があります。 – Owen

+0

これはうまくいきます、オーウェン。ありがとう。しかし、私は多くのボタンを持っています。 FormBusy()にコードを挿入する方法は? – Bianca

1

あなたは忙しいのパラメータを割り当てるために別の方法を定義することができます。

procedure F1.MAJIHM(const isBusy : Boolean); 
var a: Integer; 
begin 
    for a := 0 to TabSheet1.ControlCount - 1 do 
    begin 
    TabSheet1.Controls[a].Enabled := isBusy; 
    end; 
    btnABORT.enabled := not isBusy; 
end; 

procedure F1.FormBusy (sender); 
begin 
    MAJIHM(True); 
end; 

procedure F1.FormIdle (sender); 
begin 
    MAJIHM(False); 
end; 
0

あなたが言った:

私はAボタンをクリックして、私は 'ABORT' に、ボタンAのキャプションを変更します。すべて 他のコントロールは無効になりますが、キャプション付きのボタンが必要です 'ABORT'は引き続き有効です。

そして、あなたの使用例から、あなたがsenderパラメータとしてそれを参照することができF1.FormBusy()にそのボタンを渡すことは明らかである:あなたは、単にすべてコントロールを有効FormIdle()機能で

procedure F1.FormBusy(sender: TObject); 
var 
    a: Integer; 
begin 
    for a := 0 to TabSheet1.ControlCount - 1 do 
    TabSheet1.Controls[a].Enabled := TabSheet1.Controls[a] = sender; 
end; 

関連する問題