1

私は自分のユニットで広く使用{$Regions}していますが、VCL エディターが煩わしい決定を下してすべてのリージョンを自動的に展開することがあります。ボタンをクリックして明示的にこれを行わない限り、折りたたまれた領域を展開しないようにエディターに指示する方法はあり+ますか?


コメントからの更新:

展開が起こり、

  1. ネストされた procs/funcs を使用。新しいネストされた「プロシージャ」ヘッダーの導入。「p」文字を入力するとすぐに、ネストされた他のすべてのプロシージャ/関数が展開されます。これは、たとえば、ネストされた proc/func (またはそのようなもの) の「終了」を誤って削除した場合にも発生します。
  2. 地域と。「{」でコメントを開始すると、すぐ下のリージョンが展開されます。コメントを「(*」で始めると、下にあるすべてのリージョンが展開され、それらのリージョンの下にあるすべての proc/func に同じことが適用されます。
4

1 に答える 1

1

残念ながら、これは、Delphi XE 以降に存在する Delphi whis の問題の 1 つであり、古いバージョンからではなく、まだ修正されていません。

コードが自動的に展開される理由は、エラー インサイト システムがユニット内の構文エラーを検出するとすぐに、そのポイントより下のすべてのコードを無効として扱い、そのポイントより下のすべての折りたたまれたコードを展開するためです。

これを回避する唯一の方法は、エラー インサイトを無効にすることです。ただし、これは、プログラムをコンパイルしようとするまで、潜在的な構文エラーについて警告されないことを意味します。

しかし、Embarcadero がすぐにこれを修正してくれることを切に願っています。エラー インサイトを無効にしない限り、コード フォールディング システム全体が役に立たなくなるからです。新しいコードを書くよりも、自動展開されたコードを再度フォールディングすることに時間を費やす必要があります。

編集:これを再現する手順(再現する1つの方法)

新しいアプリケーションを作成

フォームの OnCreate と OnClose の 2 つの新しいイベント ハンドラー、または他の 2 つのメソッドを作成します。

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  //
end;

偶数ハンドラーを作成した場合は、オプティマイザーが「空の」イベントハンドラーを自動的に削除しないように、最低のハンドラーメソッドまたは少なくとも 1 つのコメント行に少なくともいくつかのコードがあることを確認してください。

上部のイベント ハンドラに「フォーム」と記述します。下部のイベント ハンドラーがどのように自動的に展開されるかがわかります。

この時点で、delphi desent は、構文エラーが検出された現在のメソッド コード ブロックがいつ、どこで終了するかを知っていることがわかります。また、これにより、そのポイントより下のコード ブロックを適切に検出することができなくなります。

于 2014-10-17T21:38:57.557 に答える