私はでコンポーネントを開発してdelphi 7
おりdelphi 2006
、コンポーネントはアプリケーションディレクトリにファイルが存在.pas
する必要がある(私のものではない)ファイルを使用しています。DLL
ファイルをコンポーネントに埋め込むことができるDLL
ので、ユーザーがフォームにファイルをドロップするか、実行時にファイルを作成するとDLL
、アプリケーション ディレクトリに配置されますか?
現在
DLL
1)アプリケーション ディレクトリにファイルを配置するようにユーザーに指示しています。
2) Resources にファイルを追加して、作成時にアプリケーションディレクトリにDLL
ドロップできるようにしますか? delphidabbler_embed_resourceDLL
から。これは私が使用した
{Drop the Resource..!!!}
procedure DropDllToApplicationDirectOry(applicationPath : string);
var
RS: TResourceStream;
begin
// Create resource stream
RS := TResourceStream.CreateFromID(HInstance, 100, RT_RCDATA);
try
// applicationPath : example c:\MyTestProject Lee\
if DirectoryExists(applicationPath) then RS.SaveToFile(applicationPath+'myDllFileWhichIsNeeded.dll')
finally
// Free the stream
RS.Free;
end;
end;
これDropDllToApplicationDirectOry
は からリソースを{$RmyDllFileWhichIsNeeded.dll.RES}
取得し、その場所にドロップしますが、
DropDllToApplicationDirectOry
コンポーネントをフォームにドロップしたときにこれを呼び出すにはどうすればよいですか?
コンポーネントを試しinitialization
てみましたが、DLL がコピーされていないため、エラーが発生します
EDIT
このフォームで時計の実行をドロップすると、時計が実行され始めます(現在の時刻を表示します)...だから私はこれを試しましRXControls
たTRxClock
constructor Tmycomponeny.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
{add dll}
DropDllToApplicationDirectOry(ExtractFilePath(Application.ExeName));
end;
しかし、これはうまくいきません..
コードのRXControls
constructor TRxClock.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
if not Registered then begin
ClockInit;
Registered := True;
end;
Caption := TimeToStr(Time);
ControlStyle := ControlStyle - [csSetCaption]
{$IFDEF WIN32} - [csReplicatable] {$ENDIF};
BevelInner := bvLowered;
BevelOuter := bvRaised;
FTimer := TRxTimer.Create(Self);
FTimer.Interval := 450; { every second }
FTimer.OnTimer := TimerExpired;
FDotsColor := clTeal;
FShowSeconds := True;
FLeadingZero := True;
GetTime(FDisplayTime);
if FDisplayTime.Hour >= 12 then Dec(FDisplayTime.Hour, 12);
FAlarmWait := True;
FAlarm := EncodeTime(0, 0, 0, 0);
end;