ChartFX のインストールについて
該当するバージョン:Delphi 2.0,Delphi 3.0/Delphi3.1,Delphi4
Q:
ChartFX を使用したアプリケーションを別のマシンにインストールした場合,エラーが発生して動作しません。インストールしただけではレジストリの情報が登録されません。
A:
はじめに,CFX32.OCX を C:\Windows\System にコピーしてください。
次に,Delphi 2.0J で作成した以下のプログラムを実行して,レジストリに必要な情報を登録してください。
unit Install_;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ole2;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
const
OCXName = 'CFX32.OCX';
var
hOCX: THandle;
RegFunc: function: HResult; stdcall;
begin
if Failed(OleInitialize(nil)) then
Exit;
hOCX := LoadLibrary(PChar(OCXName));
if hOCX = 0 then begin
OleUninitialize;
ShowMessage(OCXName + 'が見つかりません');
Exit;
end;
@RegFunc := GetProcAddress(hOCX, PChar('DllRegisterServer'));
if (@RegFunc <> nil) and Succeeded(RegFunc) then
ShowMessage(OCXName + 'を導入しました')
else
ShowMessage(OCXName + 'の導入に失敗しました');
FreeLibrary(hOCX);
OleUninitialize;
end;
end.
VBX を使ったアプリケーションとともに配布すべきファイル
該当するバージョン:Delphi 1.0
Q:
VBX を使ってアプリケーションを開発しましたが,アプリケーションとともにどんなファイルを配布すべきでしょうか?
A:
VBX を使っている場合は,その VBX ファイルと Windows の SYSTEM ディレクトリにある BIVBX11.DLL を配布する必要があります。BIVBX11.DLL は,Delphi で VBX を使って作成したアプリケーションとともに再配布できます。また,VBX の配布については VBX のメーカーが認めている再配布条件に基づいて,再配布してください。
VBX を使おうとしたのですが,正しく動作していないようです。
該当するバージョン:Delphi 1.0
Q:
VBX を使おうとしたのですが,正しく動作していないようです。
A:
Delphi は VB 1.0 互換の VBX のみをサポートしています。VB 2.0/3.0 対応のVBX は使用できません。
VB 1.0 レベルの VBX を使っているのですが,正しく動作していないようです
該当するバージョン:Delphi 1.0
Q:
VB 1.0 レベルの VBX を使っているのですが,正しく動作していないようです。
A:
残念ながら,VB で動作するすべての VBX を Delphi で正しく使えるとは限りません。たとえば,VB 2.0 は VBX の仕様に含まれるすべての機能を呼び出すわけではないので,VB 2.0 で使われない機能を Delphi が呼び出す場合,VBX がその機能を正しく実装していなければ,Delphi では正しく動作しないことになります。また,VB 2.0 で動作している VBX が Delphi で動作しないケースのすべてについて,明確な回答は得られません。なお,VBX メーカーによっては,Delphi 上での VBX の動作確認されている場合もあります。
"Interface の保存エラー" のエラー
該当するバージョン:Delphi 3.0/Delphi3.1,Delphi4
Q:
オートメーションサーバーや ActiveForm/ActiveX を作成しようとしています。
プロジェクトをセーブしようとすると,"Interface の保存エラー"が表示されます。
何が悪いのでしょうか?
A:
マシンに入っている OLE DLL(s) は古いものの可能性があります。 CD-ROM に入っている Internet Explorer をインストールするとこれらの DLL は更新されます。または,Delphi のCD-ROM の Runimage からコピーしてください。
Error 0:RLINK32 error opening file(TypeLibrary).tlb
該当するバージョン:Delphi 3.0/Delphi3.1,Delphi4
Q:
オートメーションサーバーや ActiveForm/ActiveX を作成しようとしています。
"Error 0:RLINK32 error opening file my_type_library.tlb" が表示されます。
何が悪いのでしょうか?
A:
マシンに入っている OLE DLL(s) は古いものの可能性があります。 CD-ROM に入っている Internet Explorer をインストールするとこれらの DLL は更新されます。または,Delphi のCD-ROM の Runimage からコピーしてください。
Internet Explorer 上に ActiveForm が表示されない
該当するバージョン:Delphi 3.0/Delphi3.1,Delphi4
Q:
Internet Explorer 上に ActiveForm が表示されません。時々,ActiveForm や ActiveX が Internet Explorer に表示されないのは何故ですか? .htm ページに空の四角形内に赤いXが表示されるだけです。
A:
ActiveForm を作成する際に,"設計時モードライセンスを追加" オプションをチェックした可能性があります。しかし,.LIC ファイルを OCX ファイルを一緒に添付していないためです。
ActiveX/ActiveForm は,Web サイトを向上させるためなのにコントロールを無料で配布するので,通常は,"設計時モードライセンスを追加" オプションはチェックしません。
Web サイトの機能を拡張するために ActiveX/ActiveForm を使う場合にはライセンス問題は発生しないので,通常は,"設計時モードライセンスを追加" オプションはチェックする必要はありません。
"設計時モードライセンスを追加" を無効にするには,ActiveForm の XXXImpl ファイルの Initialization セクションの TActiveXControlFactory の最後から2番目のパラメータを置き換えます。次のように,空の文字列を使用します。
initialization
TActiveFormFactory.Create(
ComServer,
TActiveFormControl,
TActiveFormX,
Class_ActiveFormX,
1,
'', 0);
"設計時モードライセンスを追加" を有効にする
該当するバージョン:Delphi 3.0/Delphi3.1,Delphi4
Q:
"設計時モードライセンスを追加" を有効にする場合は,どのような場合ですか?
A:
ActiveX や ActiveForm を他のデベロッパに販売する場合には,"設計時モードライセンスを追加" を有効にします。それらのデベロッパは,完成したアプリケーションをエンドユーザーに販売します。つまり,.LIC ファイルが存在するとコントロールは,設計時の環境(Delphi,C++Builder,VB など)で動作しますが,.LIC ファイルが無いと実行時の環境(エンドユーザーのアプリケーション)でのみ動作します。
ActiveX を Web 上で配布することは,エンドユーザー(デベロッパに対応して)に配布するということになり,"設計時モードライセンスを追加" を有効にする必要はありません。
"TActiveFormX クラスの宣言が無いか間違っています"
該当するバージョン:Delphi 3.0/Delphi3.1,Delphi4
Q:
"TActiveFormX クラスの宣言が無いか間違っています" のエラーが表示されます。
このエラーの原因および対処方法はどうしたら良いですか?
A:
ActiveForm 名を間違った順序で変更した場合に発生することがあります。
coclass 名を先に変更すると,更新時に AV(Access Violation) が発生します。その後,オブジェクトインスペクタからフォームの名前を変更すると,"TActiveFormX クラスの宣言が無いか間違っています" が発生します。修正するには,.DFM ファイルをオープンして以下の行を変更してください。
object ActiveForm: TActiveFormX
を
object MyForm: TMyForm
に変更します。
"DAX エラー" のエラーが表示
該当するバージョン:Delphi 3.0/Delphi3.1,Delphi4
Q:
"DAX エラー" のエラーが表示:
このエラーの原因および対処方法はどうしたら良いですか?
A:
[クライアント側から DCOM によるアクセスを行うには,どうしたら良いですか?] の説明に従ったかどうか確認してください。説明に従いながらも動作しない場合は,サーバーをもう一度手動で実行してください。
古い ActiveForm の情報が表示
該当するバージョン:Delphi 3.0/Delphi3.1,Delphi4
Q:
バージョン情報付きの ActiveForm をアップデートしたにもかかわらず,古い ActiveForm の情報が表示されます。Internet Explorer で見ると,古い ActiveForm が表示されます。何が悪いのでしょうか?
A:
バージョン情報を使用したとしても,このような事が場合によっては発生します。
TREGSVR.exe または REGSVR32.EXE を使用して,OCX(通常,C:\WINDOWS\OCCACHE\ または C:\WINNT\OCCACHE にあります) の登録を削除すると,問題が解決される場合があります。
対処方法:
- Internet Explorer を終了します。
- "TREGSVR.exe /u c:\windows\occache\MyActiveX.ocx" または
"regsvr32.exe /u c:\windows\occache\MyActiveX.ocx" を実行します。
- Internet Explorer を再起動し,Web ページにアクセスします。
ActiveX 用に他のファイルを配布している場合は,すべてのファイルがOCCACHE ディレクトリに入れられる事が判るでしょう。
また,ダウンロードしたファイル間で名前の衝突が起きた場合,OCCACHE\CONFLICT.x(x は数値)ディレクトリが作成され移動されます。
テーブルの内容を EXCEL のシートに書き込むには
該当するバージョン:Delphi 2.0,Delphi 3.0/Delphi3.1,Delphi4
Q:
テーブルの内容を EXCEL のシートに書き込みたいのですが,どのようにすればよいでしょうか。
A:
Delphi 2.0 及び Delphi 3 以降では,OLE オートメーションを使用してテーブルの内容を EXCEL に書き込む事ができます。以下のコードは Delphi のサンプルテーブルANIMALES.DBF を EXCEL(※) のシートに書き込むサンプルです。
※重要 ここで使用している EXCEL は Excel for Windows95 (ver 7.0)です。
EXCEL 97 では VBA フォーマットが変更されていますので,EXCEL 97 を使用する場合には,サンプルコードの修正が必要です。
手順 :
- Delphi 2.0 では OLEAuto,Delphi 3 では Comobj を uses 節に追加します。
- フォーム上に Table,Button コンポーネントを配置し,Table コンポーネントにANIMALS.DBF を接続します。
- Button コンポーネント の OnClick イベントハンドラに以下のように記述します。
var
E_Excel: Variant;
E_Application: Variant;
E_WorkBook: Variant;
E_WorkSheet: Variant;
i: Integer;
begin
// Excel をオープン
E_Excel := CreateOleObject('Excel.Application');
E_Application := E_Excel.Application;
E_Application.Visible := TRUE;
E_Application.WorkBooks.Open('C:\tmp\MyData.XlS'); // XLS ファイルを指定
E_WorkBook := E_Application.ActiveWorkbook;
E_WorkSheet := E_Application.ActiveSheet;
// Table1 のデータをファイルに書き込む
i := 1;
Table1.First;
while not Table1.eof do
begin
E_WorkSheet.Cells(i,1).Value := Table1.FieldByName('NAME').AsString;
E_WorkSheet.Cells(i,2).Value := Table1.FieldByName('AREA').AsString;
E_WorkSheet.Cells(i,3).Value := Table1.FieldByName('SIZE').AsString;
i := i + 1;
Table1.Next;
end;
Table1.First;
// WorkBook の内容を保存して Excel を終了する
E_WorkBook.Saved := FALSE;
E_Application.WorkBooks.Close;
E_Excel.Quit;
end;
現在実行中の ActiveForm が格納されているディレクトリが知りたい (99/4/2)
該当するバージョン:Delphi 2.0,Delphi 3.0/Delphi3.1,Delphi4
Q:
現在実行中の ActiveForm が格納されているディレクトリが知りたいのですが, どのように取得すればいいでしょうか?
A:
GetModuleFilename を使って, インスタンスからそのモジュールを取得すればいいでしょう。
Application.Exename では Web ブラウザへのパスが,GetCurrentDirectory では, "デスクトップ" ディレクトリへのパスが返されます。
var
ModuleName: array[0..255] of Char;
begin
GetModuleFilename(HInstance, ModuleName, SizeOf(ModuleName));
ShowMessage( String(ModuleName) );
end;