TStringList型プロパティのプロパティエディタをデフォルトに戻すには?

解決


K  2002-04-14 23:58:32  No: 791

TIBQueryから派生したコンポーネントを作成しました。
TIBQueryはSQLプロパティのエディタが通常のStringListとは違い、使い
にくいのでデフォルトに戻そうと思い、作成したコンポーネントのなかで
RegisterPropertyEditor(TypeInfo(TStrings), TIBQuery1, 'SQL',
TStringListProperty);
を記述し、これだけではコンパイルできなかったので
uses節にDesignIntfとStrEditを追加し、requiresにdesignideを
追加しました。
パッケージのコンパイルは出来たのですが、プロジェクトに
そのコンポーネントを追加し、コンパイルすると
"StrEdit.dcuが見つからない"とエラーになりました。
実行時パッケージを使用しdesignide.dcpを追加すると
コンパイル出来るのですが、実行時パッケージは使用したく
ありません。
設計時パッケージに"designide60.bpl"を追加しライブラリ検索パスに
ToolsApiを追加すると、StrEditユニットが参照するDesignEditorsユニット
のuses節の中の"Proxies"が見つからないというエラーになりました。
Proxiesユニットの参照を解決するにはどのようにしたらいいでしょうか?


にしの  2002-04-15 00:40:17  No: 792

単純に、StrEdit.dcuにパスが通っていないだけでは?

> "StrEdit.dcuが見つからない"とエラーになりました。
この時点で、ライブラリパス上にStrEdit.dcuが見つからないのだと思います。
コンパイルして出来たStrEdit.dcuを、パスの通っているディレクトリに置くか、StrEdit.dcuのあるディレクトリを、ライブラリパスに指定してみてください。

この場合、
> 実行時パッケージを使用しdesignide.dcpを追加すると
> コンパイル出来るのですが、実行時パッケージは使用したく
この先は関係なくなります。


K  2002-04-15 03:40:01  No: 793

にしのさんレスありがとうございます。
パッケージをコンパイルしても"StrEdit.dcu"は出来ていません。
一応コンポーネントは出来てプロパティエディタ自体は期待通り動作
するのですが、やはりアプリのコンパイルが出来ません。
試しにパッケージに"StrEdit.pas"を追加してコンパイルしてみようと
しましたが、DesignEditors.pasユニットのuses節の"Proxies"のところで
"Proxies.dcuがありません"とコンパイルエラーになります。
どうすれば良いでしょうか?


にしの  2002-04-15 06:57:16  No: 794

Delphi6ですか、もしかして。
Dekphi5ではうまくいきそうです。
uses 節に、DesignEditorsも、Proxiesもないですから。
Delphi6でどう解決するかはわかりません。
お力になれず申し訳ない。

するとしたら、Proxies.pasか、Proxies.dcuをファイル検索して、そのパスをライブラリパスに追加すればできそうな気がしますが、Proxiesユニットは見つかりませんか?


K  2002-04-15 08:25:09  No: 795

にしのさん何度もありがとうございます。
Delphi6です、Proxiesユニットはどこにも見あたらないです。
Delphi5はLibのフォルダにProxies.dcuがありました。
これはもうどうしようもないんでしょうか....


にしの  2002-04-15 09:38:11  No: 796

http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=059294
ひとまず、こちらを参照してください。
このすれどっでも解決したようには見えませんが、僕の持っている情報より多いと思います。


にしの  2002-04-15 09:40:17  No: 797

Delphi5のProxies.intのようなファイルを用意してもだめですかね。
Cならば、警告は出てもライブラリがあればリンクできるので。
# 未確認です

//ここから
unit Proxies;

interface

procedure CreateSubClass(Instance: TObject; const ClassName, UnitName: string;
  Ancestor: TClass); overload;
procedure CreateSubClass(Instance: TObject; const ClassName: string;
  Ancestor: TClass); overload;
procedure DestroySubClass(Instance: TObject);
procedure RenameSubClass(Instance: TObject; const ClassName: string;
  const UnitName: string = '');
function CreateSubClassMethod(Instance: TObject;
  const MethodName: string): Pointer;
procedure ChangeToProxyClass(Instance: TObject; Proxy: TClass);
procedure RenameSubClassMethod(Instance: TObject; Method: Pointer;
  const MethodName: string);
procedure DestroySubClassMethod(Instance: TObject; Method: Pointer);
function IsProxyClass(ClassType: TClass): Boolean;

implementation
//ここまで


K  2002-04-15 11:22:21  No: 798

にしのさんこんばんは。
リンクを張っていただいたURLの情報からコンポーネント本体とプロパティエディタ
登録用ユニットを分離するという方法で無事解決しました!
しかしなぜこのような手順が必要なのかはよく分かりませんが、マニュアルに詳しく
記述して欲しいものですね。
いろいろお手数をおかけしましてありがとうございました。またよろしくお願いします。


K  2002-04-15 11:22:27  No: 799

にしのさんこんばんは。
リンクを張っていただいたURLの情報からコンポーネント本体とプロパティエディタ
登録用ユニットを分離するという方法で無事解決しました!
しかしなぜこのような手順が必要なのかはよく分かりませんが、マニュアルに詳しく
記述して欲しいものですね。
いろいろお手数をおかけしましてありがとうございました。またよろしくお願いします。


K  2002-04-15 11:23:02  No: 800

ダブって書き込みしてしまいました...


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加