■コードエディタのしおり機能

Delphi2007のIDE(Galileo)では、修正したい手続きや関数に移動するのが大変です。
オブジェクトインスペクタからイベントをダブルクリックした場合やクラスを定義してCtrl+Shift+Cを押した時など どこに作成されているかわからないからです。(基本はアルファベット順なんだけど・・・。)

以前の仕様であれば、コードの最後に追加されているので、特に探す必要はありませんでした。
コードを書いて正しく動作することが確認できれば、手作業で自分が思う位置へ移動させていましたから。

構造ウィンドウからアクセスしてもいいのですが、行数が多くなるとやはり探すのが大変です。
そこでお奨めなのが、しおり機能です。 10カ所しか登録できませんが、下記のようにアクセラレーターキー等でキーボードから操作を行うと移動が楽 になります。


PopupMenuキー → Tキー → 登録したい番号
PopupMenuキー → Gキー → 呼び出したい番号
※もっと簡単にアクセスできます。この記事の最後の追記を参考にして下さい。


但し、間違えて、PopupMenuキー → Jキーを押してしまうと確認もせず、 登録内容がすべてクリアされるのでご注意を(^^;
※ジャンプ(Jump)とか思い込んで、(J)を押してしまいそうになります。
と書いて動作を確認したら、しおりのクリアのアクセラレーターキーは、時々 (I) になっています。
なぜでしょうね?


[20080519追記]
Delphi Acid Floorの toyota 氏よりショートカットを教えて頂きました。
どうもありがとうございました。

<登録>
[CTRL]+[K]を押したあと、数字キーを押す。

<移動>
[CTRL]+[数字] (例えば [CTRL]+[1])

|

☆プロジェクトのバージョン番号が設定できない。

次のように、オプションのバージョン情報で 「バージョン番号を含める」設定用チェックボックスが無効になっていました。

Ver


アプリケーションのアイコンの読み込みボタンも無効だったのでリソースの問題かなと思い、 ソースを見てみると、次のようになっていました。
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

ん?何か足りないような・・・?

ということで、新規に作成したものと比較してみます。
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

そう、原因はわからないけど、{$R *.res}が消えていたんですね。
これを書き加えて、無事解決しました。

|

■イベントが自動作成される位置

■コードエディタが・・・。 で書いていた「ダブルクリックした時に、どこにイベントが自動作成されるのか」という疑問と同じ内容が [borland.public.delphi.non-technical] Code Insertion というツリーで展開されています。
回答として、ランダムな配置ではなく、基本はアルファベット順、そしてアルファベット順が一度崩れてしまうと、ファイルの最後に作成する というようなコメントがあります。 今後どのような話になるのか、注目しています。

|

■履歴マネージャ

昨日、コードを書いてると今まで見たことがない画面が現れました。
リビジョン内容??ん?内容、情報、相違タブって??

初めて、履歴マネージャの存在を知った瞬間でした(笑)

コードとデザインの切り替えには、F12(ショートカット)かツールバーしか使っておらず、 コードエディタ下に履歴なんてタブがあることすら気付かずにいました。
(_Historyフォルダについても、自分できちんとバックアップ取ってるし、こんなフォルダいるのかな? なんて思ってたりして)

ところが今回、偶然、マウスで履歴タブをクリックしたらしく、新たな発見に至ったわけです(^^;
なんとも頼りないDelphi使いです。

|

■コードエディタが・・・。

オブジェクトインスペクタのイベントをダブルクリックすると、宣言部と実現部を自動で作成してくれますよね。 でもDelphi2006頃からだと思うのですが、次のようなことが時々起こります。

オブジェクトインスペクタで、Form1のOnCloseQueryをダブルクリックしたときのものです。

Error1



なんでかな?と思ってコードを調べてみますとこんなことになっていました。

Error2


end.end.の間に挿入されてしまうのです。
あせらなくていいから、落ち着いて処理して!と突っ込みたくなります(笑)


そう言えば、このオブジェクトインスペクタでクリックして自動で実現部を作成してくれる場所について、何か 決まりがあるのでしょうか。 昔のバージョンでは、プログラムの最後に付加されていたように思うのですが、Delphi2006やDelphi2007では どこの行に作成されているのかよくわからないです。

例えば、次のような処理があったとします。
// 新規作成
procedure  TForm1.acNewExecute(Sender: TObject);
begin
  NewNew;
end;

フォームに新しくボタンを配置してダブルクリックすると、 こんなことになってること多くないですか。
せっかく書いたコメントとの間に入ってくるので、ボタンがコメントを横取りしてる感じですね。
// 新規作成
procedure TForm1.Button1Click(Sender: TObject);
begin

end;

procedure  TForm1.acNewExecute(Sender: TObject);
begin
  NewNew;
end;


この「どこに自動作成してくれるのか」という疑問を大阪でのデベロッパーキャンプで、Malcolm Groves氏に直接、いえ、通訳を介して、質問をしたのですが、言葉だけではきちんと伝わらなかったようで 「バグじゃないかな?」という話で終わりました。残念・・・。

|

■同期編集モード

Delphi 2006のエディタで、マウスでコードを選択していくと左側にアイコンが現れます。
(このアイコン、双眼鏡だと思っていたら、どうやら2本のペンをイメージしているようです)
そしてこのアイコンをクリックすると、同期編集モードというものになります。これは、ある変数を書き換えると、その選択範囲内の同じ変数も書き換わるという機能です。マウスを使うと選択範囲が解除されるので、タブキーで移動が正しい使い方のようですね。
(って、書きましたが、選択範囲内であればマウスも使えますね)
今まで、名前の書き換えは、置換やリファクタリングを使っていましたが、これも使えそうです。またまだ知らないというか使っていない機能がたくさんあるんですね。
(コメントアウトにするのに、CRTL+/ で切り替えられるのも今知りました。)

|

■{$REGION}~{$ENDREGION}


{$REGION '説明'}
  いろいろなコード
{$ENDREGION}
とすると、表題付きで折りたためるので、便利です。
実は、最近Visual C#を使ってて、#regionが便利だったのでDelphiでもできないのかなと思い、検索したところ、このブログで再発見したのでした(笑)
ということでDelphi8の時にも書いたのですが、新しいバージョンでも使えるということで同じことを書いておきます。

|

■REGIONって。

Windowsフォームアプリケーションを新規作成してコードをみると、デザイナ管理コードと四角形で囲われている項目があります。
これを展開すると

{$REGION 'デザイナ管理コード'}
   (略)
{$ENDREGION}

というようにREGIONというものが使われています。

これって、Helpで探しても出てこないようですが、上記のように使うと、折りたたまれた時にタイトルのみになり、コードが見やすくなるので、「結構いいかも」って感じです。

|

■IDE 日本語入力の不具合?

IDE内でコメントを日本語で入力しようとするとカーソル位置と違うところで候補が表示され、決定するとカーソル位置にきちんと入力されます。なんでかな??
[環境]
WinXP Pro, IME スタンダード2002 8.1.4004.0, Delphi8 pro

|