問題タブ [toolsapi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - IDE でエディターの変更や行位置の変更を追跡するにはどうすればよいですか?
特定の行を追跡する IDE プラグインを作成しています。これは、IDE に組み込まれているブックマーク機能に似ていると考えてください。ユーザーがソース コードを編集すると、特定の行の位置が変更されます。たとえば、行 100 であったものが、その上のどこかで Enter キーを押すと、行 101 になります。ユーザーは、行を削除したり、一度に複数のチャンクを選択して削除したり、テキストの大きなチャンクを貼り付けたりすることもできます。これらはすべてコードをシフトします。
「100行目」が「101行目」、「102行目」などになることを知るために、行の挿入と削除を追跡したいと思います。これはどのように可能ですか?
これまでに見つけた最も近い解決策はINTAEditServicesNotifier.EditorViewModified
、変更が行われるたびにバッファ全体にアクセスできるようにすることです。次に、バッファー全体を前のバッファーの保存されたコピーと比較して、どのような変更があるかを確認し、追加または削除された改行の数と場所を確認できます。
これはエディターの変更ごとに膨大な量のオーバーヘッドであり、より良い方法があるはずです。
delphi - コード エディターでコードの折りたたみを追跡するにはどうすればよいですか?
特定の行をマークするプラグインを作成しており、コード エディターで特定の行のハイライト マーカーをペイントしようとしています。これを行うには、特定のコード行、つまりバッファー内の行の画面上の位置を計算する必要があります。
Delphi コード エディタは、 およびプロパティIOTAEditView
を介して、画面上に表示される行にアクセスできます。ただし、新しい IDE バージョンでは、コード領域とメソッドを折りたたむことができます。つまり、複数の行を 1 つに折りたたむことができます。行ハイライト ペインティングの最初のステップは、どの行が表示され、どこにあるかを知ることです。これを行うには、エディターのどの部分が折りたたまれていて、どの部分が折りたたまれていないかを追跡する必要がある場合があります。コードの折りたたみ (省略) を呼び出す OTAPI メソッドがあるようですが、それがいつ発生するかはわかりません。BottomRow
TopRow
ただし、Castalia などの一部のプラグインはこれを管理します。どうすればそれができますか?
delphi - as 演算子が通常の EIntfCastError ではなく厄介な EAccessViolation をスローするのはなぜですか?
非常に実験的で不安定な IDE アドインを作成しましたが、これは IDE のシャットダウン時に非常に厄介な A/V を引き起こします (最近のプロジェクトの機能が壊れます、grr!)。最終的に特定のデストラクタに絞り込みました。
で A/V 例外が発生しましたread of address 0x00000008
。
問題のあるステートメントにさらに防御を追加しました。
nil
...そして、(1)ポインターがまだ機能していない(2)QueryInterface
まだ機能している(3)目的のインターフェイスが存在しないことを理解しました。すべてが正常に見えることを考えると、フレンドリーであることを期待していますEIntfCastError
。しかし、なぜ代わりに A/V を持っているのでしょうか?
delphi - Delphi IDE でモジュール ウィンドウが開いていることを検出するにはどうすればよいですか?
Delphi プラグインを作成していますが、モジュール (表示 - デバッグ ウィンドウ - モジュール) ウィンドウが開いている (IDE エディタに接続されている) ことを検出する必要があります。新しいエディタ ウィンドウが開いたときに通知を受け取るために IOTAEditorNotifier を使用していますが、ソース ファイルに対してのみ機能します。
これは、IDE エディタから通知を受け取るために使用されるコードです。
モジュール ウィンドウが Delphi IDE エディタで開いていることを検出するにはどうすればよいですか?
delphi - Delphi IDE ステータス バーに何かを書き込んで表示する方法
Borland Delphi 7 IDE のステータス バーに時計などを表示するモジュールを作成する方法を知りたいです。
delphi - Delphiコールスタックウィンドウで「非ユーザー」スタックフレームを非表示にする方法は?
Delphi コール スタックで、ソース コードがなく、それに応じてこれらの青い点でマークされていないスタック フレームを非表示にする/折りたたむことは可能ですか?
参考までに、Visual Studio はこれを行うことができます。
マネージ コードでは、既定で。コール スタック ウィンドウは、非ユーザー コードの情報を非表示にします。非表示の情報の代わりに、次の表記が表示されます。
【<外部コード>】
http://msdn.microsoft.com/en-us/library/a3694ts5.aspx
ソリューションが Delphi XE2 で動作する場合は素晴らしいでしょう。
アップデート
サードパーティの専門家の場合もあれば、ToolsAPI を使用したコードの場合もあります。
delphi - Delphi IDE でのドッキング可能なフォーム レイアウトの保持に関する問題
Delphi 用の小さな IDE 拡張機能を作成しました。私のフォームは TDockableToolbarForm から派生しています。IDE でフォームの位置を .dst および .dsk ファイルに保存する方法を理解しました。
フォームの登録は次のようになります。
次の OnCreate ハンドラーをフォームに追加しました。
これにより、以下が dst/dsk ファイルに書き込まれました。
これにより、フォームのレイアウトが IDE の実行と次の実行の間で保持されます。ただし、次の 2 つの問題があります。
- パッケージが最初に IDE に登録されたとき、フォームをデフォルトで左側にドッキングしたいと思います (ユーザーが「Classic Undocked」レイアウトを使用していないと仮定します)。現在は、ドッキングされていないフォームを表示しているだけです。
- パッケージをアンインストール/再インストールすると、フォームは以前に保存されたレイアウト設定を使用していません。再びドッキングされていないように見えます。
どちらの問題もステップを逃したことが原因であると思われますが、そのステップが何であるかについては途方に暮れています。
最初の問題については、TControl.ManualDock
ドッキングに関する議論で頻繁に言及されていましたが、それは常にソースにアクセスできるアプリケーションに関するものでした。IDE から必要なパラメーターを取得して呼び出す方法がわかりません。
2番目の問題について私が確かに知っている唯一のことは、パッケージがアンインストールされた後もdstファイルの設定がまだ存在していることです。そのため、既存の設定を使用してパッケージを再インストールするのは簡単だと思いますが、そうではないようです場合。
forms - 関連する .Pas ファイルを閉じずに、IDE が開いているフォームを (コードで) 閉じる方法
以下のコードは、D7 の設計時の .BPL で行っていることを簡略化したものです。
更新:これを投稿してから、私が求めていることを行う 1 つの方法を見つけました。つまり、フォームに WM_Close メッセージを送信するだけですが、もっと「公式な」方法があるかどうかを知りたいと思っています。 WM_Close を使用すると、IDE の足元が間違っている可能性があるように思われるためです。
このコードで問題を引き起こしているのは、IDE で開いているすべてのファイルを閉じてから、.Dfm ファイルが関連付けられている特定の .Pas ファイルを開くことだけです。.Dfm で定義されたフォームを画面上で開いたくないので、.Pas ファイルも閉じずにフォームを閉じようとしています。IDE フォーム デザイナーとこのフォームを邪魔にならないようにしたいだけです。 .
最終的に、私は .BPL のコードで OTA + NTA サービスを介してフォームにアクセスする方法を見つけました。単純に、しかしそれを行う他の明らかな方法が欲しかったので、このスニペットで .Close を呼び出してみました。
ただし、フォームは閉じません。CPU ウィンドウから TCustomForm.Close をトレースしましたが、明らかに閉じない理由は、Visible プロパティが既に False になっているためです。これは、AForm.Close の前に Visible を評価しても返されるものです。
AForm.Close の前に他のさまざまなプロパティを評価すると、所有者は Nil ですが、明らかに有効なウィンドウ ハンドルを持っていることがわかります。[ペニーが落ちる音...上記の更新を参照]
これは、IDE のフォーム デザイナの動作に関係していると言えます。
私の質問は単純です: フレームの [x] ボタンをクリックしたときのように、フォームを閉じるにはコードで何をする必要がありますか?
ところで、AForm := [...] を介して取得しているフォームのインスタンスが、OI で画面上のインスタンスのキャプションを変更することにより、画面上のインスタンスであることを確認しました。
delphi - ソースをフォーマットするときにコードの折りたたみを保持する方法
次の質問も参照してください:コード フォーマッタを呼び出すときに、折りたたまれた領域を展開しないようにするにはどうすればよいですか?
ToolsApi を使用して問題を解決することに興味があるので、これはだまされません。
CTRL+を押すとD、コードがうまくフォーマットされます(ほとんど)。
しかし、折りたたまれたコード セクションはすべて展開されます。
これらのセクションを折りたたんだままにする方法はありますか。
そうでない場合、フォーマットする前にコードの折りたたみ情報を保存して、後で復元できるようにすることはできますか?
Open Tools api を使用して IDE アドインを作成することを考えています。
XE7 を使用していますが、この問題はソース形式のすべてのバージョンに存在します。
考えられるシナリオは次のとおりです。
- コードの折りたたみ (フック
elide
呼び出し) を記録して再生します。 - 現在のブロックでのみ書式設定を許可します ( CTRL+Dアクションを再定義します)。