IDE tricks/ja

From Lazarus wiki
Revision as of 07:58, 17 February 2020 by Trev (talk | contribs) (Fixed syntax highlighting)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Deutsch (de) English (en) français (fr) magyar (hu) 日本語 (ja) 한국어 (ko) русский (ru) slovenčina (sk) 中文(中国大陆)‎ (zh_CN)

日本語版メニュー
メインページ - Lazarus Documentation日本語版 - 翻訳ノート - 日本語障害情報

Open file で新しいファイルを作る

新しいファイルをつくって、保存することができます。または、1回の操作で新しいファイルをファイル名とファイルタイプを指定して、作成することもできます。

ただ、open file (Ctrl+o)で、存在しないファイルを指定します。たとえば、unit1.pasを指定すると、IDEはそのファイルを作るかどうか、尋ねます。

新規のユニット、フォーム

0.9.27以降の場合、'New unit' (New form)のスピードボタンを右クリックし、生成するファイルタイプを指定することができます。 IDEIntfか、project templates パッケージで指定することで、別のファイルタイプを登録することもできます。

IDE マクロ

IDE Macros in paths and filenames/ja

IDEが作成したコマンドラインパラメータをコンパイラで取得する方法

Project -> Compiler Options -> Show Options でパラメータをコピーすることができます。ここに、プロジェクトディレクトリまでの相対パスがあります。多くの場合、調整することなく、これをコピーして使うことが出来ます。

これらのパラメータは *.compiled ファイルにも保存されます。たとえば、test1.lpiというプロジェクトに対しては、test1.compiledというファイルが生成されます。これは、単純なテキストのxmlファイルになっていて、オプションやパスを簡単に他のコンピュータにコピーすることができます。 このファイルは実行ファイルが作成されるのと同じディレクトリにおかれます。

パッケージも同じ仕組みになっています。

このように、lazarus IDEがなくても、(願わくばバグがなく、動く)コードをコンパイルすることができます。

1つを残して、他のエディタファイルをすべて閉じる方法

gtk環境においては、ソースエディタページは、ページ名の右側に閉じるボタンがあります。Ctrlキーを押しながら、そのボタンを押すと、クリックしたもの以外の全ファイルが閉じます。

コンポーネントパレット

パレットの中のコンポーネントを見つける

どのページになるかしならくても、コンポーネントの名前を一部でも知っていれば、コンポーネントを見つけることができます。 コンポーネントパレット上で右クリックをして、popupメニューを出します。'Find component'を選択します。 名前の一部をタイプすると、リストがフィルタされます。

パレットのコンポーネントのパッケージを開く

コンポーネントパレット上で右クリックをして、popupメニューを出します。'Open package'を選択します。

パレットのコンポーネントの宣言を見つける

コンポーネントパレット上で右クリックをして、popupメニューを出します。'Open unit'を選択します。

リナックスで、デバッグ中にアプリケーションがフリーズします。

マウスを捕捉しているアプリケーションがgdb(デバッガ)によって停止させられると、X (デスクトップ) がフリーズすることがあります。

2番目のXセッションを使う

2番目のXを次のように開始することができます。

  X :1 &

Ctrl-Alt-F7 で、:0 へ切り替えることができます。同様に、 Ctrl-Alt-F8 で :1 へ切り替えることができます。

この後で、2番目のgnomeセッションを次のように開始します。

  gnome-session --display=:1 &

VNCを使う

tightvncserver/realvncserverによる VNCサーバ/クライアントをインストールすることで使うことも出来ます。

サーバを開始するには、

  vncserver :1

セッションも同時に開始されます。vncviewerを通してvncserverに接続します。

アプリケーションをセカンドサーバでデバッグする

Lazarusではプロジェクトのrun parameterで、"use display"にチェックを入れて :1を入力してください。

これでアプリケーションは2番目のXサーバで実行されます。アプリケーションがデバッグされて停止することがあっても、2番目のXサーバがフリーズするだけで、最初のXサーバーには影響することがないでしょう。

IDEのコンパイルを速くする

Lazarus自身を開発する作業をしていると、IDEを何度もリビルドすることがあります。 もし、次のような裏技をつかうと、沢山のメモリと最新のCPUがあれば、あっという間にIDEをコンパイルすることができます。

  • Lazarusのソースは高速なハードディスクにおいてください。ネットワーク上におくと遅くなります。
  • 必要なパッケージのみインストールしてください。
  • USESVN2REVISIONINC=0 にして、revision.incのアップデートをスキップしてください。
  • 部分だけをコンパイルしてください。パッケージ登録が再コンパイルされると、全てのインストールされているパッケージも再コンパイルされます。IDEIntfが再コンパイルされると、すべての設計時パッケージが再コンパイルされます。

IDEウインドウのソースファイルを探す

  • IDE ウインドウを開きます.
  • Ctrl+Shift+F1を押してヘルプエディタを開きます。
  • ウインドウのクラス名を覚えて、閉じます。
  • 'Find In Files'を使って、そのクラスのソースファイルを探します。

オブジェクトインスペクタ: Events: Frames: 継承されたイベントにジャンプする

オブジェクトインスペクタは、ClassName.MethodNameとして継承されたイベントを表示します。 ダブルクリックすることで、新規のイベントを生成します。 コンボボックス上で、Ctrlとマウスクリックをすると、新規のイベントを生成せずに、継承されたメソッド本体にジャンプします。

オブジェクトインスペクタ上のイベント(メソッドプロパティ)

イベント(メソッドプロパティ)は、特別なプロパティで、アドレスポインタを必要とします。 これらは、設計時には存在しません。 LazarusはDelphi IDEと同じ方法を使っています。 すべてのメソッドの値は、TMethodでキャストできます。 TMethodは、Data(オブジェクトかクラスポインタ)と、Code(アドレスポインタ)から成っています。 通常、両方ともnilではありません。IDEはDataに特別なキー値を設定し、Codeにはnilをセットしています。 これは、次のことを意味しています。

  • 実行時は、プログラムが.lfmファイルをロードして、本当のメソッド(Data+Code)が使われます。
  • 設計時は、本当のメソッドか、仮のメソッド(Data<>nilでCode=nil)のどちらかになっています。
  • コンパイラはDelphiとの互換性を保つ形で、メソッド値を比較する機能をもっています。

次のようにしてはいけません:

if OnMyEvent<>nil then OnMyEvent(...); // wrong, because it checks Data too

これは、DataとCodeの両方をチェックして、仮のメソッドを実行するかもしれません。結果的にnilにジャンプすることがあります。この場合、例外を生成しますので、たいした害はないかもしれませんが、IDEはユーザーにエラーダイアログを表示します。

次のように、Assigned関数を使ってください。

if Assigned(OnMyEvent) then OnMyEvent(...); // Codeだけを比較するので正しい

また、次のようにしてもいけません。

if OnMyEvent=NewValue then exit; // Codeだけを比較するので正しくない

なぜなら、Codeだけを比較するからです。次のようにしてください。

if CompareMem(@FOnMyEvent,@NewValue,SizeOf(TMethod)) then exit; // DataとCodeの両方をチェックするので正しい。