問題タブ [delphi-5]

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.

0 投票する
4 に答える
7155 参照

delphi - DelphiのTFrameでOnDestroyイベントをシミュレートするにはどうすればよいですか?

DelphiでのOnDestroyイベントをシミュレートするにはどうすればよいですか?TFrame


constructor私はうまくフレームにとを追加しましたdestructor、それが何をするのか考えてTFormいます:

これに伴う問題は、デストラクタが実行されるまでに、フレームのコントロールが破棄され、無効になっていることです。

この理由は、OnDestroyイベントを発生させるために使用する包含フォームのデストラクタにあります。

フォームのデストラクタが実行されると、フレームオブジェクトのデストラクタが呼び出されます。これの問題は手遅れだということです。フォームはを呼び出しますDestroyWindowHandle。これは、フォームのウィンドウハンドルを破棄するようにWindowsに要求します。これにより、フレーム上のウィンドウを含むすべての子ウィンドウが再帰的に破棄されます。

そのため、フレームがdestructor実行されると、有効な状態ではなくなったコントロールにアクセスしようとします。


DelphiでのOnDestroyイベントをシミュレートするにはどうすればよいですか?TFrame

も参照してください

0 投票する
6 に答える
7508 参照

delphi - DelphiでMainFormを使用しない方法は?

私は、アプリケーションでいくつかのモードレスフォームをタスクバーに表示しようとしています-Windows7の新しい便利なタスクバーを利用しています。

VCLには多くの問題があり、タスクバーにフォームが存在する前に元に戻す必要があります。

ただし、最後の問題は、VCLがメインフォームに指定したフォームを最小化すると、アプリケーション内のすべてのウィンドウが消えることです。

10年前、PeterBelow(TeamB)はこれらの問題を文書化し、それらを回避しようと試みました。しかし、解決できない問題がいくつかあります。問題はVCL自体の奥深くで発生するため、Delphiアプリケーションを適切に動作させることは事実上不可能です。

これはすべて、ツールバーに表示されるボタンがアプリケーションのウィンドウを表していないという事実に起因しています。TApplicationsそれは隠されていて決して見られない窓を表しています。そして、アプリケーションのがあります。これには、最小化された場合にアプリケーションに非表示にするように指示する特別MainFormな機能が組み込まれています。

できれば

そうすれば、これらのバグはすべてなくなります。アプリケーションは非表示のウィンドウを持つことができ、その間、メインフォームを含むアプリケーション内の他のすべてのフォームを次のようにオーバーライドします。

ただし、Delphiでは、Application.MainFormプロパティは読み取り専用です。

MainFormDelphiでを使用できないのはどうしてですか?

も参照してください

0 投票する
1 に答える
117 参照

delphi - モック: 子供が親と話さないようにするには?

モック所有者を渡してオブジェクトをテストしようとしています。元々は所有者としてPartDa が渡されます:PartB1

PartD今、モックを渡して機能をテストしたいと思いますowner:

PartDこれは、所有者の所有者のいくつかのステータスを知っていることに依存するものがあることを除いて、問題なく動作します。

これにより、モックオブジェクトの問題PartDが発生PartB1する.PartATransactionsCount

で 1 つのメソッドの一部をテストすることにのみ関心があるPartDため、ソフトウェア全体を再設計することにはあまり関心がなく、確実に回帰が導入されるため、2 分間の修正をテストできます。私は修正に2分を費やし、テスト方法を見つけようとして6時間を失いました:

全体を再設計したいと思っていたとしても。をすべての子オブジェクトに渡すのは、TransactionCount変更されるたびに恐ろしい設計のように思えます。他のValidateトランザクションがあるかどうかを知る必要がある 3 人の子供がダウンしている方法は、子供がその親に関する情報を必要とするシステムの唯一のケースではありません。

親オブジェクトがこのすべての情報をすべての子に伝えた場合、必要がないかどうかにかかわらず、無駄であり、どこかで更新が失われる傾向があります。

また、子 - 子 - 子オブジェクトが新しい内部チェックを持つたびに、その周りのすべてのオブジェクトを再設計する必要があります。これにより、それらはすべて、必要な場合と不要な場合がある情報を渡すことができます。

親が望まない子オブジェクトを与えないようにしながら、必要に応じて子供が親と話すのを避けるにはどうすればよいですか?


編集:私がテストするのを待っている変更は次のとおりです。

0 投票する
1 に答える
749 参照

delphi - Delphi:クラスをユニットから移動する方法;循環参照を避ける

質問:循環参照を避けながら、2つのクラスを独自のファイルに分割したいと思います。

私はいくつかのクラス(およびいくつかの列挙と定数)を持つユニットを持っています。誰もがタペット兄弟のクリックアンドクラックを認識します:

今は明らかに私の2つのクラスTClickでありTClick、非常に複雑です。管理しやすくするために、既存の外部コードを壊さずに、独自のユニットに分割TClickして分割したいと思います。TClack

それで私の最初の亀裂は次のようになります:

完璧です、私はで利用可能なすべての同じクラスを持っていますCartalk.pas、今私はただ書く必要がCartalk_Click.pasありCartalk_Clack.pasます:

もちろん、問題はそれでTTappetBrotherありTSolution、このユニットでは宣言されていません。そこで、彼らが住んでいる場所への参照を追加し、usesそれが失敗するのを見て、私の質問の中心に到達します:

との間に循環参照がCartalkありCartalk_Clickます。

注:もちろん、私はCartalkユニットを持っていません。クリックして、タッパー兄弟をクラックします。これは単なる例です。実際には、ユニットに3つのクラス、20の列挙、および293の定数があります。

0 投票する
1 に答える
1748 参照

database - Delphi 5.0 コードによる Interbase/FireBird 接続を開く

これは古いものです!Delphi 5.0 および interbase 1.6 に関連しています。

コードで DB 接続を開こうとしています。ただし、このコードは接続の有効化に関連しています。すべてのコンポーネントは、Delphi のドラッグ アンド ドロップ ユーザー インターフェイスを使用して追加されました: DataSource1、TForm1、DBGrid、DBNavigator など。

DBGrid と DBNavigator コンポーネントを備えた TForm があります。SQLStrings に次のコードを含む TIBQuery (DataSource1 が関連付けられている) もあります。

フォームには、DBNavigator と DBGrid が DB 値を表示できるようにするこのコードがあります。DB は非常にシンプルで、単なるテーブルです: VARCHAR タイプの NEW_VALUE を持つ NEW_TABLE

次のメッセージが表示されます: 「データベースが割り当てられていません」というメッセージを含む IBClientError

OBS1: Delphi ユーザー インターフェイスでコンポーネントを手動で接続すると、DB との接続が確立されます。

0 投票する
3 に答える
682 参照

delphi - ThemedDBGrid のような StringGrid をテーマにするコンポーネント

Delphi 5 と互換性のあるThemedDBGridコンポーネントのように、stringrid をテーマ化する同様のコンポーネントが存在します。

0 投票する
4 に答える
1166 参照

delphi - Delphi:サブクラスを逆の順序で削除する方法は?

Mike LischkeのTThemeServicesサブクラス。これにより、テーマが変更されたときにApplication.HandleWindows(つまり)からブロードキャスト通知を受信できるようWM_THEMECHANGEDになります。

Applicationオブジェクトのウィンドウをサブクラス化します。

次に、サブクラス化されたウィンドウプロシージャは、想定どおりにWM_DESTROYメッセージを送信し、そのサブクラスを削除してから、次のメッセージを渡しWM_DESTROYます。

TThemeServicesオブジェクトはシングルトンであり、ユニットのファイナライズ中に破棄されます。

そして、それはすべてうまく機能します-TThemeServicesがアプリケーションのハンドルをサブクラス化した唯一の人である限り。

Application.Handle私は同様のシングルトンライブラリを持っていますが、これもフックしてブロードキャストを受信できるようにしたいと考えています。

そして、ユニットがファイナライズすると、私のシングルトンも同様に削除されます。


今、私たちは問題に行き着きます。誰かがThemeServicesまたはにアクセスすることを選択する可能性のある順序を保証することはできませんDWM。それぞれがサブクラスを適用します。また、Delphiがユニットをファイナライズする順序もわかりません。

サブクラスが間違った順序で削除されており、アプリケーションを閉じるとクラッシュします。

直し方?私が終わった後に他の人が完了するまで、サブクラス化メソッドを十分長く保つにはどうすればよいですか?(結局、メモリをリークしたくない)

も参照してください


更新: Delphi7はを書き直すことでバグを解決しているようですTApplication。><

Grrrr

言い換えると、TApplicationをサブクラス化しようとするのはバグであり、BorlandはMikeのを採用したときに修正しましたTThemeManager

TApplicationこれは、サブクラスを逆の順序で削除する方法がないことを意味している可能性があります。誰かがそれを答えの形で入れて、私はそれを受け入れます。

0 投票する
2 に答える
4808 参照

delphi - Delphiコンポーネント:親フォントの使用方法は?

を使用するカスタムコンポーネントがありますParentFont

コンポーネントの構築中に、最初はコンポーネントのフォントがデフォルトに設定されていることがわかりますMS Sans Serif

ショーの検査Self.Font.Name: 'MS Sans Serif'

しばらくして、コンポーネントのフォントが更新され、親のフォントが反映されます。

その後、すべてが素晴らしいものになり、コンポーネントのフォントが親のフォントに変更されました(例: `MS Shell Dlg 2')。

問題は、私の子コントロールが親のフォント(つまり私のコンポーネント)と同期していないことです。

コンポーネントコンストラクター中に、子コントロールを作成します。

そして、最初FpnlBottomはデフォルトのフォントもありMS Sans Serifます。

後で、コンポーネントのフォント親のフォントに更新された場合(たとえばMS Shell Dlg 2)、子コントロールのフォントは更新されず、残りMS Sans Serifます。

  • 子供のコントロールのParentFont所有物が尊重されないのはなぜですか?
  • ParentFont子コントロールのプロパティを機能させるにはどうすればよいですか?

サンプルコード

2時間ツールを使用して、管理可能で再現可能なコードに切り詰めます。

0 投票する
2 に答える
677 参照

sql-server-2005 - Delphi 5 で SQL Server テーブルから longint フィールドを取得する正しい方法

SQL Server 2005 に値が -7590730850027557904 のフィールドがあり、Delphi 5 の ADO を介して取得していますが、取得したのは 7590730850027557904 でした - 負号は省略されました。SQL Server から Delphi 5 に longint 値を取得する正しい方法は何ですか?

これが私のコードです

0 投票する
4 に答える
1285 参照

delphi - DelphiXE環境でDelphi5を使用する

移行せずに新しいXEIDEでDelphi5プロジェクトをコンパイルすることは可能ですか?

Delphi5 IDEをかなり長い間使用していて、正直なところ、古く、使い勝手が悪く、柔軟性がありません。XEを試してみて感動しましたが、プロジェクトを新しいバージョンのDelphiに移行することに興味はありません。

それで、それは可能ですか?そうでない場合は、その点でDelphi5をサポートする他のIDEはありますか?