記事カテゴリ

ユーザー機能


 2024年3月28日(木) 18:55 JST

[Delphi] FindFirst、FindNext中に追加されたファイルは見けることができる?

  • 記事を友だちにメール
  • 印刷用ページ
  • 投稿者:
  • 表示回数
    7,108
ディレクトリ中のファイルの一覧を取得するには、FindFirst、FindNext 関数を使ってリストアップします。 このときファイルは辞書順にファイルを見つけるようです。
ところでこの関数でファイルを検索中に追加されたファイルは、FindNext 関数で見つけ出すことができるでしょうか?テストの結果、FindFirst 関数を実行後に追加されたファイルは見つけることができませんでした。 どうやら FindFirst 関数実行時にリストを作成し、その後 FindNext 関数でそのリストを読み出して返しているのではないかと想像できます。 もしかしたら、EnumWindow API や、WNetEnumResource API も WNetOpenEnum API 以降に追加されたリソースは発見できないかもしれません。

[Delphi] フォームの OnCreate イベントや OnShow イベント中にクローズさせる

  • 記事を友だちにメール
  • 印刷用ページ
  • 投稿者:
  • 表示回数
    10,275

フォームの OnCretae イベントや OnShow イベントでは、Close メソッドをコールしても、クローズさせることはできません。
原因は、OnCreate イベントの段階では、まだメッセージループが開始されていないからということのようです。
これらのイベント中で、クローズさせたい場合には、下記のように記述します。

PostMessage(Handle, WM_CLOSE, 0, 0);

こうすることで現在実行中のイベント終了後、クローズしてくれるようになります。
ですから厳密にはイベント中ではありません。でもやりたいことはだいたいできると思います。

ボーランドの公式回答では、raise で処理するとのことです。

□CodeGearのホームページ
http://www.codegear.com/

□CodeGearのサポートページ
http://support.codegear.com/

□CodeGearの旧Delphi FAQサイト
http://support.codegear.com/article/37355

□該当の公式回答 - Form の OnCreate の処理中に中断
http://support.codegear.com/article/37355#37355_tocentry18

[Delphi] 数値を表す文字列を数値に変換

  • 記事を友だちにメール
  • 印刷用ページ
  • 投稿者:
  • 表示回数
    26,722

StrToInt は、10進または16進表記の整数型の数値を表す文字列(S)を数値に変換します。 しかし、Sが有効な数値を表していない場合、StrToInt は EConvertError 例外を生成します。
きちんと例外処理していても、開発環境で作業している際には、例外発生のダイアログが出てうっとうしいものです。 Delphi7以降の場合、TryStrToIntDef を使うと例外が発生せずチェックが可能です。StrToInt を使う場合でも 例外発生時に何か特別な値をセットするようなプログラムの場合には、StrToIntDef が有効です。 また 、Val 手続きを使うと2番目の引数の型を変更することで、数値チェックをする数字の範囲を変更可能です。

StrToIntは整数型の場合に有効ですが、他にExtended型に変換するStrToFloatや、通過型に変換するStrToCurrなど用途に合わせて選択してください。

Delphi7以降の場合
TryStrToIntDef(s);
Delphi6までや、細かい制御が必要な場合
///数値チェック
///チェック対象文字列
/// True:数値文字列, Flase:非数値文字列
function IsNumeric(s: String): Boolean;
var
  c: Integer;
  n: Extended;  // ここの型を変えることでチェック範囲を変更できます。
begin
  Val(s, n, c);
  Result := (c = 0);
end;

[Delphi] アプリケーションウィンドウを表示させる方法は?

  • 記事を友だちにメール
  • 印刷用ページ
  • 投稿者:
  • 表示回数
    3,162

普段どこにあるかわからない、 Application変数(TApplication)のウィンドウ。 本当にあるのかどうか確認するために表示させることにしました。 表示させてもあまり意味がない、役立たずなサンプルです。
フォームの OnCreate に書いた場合のサンプルです。 フォーム表示と同時に、スクリーン左上にアプリケーションのウィンドウが表示されます。

procedure TForm1.FormCreate(Sender: TObject);
begin
  SetWindowLong(Application.Handle, GWL_STYLE, WS_CAPTION);
  SetWindowPos(Application.Handle, HWND_TOP, 0, 0, 100, 100, 0);
end;

[Delphi] Windows のログオフ、シャットダウンと再起動 (WinNT, 2000, XP)

  • 記事を友だちにメール
  • 印刷用ページ
  • 投稿者:
  • 表示回数
    9,508

前回のFAQ で Windows 9x 系でのログオフ、シャットダウンや再起動の方法を書きましたが、本日はNTのコマンドプロンプトから動作するサンプルプログラムを。以下のコードをShutdown.dprとして保存し、コンパイルしてください。
システムをシャットダウンまたは再起動させるために、 WxitWindowsEx 関数を呼び出すプロセスは AdjustTokenPrivileges 関数を呼び出して、SE_SHUTDOWN_NAME 特権を得ています。

program Shutdown;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows;

var
  hToken: THandle;
  tkp: TTokenPrivileges;
  dwRet: DWORD;
begin
  // このプロセスのためのトークンを取得します。
  if (not OpenProcessToken(GetCurrentProcess,
    (TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY), hToken)) then
    Writeln('OpenProcessToken');

  // シャットダウンに必要な権限を取得します。
  LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid);
  tkp.PrivilegeCount := 1; // one privilege to set
  tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
  dwRet := 0;

  // シャットダウンプロセスに必要な特権を取得します。
  AdjustTokenPrivileges(hToken, false, tkp, 0, nil, dwRet);

  // AdjustTokenPrivilegesの戻り値をチェックします。
  if (GetLastError <> ERROR_SUCCESS) then
    Writeln('AdjustTokenPrivileges');

  // 強制的にアプリケーションを終了させながら、シャットダウンします。
  if (not ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE, 0)) then
    Writeln('ExitWindowsEx');
end.

ExitWindowsExの1番目の引数部分を、先日ご紹介したように以下のように変更することで、ログオフなどを行うことができます。 また、EWX_FORCE を指定することで強制的に処理を進められます。

// ログオフ
ExitWindowsEx(EWX_LOGOFF, 0);
// シャットダウン
ExitWindowsEx(EWX_SHUTDOWN, 0);
// 再起動
ExitWindowsEx(EWX_REBOOT, 0); 
// POWER OFF
ExitWindowsEx(EWX_POWEROFF, 0);

サイトカレンダー

サイトカレンダーをスキップ

2022年 11月
«
»
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

新着情報

記事 新着(24時間)

-

コメント 新着(2日)

-

トラックバック 新着(2日)

-

リンク 新着(2週)

新しいリンクはありません

ファイル (14日)