問題タブ [delphi-2007]
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 - Delphiのフォーム上の多くのコントロールのコントロールタイプ(名前ではない)を切り替える
フォーム上の特定のタイプのすべてのコントロールを、各コントロールに関連付けられた名前とコードを維持しながら、別のタイプに切り替える必要があります。
たとえば、1ダース以上のTEditフィールドをTSpinEditsに切り替える必要があるとします。最小限の労力でDelphi2007でそれを行うにはどうすればよいですか?
delphi - ポップアップ メニューの無効なメニュー項目にツールヒント ヒントを表示する
したがって、TDBGrid の TPopupMenu の TAction に TMenuItem がアタッチされています (実際にはサード パーティですが、アイデアはわかります)。グリッドで選択した行に基づいて、TAction が有効または無効になります。私が欲しいのは、アイテムが無効になっている理由を説明するヒントをユーザーに表示できるようにすることです。
無効なメニュー項目に関するヒントが必要な理由については、 Joel に同意しているとだけ言っておきましょう。
すべての TMenuItem にはヒント プロパティがありますが、TApplicationEvent.OnHint イベント ハンドラを使用してヒントを TStatusBar またはその他の特別な処理に貼り付けるだけであることがわかります。TMainMenu の TMenuItem 用に独自の偶数ウィンドウを作成する方法に関する記事を見つけましたが、TPopupMenu の TMenuItem では機能しません。これは WM_MENUSELECT メッセージを処理することで機能しますが、これは私が知る限り TPopupMenu では送信されません。
delphi - Delphi - TStringGrid で垂直スクロール バーを常に表示するように設定する方法
Win32 用の Delphi 2007 を使用しており、TstringGrid で垂直スクロールバーを常に表示するように設定する必要があります。どうやってそれをしますか?
multithreading - OnTimerイベントから親フォームの変数にアクセスする-例外を取得する
OnTimerイベントハンドラー(TTimer)で例外が発生し、実行すると親フォームの整数変数がインクリメントされます。タイマーは、IDとして使用される増分整数にアクセスできる必要があります。
私の最初の質問は、Delphi 2007で、どのコードがどのスレッドで実行されているかをどのように判断できるかということです。デバッグモードでこれを検査して確実に判断できるようにする方法はありますか?
次に、別のスレッドから親フォームの変数にアクセスして変更する必要がある場合、それを行うための最良の方法は何ですか?Delphiでは、例外を発生させずにこれらの変数に「誤って」アクセスできる場合もあれば、例外を発生させる場合もあるようです。
multithreading - Delphiでのマルチスレッドデバッグの改善
Delphi IDEのバグに関する別の質問への回答から先に進んで、IDEのマルチスレッドデバッグ機能を改善する方法があるかどうか、またはそうでない場合は、少なくとも時々それがそれほど悪い理由を知っている人はいますか?
プログラム内に複数のスレッドがある場合、F7またはF8を使用してコードをステップ実行すると、非常に長い一時停止が発生するか、IDE全体がロックアップする可能性があります。これは、メソッドまたはプロシージャを終了または入力するときに特に顕著です。デバッガーは、シングルスレッドアプリケーションには常に問題ないようです。
PS。私が使用しているバージョンは2007年です
delphi - Delphi インターフェイスはサブクラスで継承されますか
基本クラスにインターフェイスを実装すると、そのサブクラスに継承されます。関数/手順が継承されることはわかっていますが、サブクラスをインターフェイスにキャストしてからそのインターフェイスに戻すことができるかどうかにもっと興味がありますオリジナルクラス。
私ができることを望んでいるのは、さまざまな基本クラスのオブジェクトを関数に渡し、関数で型を決定し、必要に応じて使用することです。
これは可能ですか、それは正しいアプローチですか?
アップデート
混乱を解消する(またはさらに作成する)ために、ここで私がやりたいことを示します(その核心にストライプ化します)。
インターフェース
基本クラス
サブクラス
別のクラス
それでは使い方
更新 2
私はコードを少し更新したので、私がより良いものを示しています。
//code hereのセクションは、渡されるオブジェクトとはほとんど関係がありません。たとえば、このクラスが TAccounts で、TEmployee オブジェクトが渡された場合、毎週の支払いが行われる可能性がありますが、TInvoice の場合はチェックされます。支払いが必要かどうかを確認し、日付が締め切りの 2 日前になったときにのみ支払います。
TEmployee/TInvoice は、支払いを要求する外部クラスから来ることさえあります。
これはほんの一例です。
delphi - MS Access テーブルに 800000 レコードを挿入するにはどうすればよいですか?
MS Access テーブルに 800000 レコードを挿入する必要があります。Delphi 2007 とそのTAdoXxxx
コンポーネントを使用しています。テーブルには、いくつかの整数フィールド、1 つの浮動小数点フィールド、および 1 つの文字のみを含む 1 つのテキスト フィールドが含まれています。整数フィールド (autoinc ではない) の 1 つに主キーがあり、別の整数フィールドと float フィールドに 2 つのインデックスがあります。
を使用したデータの挿入にはAdoTable.AppendRecord(...)
10 分以上かかります。これは、ユーザーがプログラムで新しいデータベースの使用を開始するたびに行われるため、許容できません。データが別のデータベース ( からはアクセスできないADO
) から取得されているため、テーブルを事前入力できません。
tAdoCommand
レコードをタブ区切りのテキスト ファイルに書き込み、オブジェクトを使用して実行することで、約 1 分に短縮できました。
しかし、私はこれのオーバーヘッドが好きではありません。
もっと良い方法があるに違いない、と私は思う。
編集:
いくつかの追加情報:
- MS Access を選択した理由は、ターゲット マシンに追加インストールする必要がなく、データベース全体が簡単にコピーできる 1 つのファイルに含まれているためです。
- これはシングル ユーザー アプリケーションです。
- データは一度だけ挿入され、データベースの存続期間中は変更されません。ただし、テーブルには、別のデータベースの対応するレコードがユーザーによって処理されたことを示すフラグとして使用される 1 つの追加フィールドが含まれています。
- 1 分(最大 3 分も) で問題ありませんが、私のソリューションは機能しますが、複雑すぎるように思われるので、もっと簡単な方法があるはずだと考えました。
- データが挿入されると、テーブルのパフォーマンスは非常に良好です。
- Access データベースを操作するプログラムの機能の計画/実装を開始したとき、テーブルは必要ありませんでした。それが必要になったのは、顧客から別の機能が要求されたときだけでした。(いつもそうじゃない?)
編集:
これまでに得たすべての回答から、Access テーブルに大量のデータを挿入するための最速の方法を既に理解しているようです。皆さんのおかげで、私はあなたの助けに感謝します.
delphi - コマンドラインからのDelphiMSBuildビルド構成
Delphi2009はビルド構成を使用します。新しいプロジェクトを作成する場合、2つのデフォルトのビルド構成「デバッグ」と「リリース」があります。
ここで、MSBuild(バージョン2007以降Delphiでサポートされている)を使用してビルドを自動化する方法を自問しました。
Delphiプロジェクトディレクトリの「RADStudioコマンドプロンプト」で「msbuild」コマンドを開始すると、デフォルトのビルド構成(Delphi IDE内で最後にアクティブ化されたビルド構成)がビルドされます。
ここで、コマンドラインパラメーターによって特定の(デフォルト以外の)ビルド構成を指定したいと思います。
Delphiヘルプは、パラメータが[/ p:configuration = <configuration name
>]であると主張しますが、これは間違っています(Delphi 2009、ヘルプアップデート1)。
正しい方法は何ですか?