IDE tricks/ja: what changed
Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.
| Old | New | Line | |
|---|---|---|---|
| 1 | 1 | # Open file で新しいファイルを作る | |
| 2 | 2 | ||
| 3 | 3 | 新しいファイルをつくって、保存することができます。または、1回の操作で新しいファイルをファイル名とファイルタイプを指定して、作成することもできます。 | |
| 4 | 4 | ||
| 5 | 5 | ただ、open file (Ctrl+o)で、存在しないファイルを指定します。たとえば、unit1.pasを指定すると、IDEはそのファイルを作るかどうか、尋ねます。 | |
| 6 | 6 | ||
| 7 | 7 | # 新規のユニット、フォーム | |
| 8 | 8 | ||
| 9 | 9 | 0.9.27以降の場合、'New unit' (New form)のスピードボタンを右クリックし、生成するファイルタイプを指定することができます。 IDEIntfか、project templates パッケージで指定することで、別のファイルタイプを登録することもできます。 | |
| 10 | 10 | ||
| 11 | 11 | # IDE マクロ | |
| 12 | 12 | ||
| 13 | 13 | [[IDE Macros in paths and filenames/ja]] | |
| 14 | 14 | ||
| 15 | 15 | # IDEが作成したコマンドラインパラメータをコンパイラで取得する方法 | |
| 16 | 16 | ||
| 17 | 17 | Project -\> Compiler Options -\> Show Options でパラメータをコピーすることができます。ここに、プロジェクトディレクトリまでの相対パスがあります。多くの場合、調整することなく、これをコピーして使うことが出来ます。 | |
| 18 | 18 | ||
| 19 | 19 | これらのパラメータは *.compiled ファイルにも保存されます。たとえば、test1.lpiというプロジェクトに対しては、test1.compiledというファイルが生成されます。これは、単純なテキストのxmlファイルになっていて、オプションやパスを簡単に他のコンピュータにコピーすることができます。 このファイルは実行ファイルが作成されるのと同じディレクトリにおかれます。 | |
| 20 | 20 | ||
| 21 | 21 | パッケージも同じ仕組みになっています。 | |
| 22 | 22 | ||
| 23 | 23 | このように、lazarus IDEがなくても、(願わくばバグがなく、動く)コードをコンパイルすることができます。 | |
| 24 | 24 | ||
| 25 | 25 | # 1つを残して、他のエディタファイルをすべて閉じる方法 | |
| 26 | 26 | ||
| 27 | 27 | gtk環境においては、ソースエディタページは、ページ名の右側に閉じるボタンがあります。Ctrlキーを押しながら、そのボタンを押すと、クリックしたもの以外の全ファイルが閉じます。 | |
| 28 | 28 | ||
| 29 | 29 | # コンポーネントパレット | |
| 30 | 30 | ||
| 31 | 31 | ## パレットの中のコンポーネントを見つける | |
| 32 | 32 | ||
| 33 | 33 | どのページになるかしならくても、コンポーネントの名前を一部でも知っていれば、コンポーネントを見つけることができます。 コンポーネントパレット上で右クリックをして、popupメニューを出します。'Find component'を選択します。 名前の一部をタイプすると、リストがフィルタされます。 | |
| 34 | 34 | ||
| 35 | 35 | ## パレットのコンポーネントのパッケージを開く | |
| 36 | 36 | ||
| 37 | 37 | コンポーネントパレット上で右クリックをして、popupメニューを出します。'Open package'を選択します。 | |
| 38 | 38 | ||
| 39 | 39 | ## パレットのコンポーネントの宣言を見つける | |
| 40 | 40 | ||
| 41 | 41 | コンポーネントパレット上で右クリックをして、popupメニューを出します。'Open unit'を選択します。 | |
| 42 | 42 | ||
| 43 | 43 | # リナックスで、デバッグ中にアプリケーションがフリーズします。 | |
| 44 | 44 | ||
| 45 | 45 | マウスを捕捉しているアプリケーションがgdb(デバッガ)によって停止させられると、X (デスクトップ) がフリーズすることがあります。 | |
| 46 | 46 | ||
| 47 | 47 | ## 2番目のXセッションを使う | |
| 48 | 48 | ||
| 49 | 49 | 2番目のXを次のように開始することができます。 | |
| 50 | 50 | ||
| 51 | - | ||
| 51 | + | ```text | |
| 52 | + | X :1 & | |
| 53 | + | ``` | |
| 52 | 54 | ||
| 53 | 55 | Ctrl-Alt-F7 で、:0 へ切り替えることができます。同様に、 Ctrl-Alt-F8 で :1 へ切り替えることができます。 | |
| 54 | 56 | ||
| 55 | 57 | この後で、2番目のgnomeセッションを次のように開始します。 | |
| 56 | 58 | ||
| 57 | - | ||
| 59 | + | ```text | |
| 60 | + | gnome-session --display=:1 & | |
| 61 | + | ``` | |
| 58 | 62 | ||
| 59 | 63 | ## VNCを使う | |
| 60 | 64 | ||
| 61 | 65 | tightvncserver/realvncserverによる VNCサーバ/クライアントをインストールすることで使うことも出来ます。 | |
| 62 | 66 | ||
| 63 | 67 | サーバを開始するには、 | |
| 64 | 68 | ||
| 65 | - | ||
| 69 | + | ```text | |
| 70 | + | vncserver :1 | |
| 71 | + | ``` | |
| 66 | 72 | ||
| 67 | 73 | セッションも同時に開始されます。vncviewerを通してvncserverに接続します。 | |
| 68 | 74 | ||
| 69 | 75 | ## アプリケーションをセカンドサーバでデバッグする | |
| 70 | 76 | ||
| 71 | 77 | Lazarusではプロジェクトのrun parameterで、"use display"にチェックを入れて :1を入力してください。 | |
| 72 | 78 | ||
| 73 | 79 | これでアプリケーションは2番目のXサーバで実行されます。アプリケーションがデバッグされて停止することがあっても、2番目のXサーバがフリーズするだけで、最初のXサーバーには影響することがないでしょう。 | |
| 74 | 80 | ||
| 75 | 81 | # IDEのコンパイルを速くする | |
| 76 | 82 | ||
| 77 | 83 | Lazarus自身を開発する作業をしていると、IDEを何度もリビルドすることがあります。 もし、次のような裏技をつかうと、沢山のメモリと最新のCPUがあれば、あっという間にIDEをコンパイルすることができます。 | |
| 78 | 84 | ||
| 79 | 85 | - Lazarusのソースは高速なハードディスクにおいてください。ネットワーク上におくと遅くなります。 | |
| 80 | 86 | - 必要なパッケージのみインストールしてください。 | |
| 81 | 87 | - USESVN2REVISIONINC=0 にして、revision.incのアップデートをスキップしてください。 | |
| 82 | 88 | - 部分だけをコンパイルしてください。パッケージ登録が再コンパイルされると、全てのインストールされているパッケージも再コンパイルされます。IDEIntfが再コンパイルされると、すべての設計時パッケージが再コンパイルされます。 | |
| 83 | 89 | ||
| 84 | 90 | # IDEウインドウのソースファイルを探す | |
| 85 | 91 | ||
| 86 | 92 | - IDE ウインドウを開きます. | |
| 87 | 93 | - Ctrl+Shift+F1を押してヘルプエディタを開きます。 | |
| 88 | 94 | - ウインドウのクラス名を覚えて、閉じます。 | |
| 89 | 95 | - 'Find In Files'を使って、そのクラスのソースファイルを探します。 | |
| 90 | 96 | ||
| 91 | 97 | # オブジェクトインスペクタ: Events: Frames: 継承されたイベントにジャンプする | |
| 92 | 98 | ||
| 93 | 99 | オブジェクトインスペクタは、*ClassName.MethodName*として継承されたイベントを表示します。 ダブルクリックすることで、新規のイベントを生成します。 コンボボックス上で、Ctrlとマウスクリックをすると、新規のイベントを生成せずに、継承されたメソッド本体にジャンプします。 | |
| 94 | 100 | ||
| 95 | 101 | # オブジェクトインスペクタ上のイベント(メソッドプロパティ) | |
| 96 | 102 | ||
| 97 | 103 | イベント(メソッドプロパティ)は、特別なプロパティで、アドレスポインタを必要とします。 これらは、設計時には存在しません。 LazarusはDelphi IDEと同じ方法を使っています。 すべてのメソッドの値は、TMethodでキャストできます。 TMethodは、*Data*(オブジェクトかクラスポインタ)と、*Code*(アドレスポインタ)から成っています。 通常、両方ともnilではありません。IDEは*Data*に特別なキー値を設定し、Codeにはnilをセットしています。 これは、次のことを意味しています。 | |
| 98 | 104 | ||
| 99 | 105 | - 実行時は、プログラムが.lfmファイルをロードして、本当のメソッド(Data+Code)が使われます。 | |
| 100 | 106 | - 設計時は、本当のメソッドか、仮のメソッド(Data\<\>nilでCode=nil)のどちらかになっています。 | |
| 101 | 107 | - コンパイラはDelphiとの互換性を保つ形で、メソッド値を比較する機能をもっています。 | |
| 102 | 108 | ||
| 103 | 109 | 次のようにしてはいけません: | |
| 104 | 110 | ||
| 105 | 111 | ``` pascal | |
| 106 | 112 | if OnMyEvent<>nil then OnMyEvent(...); // wrong, because it checks Data too | |
| 107 | 113 | ``` | |
| 108 | 114 | ||
| 109 | 115 | これは、DataとCodeの両方をチェックして、仮のメソッドを実行するかもしれません。結果的にnilにジャンプすることがあります。この場合、例外を生成しますので、たいした害はないかもしれませんが、IDEはユーザーにエラーダイアログを表示します。 | |
| 110 | 116 | ||
| 111 | 117 | 次のように、Assigned関数を使ってください。 | |
| 112 | 118 | ||
| 113 | 119 | ``` pascal | |
| 114 | 120 | if Assigned(OnMyEvent) then OnMyEvent(...); // Codeだけを比較するので正しい | |
| 115 | 121 | ``` | |
| 116 | 122 | ||
| 117 | 123 | また、次のようにしてもいけません。 | |
| 118 | 124 | ||
| 119 | 125 | ``` pascal | |
| 120 | 126 | if OnMyEvent=NewValue then exit; // Codeだけを比較するので正しくない | |
| 121 | 127 | ``` | |
| 122 | 128 | ||
| 123 | 129 | なぜなら、Codeだけを比較するからです。次のようにしてください。 | |
| 124 | 130 | ||
| 125 | 131 | ``` pascal | |
| 126 | 132 | if CompareMem(@FOnMyEvent,@NewValue,SizeOf(TMethod)) then exit; // DataとCodeの両方をチェックするので正しい。 | |
| 127 | 133 | ``` | |
| 128 | 134 | ||
| 129 | 135 | --- | |
| 130 | 136 | *From the Free Pascal wiki, page "IDE tricks/ja", as it stood on 2020-02-17 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* |
