はじめに
巷では ノーコード とか ローコード とやらが流行っているようですね。流石にノーコードとまではいきませんが、ローコードの範疇でアプリケーションを作ってみようと思います。
手順
では、早速やっていきましょう。アプリケーションを作るのに必要な Delphi は 『 12.1 Community Edition』 (無償版) で大丈夫です。
何もしないアプリを作る
1. [ファイル | 新規作成 | Windows VCL アプリケーション] でアプリケーションを新規作成します。
2. [ファイル | すべて保存] で一旦プロジェクトを保存します。適当な場所に保存用フォルダを作って下さい。ここでは EBG
というサブフォルダを作って保存しています。
3. まずは今開いているユニットを保存します。
ファイル名を frmuMain.pas
に変更して保存します。これで、このユニット名は frmuMain
になります。
4. 次にプロジェクトファイルを保存します。
ファイル名を ebg.dproj
に変更して保存します。これで、このプロジェクト名は ebg
になります。実行可能ファイルの名前も ebg.exe
になります。
[プロジェクトマネージャ] を確認してみるとこうなっているハズです。
5.一旦ビルドしてみます。[プロジェクト | ebg をビルド] を実行します。
何も書いていないので何のエラーも出ませんね。
6.ファイルを確認してみます。[プロジェクトマネージャ] の ebg.exe
になっている所を右クリックすると [エクスプローラで表示] があるのでこれを選びます。
ファイルができていますね。
Win32 > Debug
と辿ると、EXE ができています。
7. ebg.exe
をダブルクリックして実行してみましょう。
これで、何もしないアプリができました。基本的なウインドウの動きはできますが、本当に何もできません。
続・何もしないアプリを作る
では次に、何もしないけれども便利なアプリケーション にしてみましょう。
1.フォームデザイナを開く
フォームデザイナとコードエディタは右下のタブ (コード / デザイン) で切り替えられます。ショートカットキーだと〔F12〕
で切り替わります。
2.[オブジェクトインスペクタ] でフォームのプロパティを変更します。コントロールが何も貼り付けられていないので、フォーム (Form1
) が選択がされていると思います。
プロパティを次のように書き替えます。
プロパティ | 古い値 | 新しい値 |
---|---|---|
BorderStyle | bsSizeable | bsNone |
Caption | Form1 | (なし) |
Color | clBtnFace | clWindow |
Name | Form1 | frmMain |
WindowState | wsNormal | wsMaximized |
3.[実行 | 実行] で実行すると画面が真っ白なウィンドウで覆われたと思います。終了は 〔Alt〕+〔F4〕
です。
これで便利なアプリケーションを一つ手に入れられましたね。
...???
Windows 11 のアプリケーションのボーダーは半透明です。Windows Vista とかは Aero Glass で透けてましたよね?〔Alt〕+〔PrintScreen〕
でアプリウィンドウだけのスクショを撮ろうとしても背景にある画像や別のウィンドウが透けていませんでしたか?
ほら、ボーダーに何か見えますね?でも、この EBG.EXE
を実行してからだと何も映り込まないのです。
そして、このEBG.EXE
を実行してからだと〔Windows〕
キーでメニューを出したり〔Alt〕+〔Tab〕
でアプリケーションを選択できますが...デスクトップは見えない のです。散らかりまくったデスクトップ (にあるショートカットアイコン) を他人に晒す危険性がないのです。
つまりは「EBG = Empty Background」という事でした (英語的に正しいかは知りません ^^;)。
続・続・何もしないアプリを作る
では、もう少しアプリケーションとしての体裁を整えていきましょう。
アイコン
Delphi のデフォルトアイコンになっているので変更しましょう。[プロジェクト | オプション] で [プロジェクトオプション] を開きます。
左側のツリーを アプリケーション > アイコン
と辿り、[ターゲット]
を すべての構成 | すべてのプラットフォーム
に変更します。
次のような画面になったら、[アートワークジェネレータ] ボタンを押します。
[アートワークジェネレータ] の初期画面はこうなっていると思うので、値を変更します。
項目 | 古い値 | 新しい値 |
---|---|---|
テキスト | Aa | (全角SP) |
形状 | 楕円形 | 四角形 (角丸) |
[完了]
ボタンを押すとアイコンが生成されます。
[プロジェクトオプション] を [保存]
ボタンを押して閉じます。[プロジェクト | ebg をビルド] を実行すると、アイコンが白い角丸に変わったはずです。
アイコンキャッシュの関係で元のアイコンが表示されているかもしれませんが、コンテキストメニュー (右クリックメニュー) でプロパティを表示してみると現在のアイコンが見れます。
終了
〔Alt〕+〔F4〕
での終了は乱暴なので、ポップアップメニューから終了できるようにしましょう。
[ツールパレット] から TPopupMenu
を探してフォームデザイナに貼り付けてください。
ドラッグで持って行ってもいいですし、ダブルクリックしてもいいです。ツールバーに [コンポーネントツールバー] を表示させているのなら、そちらからでも OK です。
フォームに貼り付けた TPopupMenu
(PopupMenu1
) をダブルクリックするとメニューエディタが開きます。
その状態で [オブジェクトインスペクタ] を見ると、新規作成されたメニューアイテム (青くハイライトされている) が選択されています。
プロパティ | 古い値 | 新しい値 |
---|---|---|
Caption | (なし) | &Exit |
Name | Exit1 | miExit |
Caption に入れた文字列をベースに Name が自動で設定されます (例だと Exit1
)。
[オブジェクトインスペクタ] の [イベント]
タブに移り、OnClick
の右側をダブルクリックして OnClick
のイベントハンドラを作成します。これは名前の通り、このメニューアイテムがクリックされた時の処理です。
自動で生成されたイベントハンドラ TfrmMain.miExitClick()
にアプリケーションを終了するコードを書きます。
procedure TfrmMain.miExitClick(Sender: TObject);
begin
Close;
end;
VCL フォームアプリケーションはメインフォーム (この場合、frmMain
) が閉じられるとアプリケーションが終了するのでこのような処理になります。
[オブジェクトインスペクタ] でフォーム (frmMain
) の [プロパティ]
タブを選択し、 PopupMenu
プロパティで PopupMenu1
を選択します。
[実行 | 実行] で ebg.exe
を実行すると、また真っ白なフォームで覆われますが、任意の場所を右クリックするとポップアップメニューが出てきます。
この Exit
をクリックすると ebg.exe
が終了します。
〔メニュー〕
キーを押して E
を押しても終了させる事ができます。メニューアイテムのキャプションが &Exit
となっていて、環境によっては Exit のように E
に下線が引かれていたと思いますが、これは アクセラレーターキー と呼ばれるもので、そのキーを押すとその項目が実行される事を意味しています。
メニューを表示させずに直接実行させたいのであれば、ShortCut
プロパティにショートカットキー (キーコンビネーション) を登録します。
ショートカットキーが有効なのはウインドウがアクティブな時、つまり一度は ebg.exe
をマウスクリックするなりしなくてはならないのと、ebg.exe
がアクティブかどうかが判断しづらい時にショートカットキーを押して誤爆する可能性も考えてショートカットキーは設定してください。
背景色変更
背景色変更機能も付けましょう。真っ白だと目が痛い事がありますからね。
フォームデザイナに TColorDialog
を貼り付けます。探すのが面倒な時はツールパレットの右上のボックスに数文字入力すると絞り込めますよ。
フォームに貼り付けた TPopupMenu
(PopupMenu1
) をダブルクリックするしてメニューエディタが開きます。
Exit
をクリックしてハイライト状態にして〔Insert〕
キーを 2 回押します (右クリックしてメニューアイテム操作メニューを出す事もできます)。これで 2 つ分の (空白の) メニューアイテムが作られました。
上の空白 (空のメニューアイテム) をクリックしてプロパティを変更します。
プロパティ | 古い値 | 新しい値 |
---|---|---|
Caption | (なし) | &Change Color... |
Name | ChangeColor1 | miChangeColor |
[オブジェクトインスペクタ] の [イベント]
タブに移り、OnClick
の右側をダブルクリックして OnClick
のイベントハンドラを作成します。実はメニューデザイナの方をダブルクリックしても OnClick
のイベントハンドラが生成されます。
自動で生成されたイベントハンドラ TfrmMain.miChangeColorClick()
に色を変更するコードを書きます。
procedure TfrmMain.miChangeColorClick(Sender: TObject);
begin
if ColorDialog1.Execute then
Color := ColorDialog1.Color;
end;
二番目のメニューアイテムを選択し、プロパティを変更します。
プロパティ | 古い値 | 新しい値 |
---|---|---|
Caption | (なし) | - |
ハイフンはセパレーターとして機能します。
[実行 | 実行] で ebg.exe
を実行し、任意の場所を右クリックするとポップアップメニューが出てきます。
Change Color...
をクリックすると色選択ダイアログが出てきます。
メニューアイテムの ...
は即実行される機能ではなく、次に何らかの画面がある事を意味します。
色を選択して [OK]
ボタンを押すと背景色が変更されます。気分に合わせて背景色を変えるのもいいかと思います。
続・続・続・何もしないアプリを作る
お好きにカスタマイズしてみてください。
- 64 bit アプリもビルドしてみたり (チョー簡単)
- 壁紙を表示できるようにしたり
- 設定を保存できるようにしたり
- 時計を表示できるようにしたり
全ソースコード
短いので載せておきます。
program ebg;
uses
Vcl.Forms,
frmuMain in 'frmuMain.pas' {frmMain};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
end.
object frmMain: TfrmMain
Left = 0
Top = 0
BorderStyle = bsNone
ClientHeight = 480
ClientWidth = 640
Color = clWindow
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'Segoe UI'
Font.Style = []
PopupMenu = PopupMenu1
WindowState = wsMaximized
TextHeight = 15
object PopupMenu1: TPopupMenu
Left = 308
Top = 228
object miChangeColor: TMenuItem
Caption = '&Change Color...'
OnClick = miChangeColorClick
end
object N1: TMenuItem
Caption = '-'
end
object miExit: TMenuItem
Caption = '&Exit'
OnClick = miExitClick
end
end
object ColorDialog1: TColorDialog
Left = 384
Top = 228
end
end
unit frmuMain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus;
type
TfrmMain = class(TForm)
ColorDialog1: TColorDialog;
PopupMenu1: TPopupMenu;
miChangeColor: TMenuItem;
miExit: TMenuItem;
N1: TMenuItem;
procedure miExitClick(Sender: TObject);
procedure miChangeColorClick(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
procedure TfrmMain.miExitClick(Sender: TObject);
begin
Close;
end;
procedure TfrmMain.miChangeColorClick(Sender: TObject);
begin
if ColorDialog1.Execute then
Color := ColorDialog1.Color;
end;
end.
アイコンの生成は別途行う必要があります。
おわりに
結局、自分で書いたコードは 3 行でしたね (^^;A
念のために断っておくと、Windows ではデスクトップの何もない所を右クリックして [表示 | デスクトップアイコンの表示] でデスクトップに散らばったファイルを非表示にする事ができますし、背景色も [個人用設定] で変更できます。
しかしながら、この ebg.exe
をタスクバーに固定しておいた方が圧倒的に便利なんですよね。何回もクリックしなくていいので。