以下のコードをボタンのイベントハンドラなどに書くとログオフ、シャットダウンや再起動ができます。(ただし、9x系Windowsのみ)
// ログオフ ExitWindowsEx(EWX_LOGOFF, 0); // シャットダウン ExitWindowsEx(EWX_SHUTDOWN, 0); // 再起動 ExitWindowsEx(EWX_REBOOT, 0); // POWER OFF ExitWindowsEx(EWX_POWEROFF, 0);
2025年5月 2日(金) 12:09 JST
以下のコードをボタンのイベントハンドラなどに書くとログオフ、シャットダウンや再起動ができます。(ただし、9x系Windowsのみ)
// ログオフ ExitWindowsEx(EWX_LOGOFF, 0); // シャットダウン ExitWindowsEx(EWX_SHUTDOWN, 0); // 再起動 ExitWindowsEx(EWX_REBOOT, 0); // POWER OFF ExitWindowsEx(EWX_POWEROFF, 0);
Iniファイルの読み書きの方法です。実数値を読み込んだ際に、書き込んだ違う値になっているかもしれません。これは、2進数で表すことができない数値を書き込んだからです。
サンプルプログラムのダウンロードは→[Delphi FAQ用サンプル] Ini ファイルの読み書き
タスクバーの位置や大きさを知るにはどうしたらよいのでしょうか? タスクバーの大きさを知るためには、SHAppBarMessage APIを使います。 このAPIでタスクバーの大きさがわかるのですが、このAPIで得られる値はなぜかタスクバーが画面をはみ出していることを示しています。
タスクバーの大きさを知りたい理由が、タスクバー以外の部分の画面の大きさを知るということであれば、SystemParametersInfo APIで知ることができるので、こちらを使うとよいでしょう。
サンプルプログラムのダウンロードは→[Delphi FAQ用サンプル] タスクバーの大きさを知る
TMemoの入力行数を制限できる方法。
TMemoを拡張して行数を制限できる新しいMemoコンポーネントを作成します。
新しいTMemoをTMemoExとします。このTMemoExには、1つのプロパティ、3つの変数と3つのメンバー関数を追加します。
interface TMemoEx = class(TMemo) private FMaxLines: Integer; // 内部処理用 mLimitLineProc: Boolean; mOldPos: Integer; mOldText: String; protected procedure Change; override; procedure DoEnter; override; public constructor Create(AOwner: TComponent); override; property MaxLines: Integer read FMaxLines write FMaxLines default 0; end; implementation constructor TProMemo.Create(AOwner: TComponent); begin inherited; mOldPos := 0; mOldText:= ''; FMaxLines := 0; end; procedure TProMemo.DoEnter; begin inherited; mOldPos := SelStart; mOldText := Text; end; procedure TProMemo.Change; begin if (mLimitLineProc) then Exit; // 再入時 // 現在の行数 > 最大行数 if (FMaxLines <> 0) and (SendMessage(Handle, EM_GETLINECOUNT, 0, 0) > FMaxLines) then begin mLimitLineProc := true; // 再入時用 Text := mOldText; SelStart := mOldPos; mLimitLineProc := false; // 再入時用 end; mOldPos := SelStart; mOldText := Text; inherited; end;
通常 Memo1.Lines.Count というように処理すると思います。実際にデータが入っている行数を取得する分にはこれで十分だと思います。
しかし、最終行に改行コードが入っていると、見た目にはもう一行空行が存在することになります。
たとえば、新規にフォームに追加したTMemoは“Memo1[改行コード]”といったTextを持っています。このとき Memo1.Lines.Count では“1”が取得できますが、Windows API のEM_GETLINECOUNT を使えば、表示しているままの“2”が取得できます。
些細なことかもしれませんが、Memoの行数を制限したい場合などには有効に働きます。
そのほか、コントロールの横幅が内容よりも小さくワードラップする場合には、TMemo の Count プロパティは論理行(エディタ的、改行コード+1)を返すようですが、Windows API を用いると物理行(ワープロ的、見た目どおり)を返すようです。