1

HTTP 経由でチェックを実行する TJvProgramVersionCheck コンポーネントの使用方法の例を誰かが持っているかどうか疑問に思っています。

JVCL のサンプル ディレクトリの例では、HTTP の使用方法が示されていません。

ありがとうございました

4

1 に答える 1

2

あなたのフォルダに含まれているデモは$(JVCL)\Examples\JvProgramVersionCheckそうできるようです。のプロパティを編集し、そのリストJVProgramVersionHTTPLocationに URL を追加しますVersionInfoLocation(a TStrings)。必要に応じて、ユーザー名、パスワード、プロキシ、およびポートを設定することもできます。

OnLoadFileFromRemoteまた、イベント ハンドラーを追加する必要があります。その要件に対処するデモには何も表示されませんが、ソース コードには次のように記載されています。

{ Simple HTTP location class with no http logic.
The logic must be implemented manually in the OnLoadFileFromRemote event }

イベントが受け取るパラメーターから、そこでチェックを行っていることがわかります。

function TJvProgramVersionFTPLocation.LoadFileFromRemoteInt(
  const ARemotePath, ARemoteFileName, ALocalPath, ALocalFileName: string;
  ABaseThread: TJvBaseThread): string;

したがって、このイベントのイベント ハンドラーを追加し、TJVProgramVersionCheck.LocationTypeプロパティを に変更しpvltHTTPてデモを実行する必要があります。テスト後、リモート バージョンのサーバーとファイル名、およびダウンロードしたファイルのローカル パスと一時ファイル名が提供されているようです。イベント ハンドラーResultは、新しくダウンロードしたファイルのフル パスとファイル名である必要があります。イベント ハンドラーは、ファイルの実際の取得を処理する必要があります。

JvProgramVersionCheck.pas, (TJvProgramVersionHTTPLocationICSおよびで定義された追加の型がいくつかありますTJvProgramVersionHTTPLocationIndy。両方ともコンパイラ定義によって保護されているため、デフォルトのコンパイルには存在しません。ただし、ICS関連する定義を設定すると、多くのコンパイル エラーが発生しました (古いバージョンに対して書かれたようです)。 of ICS)、およびIndy定義を設定する (そして、代わりに使用するために再度設定するIndy10) と、コンパイルは許可されましたが、動作はまったく変更されませんでした。

また、VersionInfoLocationエントリが URL のみ (ファイル名なし) であることを確認してください。ファイル名自体はVersionInfoFileNameプロパティに入ります。URL に入れると、繰り返されます (のようにhttp://localhost/Remote/ProjectVersions_http.iniProjectVersions_http.ini、とにかく失敗します。(問題を解決しようとしてデバッガーをトレースしているときにこれを見つけました。)

ついに...

解決策は少し (大幅ではありませんが) 複雑です。これが私がしたことです:

JvProgramVersionCheck.pasdemo フォルダーにコピーします。(次のステップのため、再コンパイルする必要があります。)

Project->Options->Directories and Conditionals に移動し、次の行をDEFINESエントリに追加します。

USE_3RDPARTY_INDY10;USE_THIRDPARTY_INDY;

JvProgramVersionHTTPLocationデモ フォームからコンポーネントを削除します。

privateフォーム宣言に新しいセクションを追加します。

private
  HTTPLocation: TJvProgramVersionHTTPLocationIndy;

イベントで、FormCreate次のコードを追加します。

procedure TForm1.FormCreate(Sender: TObject);
const
  RemoteFileURL = 'http://localhost/';
  RemoteFileName = 'ProjectVersions_http.ini';
begin
  HTTPLocation := TJvProgramVersionHTTPLocationIndy.Create(Self); // Self means we don't free
  HTTPLocation.VersionInfoLocationPathList.Add(RemoteFileURL);
  HTTPLocation.VersionInfoFileName := RemoteFileName;
  ProgramVersionCheck.LocationHTTP := HTTPLocation;
  ProgramVersionCheck.LocationType := pvltHTTP;
  VersionCheck;  // This line is already there
end;

ProgramVersionCheckコンポーネントのプロパティでプロパティを展開し、をからにVersionInfoFileOptions変更します。FileFormathffXMLhffIni

versioninfolocal.iniデモのフォルダからを削除するか、名前を変更します。(アプリを一度実行すると、http 位置情報が保存され、上記の変更が上書きされます。これを追跡するのに時間がかかりました。)

ローカル http サーバーが実行されていること、およびProjectVersions_http.iniファイルが Web ルート フォルダーにあることを確認します。その後、デモを実行できるはずです。フォームが表示されたら、Edit Historyボタンをクリックして、リモート バージョン情報ファイルから取得した情報を確認します。versioninfolocal.ini上記で入力した設定情報が保存された の新しいコピーも作成されます。

于 2011-12-19T14:09:05.343 に答える