Delphi Tips
>> Index
● 10/15 EXE ファイルのスリム化
● 07/05 デバッグ中にコード特定部分で発生する例外を無視する
● 02/08 リソースにあるバージョン情報を取得したい。
● 03/04 ブレークポイントで停止したときに IDE がアクティブにならない
● 03/04 コンパイラを識別するための定義済みシンボル
● 06/25 「アドレス????????でエラーが発生」からエラー位置を知る
● 06/25 Delphi の格言
● 06/25 Install Shield Express でアンインストール時にレジストリを削除できない
● 06/25 DLL にブレークポイントが設定できない
● 05/17 異なるバージョンのDelphiを1つのPCに共存させる
● 06/06 <Delphi Install Dir>\BINディレクトリの中のファイル
● 06/02 フォームの新規作成のデフォルトを変更したい
● 10/07 文字列リソースの編集ツール - 文字列テーブルエディタ
● 09/27 アップリケーションにサウンドリソースを埋め込んで使いたい。
● 09/08 Delphi3 でコンポーネントパレットを複数行にする
● 09/06 Delphi 2.0/3.0でCPUウィンドウを出す
● 08/30 Pascal 版の yacc & lex
● 05/12 コードエディタで「キーボードマクロ」を使う
● 05/12 コードエディタで選択部分をまとめてインデントする
● 05/12 コードエディタで矩形領域を選択する
● 02/11 デバッグ中に関数評価の戻り値をチェックしたい
● 02/11 デバッグ時にライブラリ内もステップ実行したい
● 02/08 Fortran のソースを C に変換するツール
● 02/08 Delphi で DOS のアプリを書く方法
● 02/08 *.h ファイルから *.pas ファイルを作るコンバータ
● 02/08 任意の実行ファイルが DLL などからインポートしている関数の一覧を得る
● 02/08 C++ の関数の親子関係をレポートするツール
● 02/08 Delphi3のコード補完機能で選択肢をソートして表示させる
● 02/08 コードエディタで「しおり」を使う
● 02/08 ヘルプ作成用のホットスポットエディタ(SHED.EXE)の入手方法
● 02/08 Delphi1/2で状況依存型のコンポーネントヘルプを作るときの注意
● 02/08 アプリケーションアイコンの変更が反映されない
● 02/08 BCB3 のバージョン情報でキー名が日本語だと不具合
● 02/08 BCB1 から BCB3 へ移動したプロジェクトでのプリコンパイルヘッダ利用
● 02/08 IDEのコードエディタのデフォルトサイズを変更する
● 02/08 Delphiのインラインアセンブラで MMX コードを使いたい
● 02/08 Delphi3.1でオブジェクトインスペクタの表示がおかしい
● 02/08 oDelphi1.0とDelphi2.0/3.0でコンポーネントのソースを共有したい
● 02/08 設計時にフォームがエラーで読み込めず変更もできない
● 02/08 complib.dllが壊れた!また全部のコンポーネントをインストールするの?!
● 02/08 Delphi3.0でDLLにバージョン情報が入らない
最終更新: 6980 日前
0302 D1D2 D3 D4 D5 D6 D7 3.195 98 作成: 2000/06/01 osamu rev 1.4 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 2005/10/15 nameless <> 編集
EXE ファイルのスリム化
.exe ファイルを圧縮しておき、実行時に自動的に解凍することで、.exe ファイルを小型化することの出来るソフトがいくつか出回っています。フリーソフトでは ezip, upx、商用ソフトでは aspack というものが有名なようです。
ezip>
http://web.archive.org/*/http://www.jonathanclark.com/ezip/ezip.exe
upx>
http://upx.sourceforge.net/
aspack>
http://www.entechtaiwan.com/aspack.htm
圧縮ではなく、W32 PE EXE ファイルのの 'reloc' セクションを削除してしまう方法もあります。reloc が無くても EXE はメモリー空間に Windows のローダがチャンと割り付けてくれます。(DLL は削除してはいけません)
StripReloc>
http://www.jrsoftware.org/striprlc.htm
参照: <アプリケーション> <配布>
0333 D1 D2 D3 D4D5 D6 D7 3.1 95 98 作成: 2003/06/25 osamu rev 1.2 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 2005/07/05 <> 編集
デバッグ中にコード特定部分で発生する例外を無視する
例外をデバッガが受け取るようにした場合、try except でハンドルしている既知の例外で頻繁に実行が止まってしまい困る場合があります。
コードの特定部分で発生する例外をデバッガに無視させるには、その範囲の前後にブレークポイントを仕掛けて、右クリック-[ブレークポイントの設定]-[拡張]で[ブレーク]のチェックを外し、それぞれ[この後の例外を無視する][この後の例外を処理する]のチェックを入れると良いです。
参照: [Delphi-ML:73061] <デバッグ>
0226 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/08/29 西坂良幸 rev 1.5 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 2005/02/08 <> 編集
リソースにあるバージョン情報を取得したい。
Delphiのメニュー[プロジェクト|オプション]のバージョン情報ページのデータはリソースとして製作したアプリケーションの EXE ファイルの中にあります。バージョン情報ダイアログのバージョン番号は、是非このリソースの内容を反映させたいですね。
この方法は、多くの書物に書かれているようですが、ML でも多い話題です。
自作のダイアログをつくり、リポジトリに登録しておきましょう。
コンポーネント化するのもひとつの方法です。
VerQueryValue 関数の第二パラメータに、 '\' をつかって バージョン番号を取得する方法は [Delphi-ML:31478] で紹介しています。
ここでは、すべてのバージョン情報を取得する関数を紹介します。
type
TVerResourceKey = (
vrComments, // コメント
vrCompanyName, // 会社名
vrFileDescription, // 説明
vrFileVersion, // ファイルバージョン
vrInternalName, // 内部名
vrLegalCopyright, // 著作権
vrLegalTrademarks, // 商標
vrOriginalFilename, // 正式ファイル名
vrPrivateBuild, // プライベートビルド情報
vrProductName, // 製品名
vrProductVersion, // 製品バージョン
vrSpecialBuild); // スペシャルビルド情報
const
KeyWordStr: array [TVerResourceKey] of String = (
'Comments',
'CompanyName',
'FileDescription',
'FileVersion',
'InternalName',
'LegalCopyright',
'LegalTrademarks',
'OriginalFilename',
'PrivateBuild',
'ProductName',
'ProductVersion',
'SpecialBuild');
// バージョン情報を取得
function GetVersionInfo(KeyWord: TVerResourceKey): string;
const
Translation = '\VarFileInfo\Translation';
FileInfo = '\StringFileInfo\%0.4s%0.4s\';
var
BufSize, HWnd: DWORD;
VerInfoBuf: Pointer;
VerData: Pointer;
VerDataLen: Longword;
PathLocale: String;
begin
// 必要なバッファのサイズを取得
BufSize := GetFileVersionInfoSize(PChar(Application.ExeName), HWnd);
if BufSize <> 0 then
begin
// メモリを確保
GetMem(VerInfoBuf, BufSize);
try
GetFileVersionInfo(PChar(Application.ExeName), 0, BufSize, VerInfoBuf);
// 変数情報ブロック内の変換テーブルを指定
VerQueryValue(VerInfoBuf, PChar(Translation), VerData, VerDataLen);
if not (VerDataLen > 0) then
raise Exception.Create('情報の取得に失敗しました');
// 8桁の16進数に変換
// →'\StringFileInfo\027382\FileDescription'
PathLocale := Format(FileInfo + KeyWordStr[KeyWord],
[IntToHex(Integer(VerData^) and $FFFF, 4),
IntToHex((Integer(VerData^) shr 16) and $FFFF, 4)]);
VerQueryValue(VerInfoBuf, PChar(PathLocale), VerData, VerDataLen);
if VerDataLen > 0 then
begin
// VerDataはゼロで終わる文字列ではないことに注意
result := '';
SetLength(result, VerDataLen);
StrLCopy(PChar(result), VerData, VerDataLen);
end;
finally
// 解放
FreeMem(VerInfoBuf);
end;
end;
end;
// テスト
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := GetVersionInfo(vrFileVersion);
Label2.Caption := GetVersionInfo(vrLegalCopyright);
end;
参照: [Delphi-ML:31478] [Delphi-ML:37794] <アプリケーション> <ダイアログ>
0146 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/11 osamu rev 1.4 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 2004/03/04 osamu 編集
ブレークポイントで停止したときに IDE がアクティブにならない
Windows98 に移行してから、ブレークポイントで停止したときの挙動が変わりました。
フォーカスがDelphi IDE に移らず、デバッグ中のプログラムに残ったままなのです。
これを改善するためのエキスパート focusmgr.zip が、Delphian World
http://www.delphianworld.com/ で入手可能です。
(別件)
win.ini ファイルを編集することでも対応できます。
このファイルの[Compatibility95] セクションに(なければ追加し)、
DELPHI32=0x00000002
と記述するだけです。
こちらについての詳細は、以下をご覧ください。
Microsoft のサポート技術情報
W98:メッセージボックスがデスクトップの背後に隠れる
文書番号: J044951
参照: [Delphi-ML:24961] [Delphi-ML:25050] <バグ>
0086 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/08 osamu rev 1.7 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 2004/03/04 osamu 編集
コンパイラを識別するための定義済みシンボル
Pascal コンパイラの バージョン識別子です。
http://3932.rapidforum.com/topic=100288647371
http://www.adug.org.au/Reference/VersionSymbols.htm
http://www.blong.com/Tips/KylixTips.htm
及び[Delphi-ML:67458]より。
Compiler Symbol System Symbol BCB?
Turbo Pascal 4 Ver40 DOS -
Turbo Pascal 5.0 Ver50 DOS -
Turbo Pascal 5.5 Ver55 DOS -
Turbo Pascal 6.0 Ver60 DOS -
Turbo Pascal for Win 1.0 Ver10 Win16 ???
Turbo Pascal for Win 1.5 Ver15 Win16 ???
Borland Pascal 7 Ver70 ??? ???
Delphi 1.0 Ver80 Win16 Windows
Delphi 2.0x Ver90 Win32 Win32
C++ Builder 1 Ver93 Win32 Win32 BCB
Delphi 3 Ver100 Win32 Win32
C++ Builder 3 Ver110 Win32 Win32 BCB
Delphi 4 Ver120 Win32 Win32
C++ Builder 4 Ver125 Win32 Win32 BCB
Delphi 5 Ver130 Win32 Win32
C++ Builder 5 Ver130 Win32 Win32 BCB
Kylix1 Ver140 Linux LINUX
Delphi 6 Ver140 Win32 Win32
C++ Builder 6 Ver140 Win32 Win32 BCB
Kylix2 Ver140 Linux LINUX
その他、CPU386、LINUX32、POSIX(32)、PIC、ELF なども状況により利用可能です。
また、Kylix からは不等号を使った条件分岐ができます。
条件コンパイルするには、[Delphi-ML:67458], [Delphi-ML:67474], [Delphi-ML:67489] を参考にして、
{$IFDEF VER80} {Delphi1} {$ENDIF}
{$IFDEF VER90} {Delphi2} {$ENDIF}
{$IFDEF VER93} {Builder1} {$ENDIF}
{$IFDEF VER100} {Delphi3} {$ENDIF}
{$IFDEF VER110} {Builder3} {$ENDIF}
{$IFDEF VER120} {Delphi4} {$ENDIF}
{$IFDEF VER125} {Builder4} {$ENDIF}
{$IFDEF VER130}
{$IFDEF BCB} {Builder5}
{$ELSE} {Delphi5} {$ENDIF}
{$ENDIF}
{$IFDEF CONDITIONALEXPRESSIONS}
// Kylix1 以上は RTLVersion を持っているので
{$IF RTLVersion < 14.20 - 0.001}
// こういう形で処理できる
// "- 0.001" の部分は2進小数と10進小数との変換誤差を
// 吸収するためのダミー定数 → [Delphi-ML:67489] を参照
{$IFEND}
{$IF Declared(CompilerVersion)}
// Delphi6 以上では CompilerVersion も利用可能
{$IF CompilerVersion < 14.10 - 0.001}
// Kylix1 から Builder6 までに対する処理
{$IFEND}
{$IFEND}
{$ENDIF}
などとします。
ちなみに、中村さんの [Delphi-ML:67486] によれば、
RTLVersion CompilerVersion
Kylix1 14.00 なし
Delphi6 14.10 14.01
Delphi6 Update Pack 1 14.11 14.01
Delphi6 Update Pack 2 14.20 14.01
C++Builder6 14.20 14.01
Kylix 2 14.20 14.10
とのことですが、Nobuyuki Nakashima さんの [Delphi-ML:67489] によれば、2進小数と10進小数との変換誤差で、上記の値ぴったりにはなりません。コード例のように、誤差を考慮した対処が必要です。
http://www.delphianworld.com/direct.html?id=MI0062
のようなインクルードファイルを用意すると楽ができます。
参照: [builder:5430] [Delphi-ML:57660] [Delphi-ML:67458] [Delphi-ML:67474] [Delphi-ML:67486] [Delphi-ML:67489]
0184 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/05/11 花井@自宅 rev 1.3 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 2003/06/25 osamu 編集
「アドレス????????でエラーが発生」からエラー位置を知る
「EAccessViolationがモジュールHOGEHOGE.EXEの0005E1D9で発生しました。モジュール'HOGEHOGE.EXE'のアドレス0045E1D9でアドレスFFFFFFFFに対する読み込み違反がおきました。」
などというメッセージから、エラー発生のソース中での位置を調べることができます。
(IDE 上から)
Delphi の統合環境上のメニュー [検索][エラーの検索] でアドレスを指定します。エラーの起きた場所が見つけられると、その位置にカーソルが移動します。
(コマンドラインから)
コマンドラインコンパイラ(dcc32.exe)が使えます。
(delphi 3の場所)\bin\dcc32 -f5E1D9 hogehoge.dpr
とかすると
Delphi for Win32 Version 10.0 Copyright (c) 1983,97 Borland International
hogehoge.dpr(20)
UNIT1.PAS(775) Target address found.
strcopy(p, title);
^
のように表示されます。ソースのない部分とかWindowsの中で起きている場合は 'target address not found' になります。
ただし、これを使うには、ライブラリパスを指定しておく必要があります。
コマンドラインコンパイラの場合、ライブラリパスは -u オプションで指定します。引数なしで dcc32 を起動すると、オプションの種類が分かります。
常時指定するオプションは dcc32.exe と同じディレクトリにある dcc32.cfg に書き込んでしまっても OK です。こんな感じです。
----------^ dcc32.cfg
-aWinTypes=Windows;WinProcs=Windows;DbiProcs=BDE;DbiTypes=BDE;DbiErrs=BDE
-uE:\DELPHI3\Lib\User;E:\DELPHI3\Lib;E:\DELPHI3\Lib\Delphi2
----------$
追記:コンパイル時に map ファイルを作成しておけば IDE が無くても対応行が分かるそうです。
[Delphi-ML:68565][Delphi-ML:68566][Delphi-ML:68574][Delphi-ML:68592]
参照: [Delphi-ML:19322] [Delphi-ML:4975] [Delphi-ML:68565] [Delphi-ML:68566] [Delphi-ML:68574] [Delphi-ML:68592]
0341 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 2003/06/25 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 2003/06/25 osamu 編集
Delphi の格言
[Delphi-ML:68385] から始まったツリーなんですが、まとめるに当たって編集者の個人的な好みが反映されています。ご容赦。
1) リソースの取得と開放は try〜finally〜end を使うべし。[Delphi-ML:68385]
2) Assert を使いまくれ。[Delphi-ML:68385]
3) メソッドを override するとき、override キーワードが抜けていないか常にチェックせよ。[Delphi-ML:68385]
4) Except で例外を処理するとき、raise で例外を再生成する必要がないか常にチェックせよ。[Delphi-ML:68385]
5) with文を使用するのは控えること[Delphi-ML:68385][Delphi-ML:68402]
6) フォームは自動生成ではなく自分で明示的に生成しよう![Delphi-ML:68386][Delphi-ML:68402]
7) AnsiString, WideString, Interface, Variant, 動的配列を含むレコードを動的に確保するときは New, Dispose を使うか、動的配列でメモリを確保せよ[Delphi-ML:68387][Delphi-ML:68423]
8) Application.ProcessMessages はその危険性を充分認識して使え。[Delphi-ML:68387]
9) VCL のソースをよく読もう。[Delphi-ML:68387]
10) RECORD に AnsiString/WideString/DynArray を不用意に使うな。[Delphi-ML:68391]
11) RECORD や ARRAY は PACKED が必要か考えろ。[Delphi-ML:68391]
12) 1行処理でも begin 〜 end は必ず付けよう。[Delphi-ML:68401]
13) 「名は体を表す」 変数名やクラス名、コンポーネント名は意味のわかる単語で。[Delphi-ML:68401]
14) バリアント変数の型変換はなるべく関数経由で。[Delphi-ML:68402]
15) try 〜 exceptはエラー情報の損失を最小に。[Delphi-ML:68402]
16) プロパティと同一名をメソッドの仮引数名に使わない。[Delphi-ML:68402]
17) イベントハンドラ内に細かい処理を書かない。[Delphi-ML:68402]
18) 他のフォーム内のコンポーネントは直接触らず、メソッドかプロパティ経由で。[Delphi-ML:68402]
13) 状態変化を伴うメソッド(C++での non-const method)は、なるべく関数でなく手続きに[Delphi-ML:68402]
14) プロジェクトで開発するときは基底モジュールを用意してフォームの継承を活用する[Delphi-ML:68408]
15) TThreadからVCL(TFormとか)を参照するときは必ずSynchonize! [Delphi-ML:68411]
16) public で 非virtual なメソッドは極力再定義するな。[Delphi-ML:68420]
17) オブジェクトが上位から継承する仮想メソッドを呼び出すときは inherited をつけて呼び出すか、そうしないかをよく考えよ。[Delphi-ML:68420]
18) デストラクタは、必ず destroy という名にして、必ず仮想メソッドにする。[Delphi-ML:68420]
19) コンストラクタは protected にしてはいけない[Delphi-ML:68420]
20) New で確保したメモリを破棄するときは、New に渡したポインタと同じ型のポインタを Dispose に渡せ[Delphi-ML:68423]
21) コメントは必要最小限にして、極力コードの可読性を高めよ[Delphi-ML:68429]
22) デフォルト引数は使わず、オーバーロードを使え。[Delphi-ML:68433]
23) {ObjExportsAll On} を忘れずに。[Delphi-ML:68433]
24) 名前だけが異なる複数のコンストラクタは作らない。[Delphi-ML:68433]
IDEの格言
1) アプリケーションをリリースするときは、map ファイルを作るのを忘れずに。[Delphi-ML:68385]
1b) 外に出したようなリリース版は、*.dcu をすべて保存しておいて Delphi を起動して「エラーの検索」を活用する[Delphi-ML:68572]
2) たくさんウィンドウを開いているときは ALT+0 を活用せよ。[Delphi-ML:68385]
3) コンパイルオプションは Ctrl+O+O でソースに埋め込むとIDE のコンパイルオプションの設定に左右されないソースが作れる。[Delphi-ML:68385]
4) デフォルトのコンパイルオプションの変更はトラブルの元。[Delphi-ML:68385]
5) Delphi をインストールしたら「環境オプション]→[設定]→[自動保存の設定]→[エディタファイル]をチェックしよう。[Delphi-ML:68420]
コンポーネントの格言
1) OnExit イベントでダイアログボックスを表示するな。[Delphi-ML:68385]
2) コンポーネントの Loaded メソッドが呼ばれることを仮定したコンポーネントを作ってはいけない。[Delphi-ML:68385]
3)自動生成されるコンポーネント名をそのままでほったらかすな。意味のわかりやすいコンポーネント名に変えろ。[Delphi-ML:68398][Delphi-ML:68402]
番外編
1) 『プログラミング作法』を読もう。[Delphi-ML:68404]
http://www.ascii.co.jp/books/detail/4-7561/4-7561-3649-4.html
人間関係の格言???[Delphi-ML:68543]
1.感情的に物事を判断しない。
2.例え正しい事でも、言い方や伝え方には気を使う。
3.コーディングスタイルには、ある種の宗教的要素が存在する事を認めて無駄な議論にならないように。
(みんな、自分のスタイルが正しいと信じている。)
4.ユーザーがどのように使い運用するのかを常に考える。
(ユーザーとのコミュニケーション無しに役立つソフトはできない。)
5.最初から完全なソフトウェアを目指そうとしてはいけない。
(実際に運用してみないと分からないもんです。
役立つソフトであれば仕様変更は必ずあります。必要最低限の機能を早くリリースするように心がけましょう。)
参照: [Delphi-ML:68385] <PASCAL>
0335 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 2003/06/25 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 2003/06/25 osamu 編集
Install Shield Express でアンインストール時にレジストリを削除できない
> Delphi3.1に付属の InstallShield Express にてインストール時
> に設定したキーをアンインストール時に掃除させようとしているの
> ですがうまくいきません。(キーが全く削除されない)
私もキーが削除できなくて困った経験があり、何かのショー(忘れました)で、インストールシールドをデモしているブースがあったので、聞いてみたところ、Delphi付属のInstallShieldでは「出来ません」という簡単な回答でした。
では、どうすればよいかと尋ねたところ、Professional版(有料)を購入し、自分でプログラミングしてください、ということでした。(ほかにもいろいろな機能を持っているそうです)
参照: [Delphi-ML:32275] <配布>
0332 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 2003/06/25 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 2003/06/25 osamu 編集
DLL にブレークポイントが設定できない
今までWin2000 + Del5Entの環境で開発していました。OSをWinXPに変えたところ、DLLのデバッグができなくて困っています。
D5 + WinXP では DLL のデバッグができないようです。
D7 では正常に動作するとの報告があります。
参照: [Delphi-ML:72312] [Delphi-ML:73399] <バグ> <デバッグ> <DLL>
0317 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 2002/05/17 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 2002/05/17 osamu 編集
異なるバージョンのDelphiを1つのPCに共存させる
基本的に問題は起こりません。ただし、古いものから順に入れていったほうが良いと思われます。気をつけるべき点としては、
最終的に *.dpr などのファイルがどのバージョンのDelphiに関連付けられるか。
BDE のバージョンに依存するコードが無いか。
delphimm.dll など、同じ名前でバージョンの異なるDLLで問題が起こらないか。
といったところでしょうか。
*.dpr などのファイルを複数のバージョンから簡単に開けるようにするには、レジストリの HKEY_CLASSES_ROOT\DelphiProject\Shell 以下に
[HKEY_CLASSES_ROOT\DelphiProject\Shell\Open3]
@="Delphi&3で開く"
[HKEY_CLASSES_ROOT\DelphiProject\Shell\Open3\command]
@="\"D:\\Programs\\Borland\\Delphi 3\\BIN\\Delphi32.exe\" \"%1\""
みたいなそれぞれに対応するキーを作っておくと、Explorer から右クリックで任意のバージョンの Delphi でそれを開くことができます。
参照: [Delphi-ML:67330] [Delphi-ML:67329]
0311 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 2001/06/05 濱野 rev 1.3 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 2001/06/06 濱野 編集
<Delphi Install Dir>\BINディレクトリの中のファイル
DelphiのインストールされているBINディレクトリには
アプリケーション以外にも様々なファイルが存在します。
その中でIDE(Delphi32.EXE)と同名のファイルがいくつか
存在し、これらはレジストリ以外のIDEの設定を保存する
のに使用されているようです。
[Delphi 3/4]
.dci : コードテンプレート(テキスト)
.dct : コンポーネントテンプレート(バイナリ)
.din : メニューのキャプションで和名を使ったときの
オブジェクト命名表(テキスト)
.dmt : メニューテンプレート(バイナリ)
.dro : オブジェクトリポジトリのプロパティ(テキスト)
.dsk : IDEの表示状態(テキスト)
Delphi32.dciやDelphi32.dinはテキストエディタで編集
出来ますがその他は不整合が出る恐れがあるためIDE以外
では弄らないほうが無難です。
参照:
0310 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 2001/06/02 濱野 rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 2001/06/02 濱野 編集
フォームの新規作成のデフォルトを変更したい
例えばはじめからScaled=Falseにしたい、
文字は固定ピッチで大きめのフォントにしたい、
フォームの位置、大きさ、表示状態を最大化で標準化したい、etc....
こういう時、元になるフォームを[プロジェクト]-[リポジトリに追加]
でリポジトリに登録しておき、[ツール]-[リポジトリ]で登録した
フォームを選択して、[フォームの新規作成時に使用]にチェックを入れて
おけばスピードバーや[ファイル]-[フォームの新規作成]を選んだときに
リポジトリに登録したものと同じ内容でフォームを作成することが出来ます。
ただしあくまでもコピーが作成されるだけなので元のフォームを変更しても
その変更は反映されません。そのような変更が予想される場合は[ファイル]
-[新規作成]で[継承]を選んで使用すると後々便利です。
コントロールのデフォルト変更には[コンポーネント]-
[コンポーネントテンプレートの作成]を使用するといいでしょう。
Delphi 5からはさらにフレーム機能という便利な機能もあります。
参照: <フォーム>
0281 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/10/07 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/10/07 osamu 編集
文字列リソースの編集ツール - 文字列テーブルエディタ
> .RCファイルは手でも書けるということですが、ツールがあれば使
> いたいと思いましたのでヘルプを探してみました。
> すると、Delphi4のヘルプに、「文字列テーブルエディタ」という
> ものがあったのですが使い方が分かりません。
これの表示の仕方ですが、
1.適当なプロジェクトを開く
もちろん、いじりたいリソースが resourcestring で定義されている
プロジェクトです。エラーメッセージだけ編集するなら resourcestring
がなくても OKAY(エラーメッセージもこれでいぢれるんですね!)
2.新規作成 → リソースDLL
対象になる dfm を追加し、リソースDLLのプロジェクトを作成して
ください。
3.表示 → プロジェクトグループ
プロジェクトグループの一覧が出ます。(すでに出てないなら)
ここから、2 で作成した言語のプロジェクトを開いてください。
4.言語.rc をダブルクリック
これでOK!
参照: [Delphi-ML:34134] <その他Windows関連> <Windows>
0276 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/09/27 西坂良幸 rev 1.2 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/09/27 西坂良幸 編集
アップリケーションにサウンドリソースを埋め込んで使いたい。
リソースファイルには、*.WAVファイルを埋め込むことが出来ます。しかし、これは手作業で行わなければなりません。
たとえば、TEST.WAV というファイルがあるとします。
・このファイルをproject1.dprと同じディレクトリに起きます。
・メニューから[ファイル|新規作成−テキスト]を選びます。
・このテキストに、
MYSOUND WAVE TEST.WAV
と1行を書き込み、PROJTEST.rc(適当でよい)という*.rcファイルとしてセーブします。
※ TEST.WAVが同じディレクトリでないときはフルパスで指定
※ リソースは、原則、大文字です。
・binディレクトリにあるbrcc32.exeで、*.resファイルを作成します。
brcc32.exe PROJTEST.rc
※ コマンドラインEXE であることに注意
・project1.dprを開き作成したリソースファイルを書き込みます
・・省略・・・
{$R *.RES} // デフォルトである
{$R projtest.res} // ←ここを書き加える
begin
Application.Initialize;
・・省略・・・
以上で、プロジェクトの再構築を行えば、EXEの中にTEST.WAVのデータが埋め込まれます。
Demosディレクトリの中にあるリソースエクスプローラの見本をコンパイルして、このプロジェクトのEXEファイルを読み込むと、WAVEリソースが出来ていることがわかります。
以下は、簡単な使用方法です。
// 音を鳴らす
procedure TForm1.Button1Click(Sender: TObject);
begin
PlaySound('MYSOUND',HInstance, SND_RESOURCE or SND_ASYNC);
end;
// 停止させる
procedure TForm1.Button2Click(Sender: TObject);
begin
PlaySound(nil, 0, SND_RESOURCE);
end;
上記の場合、SND_RESOURCE は必ず必要です。
また、SND_ASYNCをSND_SYNCにすると終わるまで制御が戻りません。
参照: [Delphi-ML:8787] [Delphi-ML:12338] <アプリケーション> <その他Windows関連> <Windows>
0013 D1 D2 D3 D4D5 D6 D7 3.1 95 98 作成: 1999/02/08 osamu rev 1.9 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/09/08 osamu 編集
Delphi3 でコンポーネントパレットを複数行にする
RegEdit.exeで
キー :"HKEY_CURRENT_USERS\Software\Borland\Delphi\?.0\Desktop"
名前 :"TabMultiLine"
文字列:"1"
を追加する。
参照:
0001 D1D2 D3 D4 D5 D6 D7 3.195 98 作成: 1999/02/08 osamu rev 1.2 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/09/06 osamu 編集
Delphi 2.0/3.0でCPUウィンドウを出す
RegEdit.exeで
キー :"HKEY_USERS\.Default\Software\Borland\Delphi\?.0\Debugging"
名前 :"EnableCPU"
文字列:"1"
を追加する。
参照: [Delphi-ML:6088]
0229 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/08/30 osamu rev 1.3 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/08/30 osamu 編集
Pascal 版の yacc & lex
Turbo PASCAL 版の yacc と lex のセットです。
http://www.idiom.com/free-compilers/LANG/Lex-1.html
http://www.filelibrary.com/Contents/DOS/77/17.html
のあたりに、lyprg.zip とか、 lex_yacc.zip とかいう名前で、
転がっています。
数式評価ルーチンくらいならこれで簡単に書けますね。
どっかに Object Pascal のパーサ転がってませんかね?
参照: <PASCAL>
0185 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/05/12 花井@自宅 rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/05/12 花井@自宅 編集
コードエディタで「キーボードマクロ」を使う
[Ctrl] + [Shift] + R で、動作の記録 On/Off
[Ctrl] + [Shift] + P で、記録した動作の再生
参照: [Delphi-ML:24437]
0076 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/08 osamu rev 1.3 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/05/12 花井@自宅 編集
コードエディタで選択部分をまとめてインデントする
デフォルトのキーマップなら、次のショートカットが使えます。
[Ctrl] + [K] + [I] インデント
[Ctrl] + [K] + [U] アンインデント
もしくは
[Ctrl] + [Shift] + [I] インデント
[Ctrl] + [Shift] + [U] アンインデント
ヘルプの「キーボードショートカット」を見ると、他にも便利な機能を発見することができるかもしれません。
参照:
0075 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/08 osamu rev 1.2 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/05/12 花井@自宅 編集
コードエディタで矩形領域を選択する
(キーボード)
デフォルトキーマップでしたら、
[Alt] + [Shift] + 矢印キー
で、できます。ただ、この後は普通に選択しても矩形になってしまいます。
元の選択モードに戻すのは、
[Ctrl] + [O] + [K]
です。ちなみに、矩形選択モードへは
[Ctrl] + [O] + [C]
で行けます。
(マウス)
Altキーを押しながら、エディタ領域をマウスでドラッグすればよいです。
こちらはキーボードと違って一時的に矩形選択モードになるだけなので便利です。
参照: [Delphi-ML:24425] [Delphi-ML:24478]
0167 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/11 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/02/11 osamu 編集
デバッグ中に関数評価の戻り値をチェックしたい
> VB では ?関数名(引数) とか打ってエンターすると値が表示されます。
> でもこればかりはインタプリタ言語の特権ですね。
Delphi でも CTRL+F7 で 関数名(引数) とやって結果が表示されます。
・・・プログラムが一時停止中でないとできませんが。
参照: [Delphi-ML:32133] <デバッグ>
0156 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/11 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/02/11 osamu 編集
デバッグ時にライブラリ内もステップ実行したい
>標準VCL内のステップ実行の様子を、IDEのデバッグ環境
>で見れるようにしたいのですが、方法はあるのでしょう
>か?
標準VCLソース内をステップ実行するやり方であれば、少なくとも2通りあります。
1) ライブラリパスの設定変更による方法
a. メニュー「ツール」-「環境オプション」の[ライブラリ]-<ライブラリパス>に
標準VCLソースへのパス(〜\Source\VCL)を追加。
<〜\Source\Rtl\Winも加えるとなお良し。Rtl\Sysはやめるが良し。(--;) >
b. メニュー「プロジェクト」-「オプション」の[パッケージ]-<実行時パッケー
ジを使って構築>のチェックを外す。
# b.は、標準VCL内のステップ実行をしたい時にだけ行います。
# a.は常にこの状態にしておいても問題はないでしょう。(私は障害未経験です。)
# そして、こうしておくととても便利です。CTRL + ENTER のショートカットで
# 標準VCLを読み出せるようになります。(^^)
2) VCLソースをプロジェクトに加える方法
<つい最近、このMLで見かけた方法です。どなたの方法かは...失念。>
a. メニュー「プロジェクト」-「プロジェクトに追加」で、
デバッグしたい標準VCLソースをプロジェクトに追加する。
[注]
1)のやり方は、ソースとDCUとのパッチ状況が食い違っている環境(Release-1等) ではパッチが無に帰すかもしれません。何らかの対策を行いましょう。
参照: [Delphi-ML:30414] <デバッグ>
0114 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/08 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/02/08 osamu 編集
Fortran のソースを C に変換するツール
F2C という FORTRAN to C translator を BCB1 用に移植したものがあります。
BCB3 でそのまま使えるかは未確認です。
ただ、ソースも丸ごとはいっているので、libF77.lib と libI77.lib、心配なら f2c.exe も BCB3 でリコンパイルすれば使えるかもしれません。
Makefile.BCB というので、コマンドラインからリコンパイルするようにしてあります。
BCB1 なら、make -f Makefile.BCB で問題なくコンパイルできます。
http://www.annie.ne.jp/~shimaden/
参照: [builder:6207] <C++>
0117 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/08 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/02/08 osamu 編集
Delphi で DOS のアプリを書く方法
[A1]
http://www.geocities.com/SiliconValley/Park/4493/
にある 32 ビット DOS エクステンダで Win32 Console 実行ファイルをMS-DOS 実行ファイルに変換できます。
どの API が使用できるのかは未確認ですが・・・・
[A2]
Delphi1の場合、DOS用Turbo Pascalの最終バージョンであるBorland Pascal 7.0付属のライブラリソースを元にしてDOS用ライブラリをでっちあげ、かつコマンドラインコンパイラでオプション-cdをつけてコンパイルすれば、DOS プログラム用のコンパイラとして動かすことができます。
ライブラリの構築にBP7が必要なので、「Delphiだけで」というわけにはいきませんが、一度ライブラリを作ってしまえばOKということです。
ただ、このライブラリでっち上げが「すげー手間」なのでお勧めしません。
昔はCompuServeにライブラリソースの差分が上がってたんですけど、さすがにもう消えているはずです。
現実的には、どうせライブラリ作成過程で必要になるBP7を素直に使うのが正常な判断というものでしょう。
#私?BP7も持ってたから試しましたとも、D1日本語版すら出てない頃に(^^;
参照: [Delphi-ML:22238] [Delphi-ML:22240] <Windows>
0126 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/08 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/02/08 osamu 編集
*.h ファイルから *.pas ファイルを作るコンバータ
最終的にご自分で変換するときの為に、サポートツールをご紹介します。
これらは、*.h -> *.pas への自動変換を行ってくれます。
それぞれに得手不得手がありますので、おいしいとこだけ つまんでください。(^^)
1. 熊木さんがこのMLで配付なさっていた H to Pas Converter
[Delphi-ML:11748] が最新版?
おっと、最新版は黒田 Dycoon さんのページにあるそうです。
http://www.ceres.dti.ne.jp/~dycoon/
2. Command-line HeadConv C DLL header converter (HeadConv.exe [HeadConv.zip])
Dr.Bob's Delphi Clinic
http://www.drbob42.com/delphi/default.htm
(ページ左のリンク "Files to Download" から取得できます。)
3. Header Translator (htrans.exe [htr034b.zip])
Alexander Staubo's Web Page --Technical stuff
http://www.mop.no/~alex/
参照: [Delphi-ML:23153] [Delphi-ML:22638] [Delphi-ML:11748] <C++> <PASCAL>
0127 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/08 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/02/08 osamu 編集
任意の実行ファイルが DLL などからインポートしている関数の一覧を得る
>ある実行ファイルについて、それが DLL などからインポートしている関数の
>一覧を得るには、どうすれば良いでしょうか。
Delphi3ならtdump.exeというのが付属していると思います。
ちなみに、手元のPCでは以下のファイルがそれです。
C:\Program Files\Borland\Delphi 3\BIN\TDUMP.EXE
引き数なしで起動すると簡単な使用方法が表示されます。
参照: [Delphi-ML:22690]
0071 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/08 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/02/08 osamu 編集
C++ の関数の親子関係をレポートするツール
以下の場所に「PBrows32」というフリーソフトがあります。
http://www01.tcp-ip.or.jp/~world/free/othprogram.html
参照: [builder:4912] <C++>
0074 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/08 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/02/08 osamu 編集
Delphi3のコード補完機能で選択肢をソートして表示させる
ポップアップウィンドウが開いた時点で、マウスをその中に合わせて右ボタンをクリックすると表示順をスコープ順からアルファベット順に変更する事ができます。
参照: [Delphi-ML:20349]
0077 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/08 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/02/08 osamu 編集
コードエディタで「しおり」を使う
デフォルトのキーマップならば[Shift]-[Ctrl]+[数字キー]でしおりの設定、[Ctrl]+[数字キー]でしおりにジャンプができます。
ヘルプの「キーボードショートカット」を見ると他にも便利な機能を発見することができるかもしれません。
参照:
0080 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/08 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/02/08 osamu 編集
ヘルプ作成用のホットスポットエディタ(SHED.EXE)の入手方法
以下のURLよりダウンロードが可能です。
ftp://ftp.microsoft.com/Softlib/MSLFILES/SHED.EXE
参照: [Delphi-ML:20436] <Windows> <ヘルプ>
0087 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/08 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/02/08 osamu 編集
Delphi1/2で状況依存型のコンポーネントヘルプを作るときの注意
[delphi-cw 127]より。
マニュアルによれば、ヘルプトピックに、決められた形式の B 脚注を入れれば良いことになっているのですが、この時、脚注の書式に気を付けないといけません。
#{\footnote hlp_TNkDIB}
${\footnote TNkDIB}
K{\footnote TNkDIB;NkDIB;DIB}
B{\footnote class_TNkDIB}
などとする変わりに、
#{\footnote # hlp_TNkDIB}
${\footnote $ TNkDIB}
K{\footnote K TNkDIB;NkDIB;DIB}
B{\footnote B class_TNkDIB}
のようにしないと、kwgen.exe がキーワードの読み取りに失敗してしまいます。
参照: <コンポーネント開発> <バグ> <ヘルプ>
0093 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/08 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/02/08 osamu 編集
アプリケーションアイコンの変更が反映されない
IDEでアプリケーションアイコンを変更しても、95のエクスプローラからプロパティで見たときのアイコンを変更することができず、はまることがあります。
これは、Windows 95 のアイコンキャッシュのせいです。何故か、Windows 95 環境では、再起動しようがどうしようが変わってくれない事があります。ファイルをリネームすると変わるので、Windows 95 のバグみたいです。
TWEAK UI に含まれるツールに、アイコンのキャッシュを飛ばすツールが有るらしいので、それを使って見てはいかがでしょうか。
普段、Windows NT 4.0 を使っているのですが、こちらでは普通起こりません。希に起こっても、再起動で必ず解消します。
参照: [builder:5426] <バグ>
0096 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/08 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/02/08 osamu 編集
BCB3 のバージョン情報でキー名が日本語だと不具合
BCB3は標準でバージョン情報が表示できるようになりましたが、キーの名前がが2バイト文字で終わるとバグるみたいです。(標準のキー名(会社、製品名など)は大丈夫)
とりあえず終わりに「.」を打つことで対処しています。
参照: [builder:4937] <バグ>
0098 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/08 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/02/08 osamu 編集
BCB1 から BCB3 へ移動したプロジェクトでのプリコンパイルヘッダ利用
BCB1 のプロジェクトをそのまま BCB3 でコンパイルするととても時間がかかります。これは、BCBのプリコンパイルヘッダ機能が生かされていないためです。
Builder1と Builder3でヘッダ情報のパスが違っています。
具体的には、
#include<vcl\header.hpp> // Builder 1
#include<header.hpp> // Builder 3
というように先頭のvcl\が無くなっています。
実際に読み込むファイル自体は同じなのでコンパイル自体は問題なく行うことができます。
結果として大きなヘッダを毎回読んでいる事になります。
次の要領でヘッダを修正してください。
1.フォーム付き(*.dfm)のユニット
(1) ヘッダファイルを開きます。
(2) 先頭の#includeの塊を#includeを1行だけ残して後は全て削除します。
ただし,手作業で意図的に追加した分は残しておきます。
(3) Ctrl+Sでそのヘッダファイルを保存します。
(4) Builderが自動的に必要なヘッダファイルを挿入してくれます。
(5) (2)で残った行で意図的に追加していないヘッダであれば削除します。
(6) Ctrl+Sで(2)で消した分が挿入されます。
2.ファームがないユニット(コンポーネントなど)
(1) ヘッダファイルを開きます。
(2) #include<vcl\〜.h>となっている行が在ればvcl\の部分を削除します。
(3) Ctrl+S等で保存します。
こっちの場合には,自動的に付加してくれないのでヘッダファイル名の大文
字と小文字も同じにする必要があります。プリコンパイルヘッダは相変わら
ず大文字と小文字を区別しているので,db.hppとDB.hppは別物として認識し
てくれます。
※例でも上げていますが,DB.hppからDb.hppにヘッダ名が変わっているの
でDBアプリを作っている人は注意してください。
なお,BCB3で新しくアプリケーションを作る場合には関係ありませんが,C++で書かれたコンポーネントをインストールする際には注意して下さい。
参照: [builder:5373] <C++>
0026 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/08 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/02/08 osamu 編集
IDEのコードエディタのデフォルトサイズを変更する
http://www.imasy.or.jp/~i16/soft/
にある dopt100.lzh (DelphiOpt.exe) を使うと簡単にできます。
参照: [Delphi-ML:6104]
0041 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/08 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/02/08 osamu 編集
Delphiのインラインアセンブラで MMX コードを使いたい
堀 浩行さんが、MMX コードを db 擬似命令に変換してくれる Delphi3.1 用アドインを公開してくださっています。
http://www.ingjapan.or.jp/hori/
参照: [Delphi-ML:19070]
0045 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/08 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/02/08 osamu 編集
Delphi3.1でオブジェクトインスペクタの表示がおかしい
PCにインストールされているグラフィックカードによって、この現象が起こることがあるようです。
コントロールパネルの[システム]-[パフォーマンス]のグラフィックスのハードウェアアクセラレータを1つ2つ下げてやることで改善されることが多いようです。
参照: [Delphi-ML:19277] <バグ>
0015 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/08 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/02/08 osamu 編集
oDelphi1.0とDelphi2.0/3.0でコンポーネントのソースを共有したい
普通にやると、*.dcr のフォーマットが違うのと、*.dcu の形式が違うという2つの問題が生じます。
この前者を解決する方法が[Delphi-ML:6212]に説明されています。
味噌となるのは、コンポーネントを含むユニットと、コンポーネントを登録するユニット( RegisterComponentsを行うRegister手続きを含むユニット )を分離して記述することです。
実はこれは、VCL自身が採用しているやり方です。
後者については、手ですべての *.dcu ファイルを削除してやるしか方法を思い付きません。
参照: [Delphi-ML:6212] <コンポーネント開発>
0020 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/08 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/02/08 osamu 編集
設計時にフォームがエラーで読み込めず変更もできない
> フォームのActiveControlプロパティにタブシードで
> 隠れている(つまりアクティブシートでない)コントロール
> にのせてあるものをせっていしてしまい、その後セーブ
> はできたのですが、プロジェクトをロードすると以下のような
> エラーがでて、フォームが二度と表示されなくなってしまいました。
.dfmファイルをDelphiのエディタに放り込んでみましょう。
もしくは[ファイルを開く]で.dfmファイルを読み込みます。
すると、.dfmファイルがテキストとして編集できますので、ActiveControlプロパティの設定部分を書き換えられます。
参照: [Delphi-ML:5705] <フォーム>
0014 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/08 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/02/08 osamu 編集
complib.dllが壊れた!また全部のコンポーネントをインストールするの?!
以下のようなファイルを一つ作っておくと、コンポーネントの再インストールの手間がかなり省けます。
この方法はDelphi1.0/2.0のどちらでも使えます。
----------------------------------------------------
unit MyReg;
interface
{インストールしたいコンポーネント}
{ユニットを列挙する }
uses
Stdreg,
Sysreg,
Sampreg,
Ddereg;
{上記のコンポーネントユニットに }
{対応するリソースファイルがあれば}
{インクルード?する }
{$R D:\DELPHI\LIB\STDREG.DCR}
{$R D:\DELPHI\LIB\SYSREG.DCR}
{$R D:\DELPHI\LIB\SAMPREG.DCR}
{$R D:\DELPHI\LIB\DDEREG.DCR}
procedure Register;
implementation
{個々のユニットのRegister手続きを}
{呼び出す }
procedure Register;
begin
Stdreg.Register;
Sysreg.Register;
Sampreg.Register;
Ddereg.Register;
end;
end.
----------------------------------------------------
他のコンポーネントファイルをすべてアンインストールして、あるいは、まったく新しくライブラリを作って、このMyRegのみをインストールすると、中で呼び出した全てのコンポーネントユニットをすべてインストールしたのと同じ効果が得られます。
御自分で作った/ダウンロードしたユニットもここに加えれば、最インストールの手間はほとんどなくなります。
ただし、個々のコンポーネントがライブラリパス以外に含まれている場合には手動でライブラリパスを入力しなければならなくなるので、MyReg.Pas のようなユニットは、中で参照するユニットと同じディレクトリに置いておくのが良いでしょう。
御参考までに。
参照: [Delphi-ML:7402] <コンポーネント開発>
0007 D1 D2 D3 D4 D5 D6 D7 3.1 95 98 作成: 1999/02/08 osamu rev 1.1 B1 B3 B4 B5 B6 B7 NT3 NT4 2K XP 更新: 1999/02/08 osamu 編集
Delphi3.0でDLLにバージョン情報が入らない
Delphi3.0で、「新規作成」から DLL を作ると、「バージョン情報を含める」のオプションを指定しても、効果が無い。
これは、.dpr ファイルに {$R*.RES} の一文が入らないために、リソースファイルはできるのに、リンクされないためだ。
uses節の後ろに手動で{$R*.RES} を書いてやればよい。
参照: [Delphi-ML:19012] <その他Windows関連> <アプリケーション> <Windows> <バグ> <DLL>
[新規作成] [最新の情報に更新]
How To
Lounge
KeyWords
Osamu Takeuchi osamu@big.or.jp
Tips
Delphi
Home