0

Anwser のベース変数を削除する方法...このすべてのコンポーネントがあり、メインフォームから button1.click のようなアクションを作成すると、うまく機能することを受け入れました...

しかし、私はユニットからアクションを作成するために使用します...だから

ボタンをクリックすると、手順 DoMaths(Sender: TObject); が素晴らしいです。

procedure Tform1.DoMaths(Sender: TObject);
  begin
    if TButton1(Sender).hint := 'Make the standard Package' then
      do_Maths_standard_package;
  end;

do_Maths_standard_package はユニット ComplexMaths にあります。

プロシージャ do_Maths_standard_package フォーム ユニット ComplexMaths は Form1 からいくつかのコンポーネントを呼び出します... Form1.label1 などのように...

したがって、RegisterClass(TLabel) を呼び出して、型から Tlabel を消去すると、Label1 が見つからないというエラーが表示されます...

最初からホールプログラムをしないように、誰か助けてください...

ありがとうございました..

4

2 に答える 2

0

次のようにコンポーネントを参照できる場合があります。

TLabel(Form1.FindComponent('Label1')).Caption := '...';
TCheckBox(Form1.FindComponent('CheckBox12')).Checked := False;

しかし、それは本当に苦痛です...

于 2012-09-01T13:29:43.247 に答える
0

あなたには2つの選択肢があると思います。

1) 各コンポーネントに一意の数値 ID を割り当てることができます。.Tag プロパティに保存します。.HelpContext プロパティで ID を生成してバインドするために使用するのと同じように。

次に、番号でコントロールを取得するには、Form.Controls を列挙し、適切なタグ値を持つコントロールを取得します。

問題は、PAS ファイルと DFM ファイルの 2 つの個別の ID リストを同期させることです。タイプミスは気づきにくいでしょう。特に、DFM には定数がなく、「マジック ナンバー」しかないためです。

2) .Name プロパティを設定し、iMan Biglari のレシピ (FindComponent by name) を使用します。問題は、変数ではなく .Name を使用できるかどうかです。誰も答えないので、試してみてください。私の経験では、Delphi 5 では、うまくいけば D7 はほとんど同じです。変数を削除するだけです。

  • 変数の宣言が間違っていた場合、Delphi エディタはそれを認識して修正するように求めます。
  • DFM オブジェクトのない変数がある場合、Delphi はそれに気づき、それを削除するように要求します。
  • しかし、対応する変数のない DFM オブジェクトがある場合、Delphi エディタは無視します。オブジェクトが継承されていると考えているのかもしれません。しかし、あなたがそれをまったく宣言しなくてもかまいません。

ただし、Names を削除したため、何らかの理由でそれができないようです。


どちらの場合でも、プロシージャがコントロールに多くのアクセスを行う場合は、値をキャッシュする必要があります。そして、おそらく手順全体でさえ。実際、yu は、少なくともほとんどの使用されているコントロールについて、これらの変数を手動で復元します。

于 2012-09-04T11:58:06.523 に答える