0

私は Delphi 7 のプロジェクトに取り組んでいますが、言語やランタイムにあまり詳しくありません。フォームが表示されて描画されるなどの問題をデバッグしようとしていますが、何らかの理由で OnShow イベントが呼び出されません。これはどのような場合に起こりますか?正確にどこを見ればいいですか?

4

5 に答える 5

4

私にとって理にかなっている唯一の説明は、OnShow イベントがハンドラーに正しく接続されていないということです。Object Inspector または .dfm フォームをチェックインします。コードで接続している場合は、十分に早い段階で接続するようにしてください。

于 2011-09-21T22:52:13.937 に答える
1

ここでチェックする必要があります

最初の OnShow() を宣言する必要があります。

type
  TForm2 = class(TForm)
    procedure FormShow(Sender: TObject); // <--- IM HERE!
  private
    { Private declarations }
  public
    { Public declarations }
  end;

第二に...

implementation

{$R *.dfm}

procedure TForm2.FormShow(Sender: TObject); <--- IM HERE!
begin
 //this time will trigger
end;

最後に、FormShow イベントの Dfm ルックを開く必要があります。

object Form2: TForm2
  Left = 0
  Top = 0
  Caption = 'Form2'
  ClientHeight = 284
  ClientWidth = 418
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  OnShow = FormShow      <--- IM HERE! without this it will not trigger the OnFormShow
  PixelsPerInch = 96
  TextHeight = 13
end

それでもうまくいかない場合は、他の関数名 OnShow = FormStart またはこれまでの関数名を参照している可能性があります。

于 2011-09-23T01:05:42.087 に答える
1

OnShow イベントが呼び出されない場合、フォームが表示される場合にもう 1 つの可能性があります

ShowWindow(Form.Handle, SW_SHOW);   

過去にプロジェクトを調べているときにそのようなことを見ましたが、それは Delphi にとって本当に悪い考えです。

于 2011-09-22T09:06:01.957 に答える
0

フォームがロードされたときに何かを行いたい場合、およびすべてのコンポーネントが初期化されていることを確認したい場合は、loaded を使用できます。

protected
   procedure Loaded; override;

フォームの作成中に呼び出されます。

OnActivate で発生する可能性のあるフォームの構築に時間がかかることなく、フォームが初期化されてポップアップするという追加の利点があります。

于 2011-09-23T07:51:07.887 に答える
0

オブジェクトインスペクターを使用して設定された OnShow ハンドラーが呼び出されなかったときに同様の問題が発生しました。プログラムの実行中に別のハンドラーが割り当てられ、設定が上書きされていることがわかりました。そのため、コードで OnShow への割り当ての可能性を探すこともできます。

于 2011-11-21T11:13:08.327 に答える