問題タブ [otapi]
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 - 設計時にカスタム TComponentEditor から ActionList エディタを表示する方法
いくつかのカスタマイズされたオプションを提供するために TActionList に登録する TComponentEditor の子孫があります。
D2007 では、ユニット ActnEdit から ShowActionListDesigner を呼び出して、デフォルトの ActionList エディターを表示できました。必要なパッケージに designide.dcp を追加するだけで済みました。
XE5 では、vcldesigner.dcp などの他のパッケージを試しましたが、どのパッケージに ActnEdt が含まれているかがわかりません。奇妙なことに、FMXReg.pa 内で使用されます。
標準の TActionList エディタ ウィンドウを呼び出す別の方法はありますか?
delphi - ToolsApi を使用してキー バインディング Shift+Ctrl+HX を Delphi IDE に追加するにはどうすればよいですか?
Delphi IDE に新しいショートカットを追加することは、Open Tools API がこのためのサービスを提供するため、それほど難しくありません。私は明らかにもっと複雑なことをしようとしています:追加のショートカットのようなワードスターを追加します:
ユーザーが押したときに何かを起こしたい
Shift+Ctrl+H に続いて単一キー X
Shiftキーの状態に関係なく、Xは機能するはずです。
これは私のコードです:
したがって、 ShiftState := [ssCtrl] を押すと
Ctrl+HX
私の TwoKeyBindingHandler メソッドを呼び出します。
しかし ShiftState := [ssShift, ssCtrl] を押すと
Shift+Ctrl+HX
何もしません。
奇妙なことに、 ShiftState := [ssShift, ssCtrl] (最初のキーにのみ影響するはずです) を指定すると、
Shift+Ctrl+H Shift+X
修飾キーなしで 2 番目の ShortCut が追加されても、TwoKeyBindingHandler メソッドを呼び出します。
何か案が?これは、Delphi IDE/Open Tools API の既知の制限/バグでしょうか? 既知の回避策はありますか?
Delphi 2007 と Delphi 10 Seattle で試してみましたが、違いはありませんでした。
delphi - Delphi OTAPI AddMenuCreatorNotifier は廃止されました。代替品は何ですか?
IOTAProjectManagerを使用して、Delphi IDE でプロジェクト メニューを拡張する方法に関する CodeCentral の記事に従っています。
code-central のサンプル ウィザード コードはこれを行います。
プロジェクトメニューのようなコンテキストメニューを登録する新手法とは?これは docwiki に載せることさえせずに廃止されたことに注意してください。
望ましい結果のスクリーンショット:
更新: コードを含む最新のチュートリアルが見つかりませんでした。Embarcadero の Web サイトには PDF ホワイトペーパーがありますが、Bruno Fierens によるそのホワイトペーパーのコード サンプルは Web 上のどこにもありません。bitbucket にある実際の例を使用して、以下の回答を作成しました。以下の zip をダウンロードできます。
delphi - OTA を使用して特定のプラットフォームのライブラリ パスを返す
特定のプラットフォーム (win32、win64、OSx) のライブラリ パスを取得したい。しかし、ライブラリ パスを要求すると、OTA は OSx ライブラリ パスを返すだけです。
コードは次のとおりです。
私は奇妙なことに気づきました。キー値を要求すると、3 つの LibraryPath が返されます。
私がする時:
私は得る:
各キーは、私が持っている可能性のあるターゲット (win32、win64、OSx) の 1 つを表す必要があると思います。しかし、キーの名前の値を呼び出すことができるので、常に最初に見つかったキーを返します。私の場合は OS X です。