問題タブ [delphi-6]
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 - StretchDIBits を GDI+ に置き換える (イメージをプリンターのキャンバスに描画している間)
私のアプリケーションは Delphi 6 で開発されています。これは、バックグラウンド処理と大量のデータ (約 60MB ~ 120MB の物理メモリを消費する) のため、リソースを大量に消費するアプリケーションです。このアプリケーションの機能の 1 つは、バーコード イメージを作成して印刷することです。ユーザーがバーコードを生成し続けると、10 個のバーコードのうち少なくとも 1 個の行が欠落しています。
TExcellenImagePrinter コンポーネントを使用して、この問題を解決できました。しかし、それはパフォーマンスを大幅に低下させました。この解決策はクライアントによって拒否されたため、WinAPI StretchDIBits 呼び出しを GDI+ に置き換えようとしています。
元のソースコードは次のとおりです。
エンバカデロ フォーラム ( https://forums.embarcadero.com/thread.jspa?messageID=471501#471501 ) でジョーが提案したように、( http://www.progdigy.com/?page_id=7 )から GDI+ ヘッダーを取得しました。 )。
ソースコードを次のように変更しました。
TGPGraphics クラスのオブジェクトを作成し、プリンターのハンドルをそれに割り当てました。
gp := TGPGraphics.Create(Printer.Canvas.Handle);
TGPBitmap クラスのオブジェクトを作成し、バーコード イメージを割り当てます。
bmp := TGPBitmap.Create(Info^,Image);
Info は TBitmapInfo で、Image はポインタです。
- プリンターのディメンションをTGPRect レコードのインスタンスrectに割り当てました
DrawImage 関数を呼び出します:
gp.DrawImage(bmp,rect);
ただし、これらの変更を行った後、プリンターの出力に空の画像が表示されます。私が何かを見逃していたり、私の実装が間違っていたりした場合は指摘できますか? これに関する指針を提供できますか?
c# - COM ポートを使用したコイン チェンジャーとのやり取り
MEI Cashflow E7900
デバイスをシリアル ポートに接続するためのコイン チェンジャーと MDB アダプターがあります。アダプタを販売してくれたショップでは、Delphi で作成され、Borland Delphi v6.0 でコンパイルされたテスト アプリケーションも提供されました。それは完全に機能しますが、何らかの理由で私のコードは機能しません。
MDB を使用する場合POLL
、200ms ごとにコマンドを送信する必要があります。すべてが OK の場合、コイン チェンジャーは を送信しますACK
。Delphi アプリケーションを使用して送信すると、セッションは次のようになります。
=> 0x0B* 0x0B (星印はマークに設定されたパリティを意味します。デフォルトのパリティはスペースです)
<= 0x00
だから、すべてがOKです。それが私が期待していることです。POLL
C# アプリケーションで送信すると、次のようになります。
=> 0x0B* 0x0B
<= 0x3F 0x00
時々、コイン チェンジャーが意味をなさないメッセージを送ってきます。このような有効な応答はありません0x3F 0x11
。POLL
このような応答を受け取ったときに Delphi アプリケーションを実行すると、有効なACK
応答が得られます。ポート構成自体を含め、送信されたデータに違いがないことを確認するためにCOMポートスニファーを使用していましたが、異なる応答が得られ続けています。
テスト アプリケーション (Delphi) のソース コードは次のとおりです。
完全なコード リストはこちらで入手できますが、ここで提供されているコードで十分です。
私のコード (C#):
Delphi アプリケーションでの Poll コマンド:
私のアプリケーションでコマンドをポーリングします。
0x3F
受信したデータは、最初以外はほぼ同じようです。しかし、デバイスの動作も異なり、PC に接続されていないようです。C# アプリケーションを使用すると「マシンによって無効化されました」と表示され、Delphi アプリケーションを使用すると「ステータス OK」と表示されます。これは .NET Framework が原因で発生している可能性がありますか? COM ポートの相互作用のためのライブラリーの名前はすべて承認されます。
なぜ私は異なる反応を得るのですか?ここの誰かが私を助けてくれることを願っています。前もって感謝します。また、この巨大な質問を読んでくれてありがとう。
sql-server - Delphi TADOStoredProc / D6 および RAD Studio XE2 での最近の障害
いくつかの支援を提供できる人に感謝します...
バックグラウンド:
Borland Delphi v6 でコーディングされ、まだサポートされているアプリケーションがあります。ごく最近、TADOStoredProc クラスがストアド プロシージャの実行に失敗するという問題がありました。このコードは、以前は数年間安定しており、変更されることはありませんでした。
要求のタイムアウトを構成できますが、これは尊重されますが、タイムアウトが非常に長くても、ストアド プロシージャの呼び出しは実行されません。アプリケーションがハングアップするか、タイムアウト例外でベイルします。(サーバーに過負荷がかかっておらず、同じクライアントから発信された他の SQL SELECT 要求に応答することはわかっています。)
D6が古いことは知っています。Embarcadero RAD Studio XE2 を使用した別の環境で、同じプロジェクトをビルドすることができましたが、同じ問題がまだ残っています。... 念のため。
どこへ行く?
- 提供されたコードを確認し、より良い方法がないかどうかを確認してください。(最近の更新後、MSSQL インターフェースがよりうるさいのではないでしょうか?) 私は確かに推奨事項を歓迎します。
- 信頼性が高く、TADOStoredProc を必要としない、アプリにプラグインできる別の方法はありますか? 掘り下げましたが、良い例は見つかりませんでした。
コード例
ご協力いただきありがとうございます。
delphi - 関数の型指定されていないパラメーターを介して渡されたレコードをファイナライズする方法は?
プロシージャに「任意の」レコード タイプを渡すことはできますか?
文字列で「レコード」を何度も使用しました。
それらをクリアするには、次のように書く必要があります。
問題は、どのような種類のレコードを渡してクリアするかということです。
このために、「式には初期化/ファイナライズは必要ありません」というヒントを得ました。
いつも情報ありがとうございます!
c++ - Delphi6でのC++DLLの使用
Delphi6で外部C++DLLのエンコーディング関数を使用する必要があります。提供される宣言は次のとおりです。
long <Function Name> (char *Data, long &Apply, char *ReturnVal, long &Size)
Dataは入力値、Applyはブール値(デフォルト:FALSE)、ReturnValはDLLからの戻り値、SizeはReturnValの長さです。
これをDelphi6で使用するために、次のコードを記述しました。
コメントとして「ERROR」が含まれている行にアクセス違反が発生しています。
関数宣言のPCharを文字列に置き換えると、アクセス違反は同じ行に発生しません。それはライブラリを解放している間に来ます。また、iLengthパラメーターの値が正しく入力されます。
誰かがこの問題を解決するためのポインタを提供できますか?
delphi - NIL 配列を Variant に割り当てると、Delphi 6 で空でない配列が返されるのはなぜですか?
Delphi 6 でエラーなくコンパイルおよび実行される以下のコードを考えてみましょう。動的文字列配列を復元すると、saに空の配列が表示されるのではなく、空の文字列を含む 1 つの要素を持つ長さ 1 の配列が表示されます。これはなぜですか? また、NIL 動的配列をバリアントに安全に割り当てて適切に回復するにはどうすればよいですか? コードは次のとおりです。
delphi - Delphi コマンド ライン ビルド(DCC32)エラー: System.pas が見つかりません
Win7/x64 の Delphi 6 Professional、c:\Delphi6 フォルダ。
ProjectGroups が OM エラーを起こしているため、プロジェクトを 1 つずつビルドする必要があります。
より高速なコンパイルを提供するために、DCC32.exe を使用しようとしました。
このサイトで、「ライブラリ パスを設定するための 4 つのオプションを使用して dcc32.cfg を拡張する」という情報を見つけました。それぞれを「Delphi/Options/Env.options/Library path」に設定しました。
それから私は試しました:
dcc32.exe b "any.dpr"
しかし、エラーが発生しました:System.pasが見つかりません。
私はそれを理解していません.dcc32.exeが基本的なpasファイルもビルドしたいのかもしれません.または別のフォーマットを使用する必要があります.
多くの条件付きディレクティブを使用しているため、各プロジェクトをビルドする必要があります。
あなたが書くすべての情報、提案をありがとう。
delphi - Delphi 6 プロフェッショナル IDE のように DCC32 でプロジェクトをコンパイルする
IDE: Delphi 6 プロフェッショナル。
大きなプロジェクトがあります。
プロジェクト グループを使用してすべてをビルドすることはできません。OM エラーが発生し、実行時に奇妙なファイル エラーが発生したためです。
私の考えは、DCC32.exeを使用することでした。以前は、コマンドラインパラメーター(dcc32.cfg)との戦いがありましたが、解決したと思っていました...
今日、それを使ってプロジェクトをコンパイルしようとしましたが、最初のプロジェクトでエラーが発生しました。
chdir c:\d\anyproject dcc32 -b any.dpr
エラーは、ユニットが見つからないことを報告しました。Delphi でコンパイルしようとしましたが、成功しました。
というわけで、問題を確認しました。以前のプロジェクトの建物が成功した理由と、失敗した理由は…?
次に、この dpr がサブディレクトリへの参照を使用していることに気付きましたが、プロジェクトに追加されたすべてのファイルではなく、プロジェクトの「検索パス」によってさらに多くのファイルがリンクされています。
しかし、それが本当なら、これは DCC32 がプロジェクトの DOF/CFG ファイルを使用していないことを意味します!
問題は、Delphi がすべてをマージして結果を提供することです。グローバル検索パス、プロジェクトのコンパイラ ディレクティブ、検索パスなどすべてをマージし、プロジェクトの条件付きディレクティブも使用します。
私がそれをよく理解していれば、DCC32 は使用せず、dcc32.cfg のみを使用し、コンパイルのためにすべてをマージする必要があります。プロジェクトのパラメーターを解釈してマージするパーサーを作成する必要があるため、これは不可能な仕事です。グローバルと。
それとも、私が何かを誤解していて、その問題は私が見逃した別のことが原因なのですか?
あなたの提案を待っています!
すべてのアイデア、リンク、情報などに感謝します。
delphi - あらゆる種類の画像のサイズを変更するにはどうすればよいですか?
私のプロジェクトの目標は、Delphi 6 であらゆる種類の画像 (jpeg/gif/png) のサイズを変更することです。
私は多くの方法を試しましたが、理想的な解決策を得ることができませんでした。それを行う方法の手がかりはありますか?単純なコマンド ライン ツール、コード、または Delphi コンポーネントを使用できます。
私は imagemagick を試しました: それは重すぎます: 20 メガ + dll + レジストリ。
私はいくつかのスニペットを試しましたが、それらのほとんどは JPEG でのみ機能します。gif/jpeg/png が必要です
graphicEX を試しましたが、GIF が読み込まれません
delphi - Delphiで16進strを10進値に変換します
Delphi で 16 進値の文字列表現を整数値に変換する際に問題が発生しました。
例えば:
$FC75B6A9D025CB16 関数を使用すると、802829546 が表示されます。
しかし、Windows の calc プログラムを使用すると、結果は次のようになります: 18191647110290852630
だから私の質問は:誰が正しいですか?私、または電卓?
誰かがすでにこの種の問題を抱えていますか?