mieki256's diary



2026/01/18() [n年前の日記]

#2 [lazarus] Lazarusでクラス名変更ができなくてハマった

Lazarusでプロジェクトを新規作成した直後だと、TForm1 というクラスが作られている。これを TWindowForm にリネームしようとしたらハマった。

該当ワードの上で右クリックして、リファクタリング → 識別子名を変更、を選んで名前を変更したのだけど…。ビルドは通ってくれたように見えるのだけど、その .exe を実行しようとすると、デバッガがエラーを出してくる。

Form resource TWindowForm not found.
For resourceless forms CreateNew constructor must be used.
See the global variable RequireDerivedFormResource.

フォームリソース TWindowForm が見つかりません。
リソースを持たないフォームでは、CreateNew コンストラクタを使用する必要があります。
グローバル変数 RequireDerivedFormResource を参照してください。

意味が分からない…。一体ここからどうしろと…。

Google Geminiに尋ねてみたら以下の修正が必要と言ってきた。

まず、ソースファイル *.pas と紐づけられている *.lfm (フォームのデザインをするためのファイル)が修正されてないから、手作業で修正。
object Form1: TForm1
↓
object Form1: TWindowForm

次に、*.pas の最後のほうの「end.」の前に、以下を挿入。
end.

↓

initialization
  RegisterClass(TWindowForm);
end.

加えて、プロジェクト → プロジェクトソースを表示、で *.lpr を開いて、以下の行があるか確認。
  RequireDerivedFormResource:=True;
  Application.Scaled:=True;

実行 → 掃除して構築、を選択してクリーンビルドをする。結構時間がかかる。

このあたりを試していたらエラーが出ないバイナリを作れた気がする。

Delphi ならこういうエラーに遭遇しなかったあたり、全て自動でリネーム処理をしてくれるのだろう。さすがに有償製品だなと…。

2026/02/03追記 :

一々テキストエディタで編集しなくてもリネームできる方法が分かったのでメモしておく。

ソースコード上でリネーム作業をした後、リネームしたいコンポーネントのプロパティで Name を変更してやるだけで、自動で使用クラス名も変わってくれる模様。

以上です。

過去ログ表示

Prev - 2026/01 - Next
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project