差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| lazarus:helloworld [2025/06/28 17:32] – [ボタンを配置する] Add three images of button putting steps freemikan | lazarus:helloworld [2025/10/17 11:30] (現在) – [初期状態のフォーム] Fix typo freemikan | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | ====== 最初のプログラム Hello World! ====== | + | ====== 最初のプログラム Hello World ====== |
| [[lazarus: | [[lazarus: | ||
| 行 19: | 行 19: | ||
| 次の画像は実際に動作している完成品です。 | 次の画像は実際に動作している完成品です。 | ||
| - | [{{: | + | [{{: |
| 行 161: | 行 161: | ||
| 本来ならコードのすべての部分について丁寧な解説を加えるべきですが、Lazarusの方に注力するためと煩雑になるのを避けるため、このチュートリアルではPascal及びObject Pascalの言語についての解説はしない予定です。 | 本来ならコードのすべての部分について丁寧な解説を加えるべきですが、Lazarusの方に注力するためと煩雑になるのを避けるため、このチュートリアルではPascal及びObject Pascalの言語についての解説はしない予定です。 | ||
| - | もし機会があれば別のところでFreePascalを用いたプログラミング入門なんかを書いてみたい問気持ちが若干あります。 | + | もし機会があれば別のところでFreePascalを用いたプログラミング入門なんかを書いてみたい気持ちが若干あります。 |
| </ | </ | ||
| 行 189: | 行 189: | ||
| <code pascal> | <code pascal> | ||
| + | unit Unit1; | ||
| ... | ... | ||
| type | type | ||
| 行 218: | 行 219: | ||
| ボタンのクリックのイベントはOnClickと名前が決められています。 | ボタンのクリックのイベントはOnClickと名前が決められています。 | ||
| OnClickイベントに対して、ユーザーが自由に記述できるメソッドを結びつけることができれば目的を達成できます。 | OnClickイベントに対して、ユーザーが自由に記述できるメソッドを結びつけることができれば目的を達成できます。 | ||
| - | イベントを処理するメソッドは**イベントハンドラー**と呼ばれます。 | + | イベントを処理するメソッドは**イベントハンドラ**と呼ばれます。 |
| ボタンのOnClickイベントにイベントハンドラを設定する最も簡単な方法は、フォームエディタでボタンをダブルクリックすることです。 | ボタンのOnClickイベントにイベントハンドラを設定する最も簡単な方法は、フォームエディタでボタンをダブルクリックすることです。 | ||
| 行 280: | 行 281: | ||
| ここまでやったところで、一度プロジェクトをビルドして実行しておくとよいでしょう。 | ここまでやったところで、一度プロジェクトをビルドして実行しておくとよいでしょう。 | ||
| + | |||
| + | [{{: | ||
| ==== ボタンのプロパティ ==== | ==== ボタンのプロパティ ==== | ||
| + | あと残っている仕事は、ボタンのラベルを変更することです。 | ||
| + | 日本語も使えることを確認するために、「こんにちは」というラベルに変更してみます。 | ||
| + | |||
| + | Lazarusの各コンポーネントのオブジェクトは**プロパティ**と呼ばれる様々な値を保持しています。 | ||
| + | ボタンの場合はラベルもプロパティによって保持されています。 | ||
| + | これまでラベルと呼んできましたが、プロパティの項目名はCaption(キャプション)です。 | ||
| + | 現時点でボタンのラベルが「Button1」と表示されているのは、Captionプロパティに「Button1」と設定されているからです。 | ||
| + | |||
| + | プロパティを変更するのは、(通常は)画面の左側に表示されている**オブジェクトインスペクタ**から行います。 | ||
| + | オブジェクトインスペクタで目的のプロパティを見つけるには次のステップを踏みます。 | ||
| + | |||
| + | - フォームエディタでボタンをクリックする。もしくはオブジェクトインスペクタの上部にあるコンポーネントでボタンを選択する。 | ||
| + | - オブジェクトインスペクタのプロパティタブからCaptionという項目を探す。もしくはフィルタのところにCaptionと入力して検索する。 | ||
| + | |||
| + | 次の図はCpationプロパティを変更したところです。 | ||
| + | |||
| + | [{{: | ||
| + | |||
| + | この時点でフォームエディタのボタンのラベルに反映されて「こんにちは」に変わっています。 | ||
| + | |||
| + | [{{: | ||
| + | |||
| + | < | ||
| + | [[install# | ||
| + | 少し奇妙な感じがしますが、ソースコードエディタ以外のところではおおよそ問題なく日本語の入力が可能です。 | ||
| + | |||
| + | しかし、絶対に大丈夫とは言い切れないところもあり、もしかしたら環境によってはここでも入力できない場合があるかもしれません。 | ||
| + | 不幸にも入力できなかった場合は、別のテキストエディタなど入力したテキストをコピーして、Lazarus IDEの方にそれを貼り付けるなどの対策が考えられます。 | ||
| + | </ | ||
| + | |||
| + | === ボタンの名前の変更 === | ||
| + | ここでもう一つ重要なプロパティを変更します。 | ||
| + | ほとんどのコンポーネントにはNameというプロパティがあります。 | ||
| + | このプロパティを変更すると、そのプロパティを識別する名前が変わります。 | ||
| + | |||
| + | どういうことかというと、先程「Button1」のCpationを「こんにちは」に変えました。 | ||
| + | ボタンの表示は「こんにちは」に変わりましたが、ボタンそのものの名前はまだ「Button1」のままです。 | ||
| + | この「Button1」という名前はソースコードに現れています。 | ||
| + | |||
| + | <code pascal> | ||
| + | ... | ||
| + | TForm1 = class(TForm) | ||
| + | Button1: TButton; | ||
| + | procedure Button1Click(Sender: | ||
| + | private | ||
| + | |||
| + | public | ||
| + | |||
| + | end; | ||
| + | ... | ||
| + | ... | ||
| + | procedure TForm1.Button1Click(Sender: | ||
| + | begin | ||
| + | ShowMessage(' | ||
| + | end; | ||
| + | ... | ||
| + | </ | ||
| + | |||
| + | 今作成しているような小さなプログラムでは何も問題はありません。 | ||
| + | しかし、プログラムの規模が大きくなったら読みにくくなることは間違いありません。 | ||
| + | 何より美しくないです。 | ||
| + | |||
| + | オブジェクトインスペクタのプロパティのNameを変更すると、ソースコードもその名前に合わせて変更してくれます。 | ||
| + | 実際にNameを「Button1」から「HelloButton」に変更してみます。 | ||
| + | すると、ソースコードが自動で更新されて次のようになります。 | ||
| + | |||
| + | <code pascal> | ||
| + | ... | ||
| + | TForm1 = class(TForm) | ||
| + | HelloButton: | ||
| + | procedure HelloButtonClick(Sender: | ||
| + | private | ||
| + | |||
| + | public | ||
| + | |||
| + | end; | ||
| + | ... | ||
| + | ... | ||
| + | procedure TForm1.HelloButtonClick(Sender: | ||
| + | begin | ||
| + | ShowMessage(' | ||
| + | end; | ||
| + | ... | ||
| + | </ | ||
| - | * ラベル | ||
| - | * 名前 | ||
| ==== フォームのプロパティ ==== | ==== フォームのプロパティ ==== | ||
| + | 最後に、メインフォームのプロパティも変更しておきます。 | ||
| + | メインフォームにもCaptionプロパティとNameプロパティが存在します。 | ||
| + | |||
| + | * Captionは、設定したテキストが実行時のウィンドウのタイトルになります。 | ||
| + | * Nameは、このフォームコンポーネントを識別する名前です。 | ||
| + | |||
| + | ボタンのときと同じようにしてCaptionとNameの値を変更します。 | ||
| + | オブジェクトインスペクタでForm1を選択するか、フォームエディタでフォームのどこか(ボタンではないところ)をクリックすると、Form1のプロパティが表示されます。 | ||
| + | そこで次の変更を加えます。 | ||
| + | |||
| + | * Captionを「Form1」から「My First App」に変更します。 | ||
| + | * Nameを「Form1」から「MyForm」に変更します。 | ||
| + | |||
| + | 変更が終わると、ソースコードが更新されます。 | ||
| + | 最終的にUnit1の内容は次のようになります。 | ||
| + | |||
| + | <code pascal> | ||
| + | unit Unit1; | ||
| + | |||
| + | {$mode objfpc}{$H+} | ||
| + | |||
| + | interface | ||
| + | |||
| + | uses | ||
| + | Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls; | ||
| + | |||
| + | type | ||
| + | |||
| + | { TMyForm } | ||
| + | |||
| + | TMyForm = class(TForm) | ||
| + | HelloButton: | ||
| + | procedure HelloButtonClick(Sender: | ||
| + | private | ||
| + | |||
| + | public | ||
| + | |||
| + | end; | ||
| + | |||
| + | var | ||
| + | MyForm: TMyForm; | ||
| + | |||
| + | implementation | ||
| + | |||
| + | {$R *.lfm} | ||
| + | |||
| + | { TMyForm } | ||
| + | |||
| + | procedure TMyForm.HelloButtonClick(Sender: | ||
| + | begin | ||
| + | ShowMessage(' | ||
| + | end; | ||
| + | |||
| + | end. | ||
| + | </ | ||
| + | |||
| + | この時点でプログラムを実行すると、最初に提示したプログラムの実行画面と同じ結果が得られます。 | ||
| + | |||
| + | これで完成です。 | ||
| + | |||
| + | |||
| + | ===== お疲れ様でした! ===== | ||
| + | 予定していたよりずっと多くの分量になってしまいました。 | ||
| + | もし最初から順番に追いかけてやってきていたとしたら、結構大変な仕事だったと思います。 | ||
| + | なぜこんな簡単なプログラムのためにこんなに多くのことをやらないといけないんだ、と疑問に思われるかもしれません。 | ||
| + | これだけ多くなってしまったのは、必要なIDEの使い方を逐一取り上げて説明を加えていったからです。 | ||
| + | もしそれらについてすでに知っているなら、大幅に簡略化できます。 | ||
| + | 慣れてしまえばこのページで作成した程度のプログラムなら、数分足らずで作ることができるようになります。 | ||
| + | |||
| + | IDEを利用したプログラミングは、最初の取っ掛かりに時間がかかるのが厄介です。 | ||
| + | 一方で、一度基本を身につけてしまえば、その応用によって新たな機能を覚えるのにあまり時間はかからなくなっていきます。 | ||
| + | このページで学んだことが十分な基本となっているかどうかはわかりませんが、今後のIDEの使用において何らかの助けになれば幸いです。 | ||
| + | |||
| + | |||
| - | * 名前 | ||
