2

delphi 7とのコンポーネントに取り組んでいます。コンポーネントは概要からdelphi 2006使用SynTaskDialog.pasます。inコンポーネントは正常に使用できましたが、 SynTaskDialog.pasinを使用してコンポーネントパッケージを作成delphi 7しようとすると。delphi 2006エラーが発生します

ここに画像の説明を入力してください

私はsynopse.info/forumで同じ解決策を見つけました


引用:

私は2つの回避策を見つけました:どちらか

  1. ポインタ配列を次のような文字列配列に置き換えます
  TD_ICONS_IDENT: array[TTaskDialogIcon] of string =(
    '', SMsgDlgWarning, SMsgDlgConfirm, SMsgDlgError, SMsgDlgInformation,
    '', SMsgDlgInformation);

いくつかのLoadResString呼び出しを削除するか

2.ポインタ配列を次のような関数に置き換えます

  GetIconIdent(TTaskDialogIcon): Pointer

しかし、その後でも、コンポーネントのパッケージをコンパイルできません。そしてこれらのエラーが発生します

 [Pascal Error] E2201 Need imported data reference ($G) to access 'SMsgDlgOK' from unit 'SynTaskDialog'
 [Pascal Error] E2201 Need imported data reference ($G) to access 'SMsgDlgYes' from unit 'SynTaskDialog'
 [Pascal Error] E2201 Need imported data reference ($G) to access 'SMsgDlgNo' from unit 'SynTaskDialog'
 [Pascal Error] E2201 Need imported data reference ($G) to access 'SMsgDlgCancel' from unit 'SynTaskDialog'
 [Pascal Error] E2201 Need imported data reference ($G) to access 'SMsgDlgRetry' from unit 'SynTaskDialog'
 [Pascal Error] E2201 Need imported data reference ($G) to access 'SCloseButton' from unit 'SynTaskDialog'
4

1 に答える 1

9

プロジェクトフォーラムに質問しなかったのはなぜですか?

解決策は、このオープンソースユニットの公式コードを強化する可能性があります。

OK-それは私がいくつかのSOポイントを獲得するのに役立つかもしれません。;)

この「E2001」の問題はすでに特定されています。この投稿を参照してください。最新のトランクで修正されているはずです。これはDelphi7で動作するように聞こえますが、Delphi2006では動作しません。

このコンパイラのバグの潜在的な回避策は次のとおりです。

このような関数を定義します。

function IconMessage(Icon: TTaskDialogIcon): string;
begin
  case Icon of
    tiWarning:   result := SMsgDlgWarning;
    tiQuestion:  result := SMsgDlgConfirm;
    tiError:     result := SMsgDlgError;
    tiInformation, tiShield: result := SMsgDlgInformation;
    else result := '';
  end;
end;

そのように使用するには:

if Inst='' then
  Inst := IconMessage(aDialogIcon);

これは現在、プロジェクトトランクでコミットされています

オープンソースコンポーネントをご利用いただきありがとうございます。

于 2012-05-09T06:22:32.033 に答える