1

コンソールアプリ内-コンソールウィンドウにモーダルなOpenFileダイアログGetOpenFileName()を表示します。独自のフォームHandle := FindWindow(Nil, Pchar(ConsoleTitle))を作成してコンソールウィンドウにモーダルで表示することはできますか?

4

1 に答える 1

4

フォームのウィンドウ所有者であるコンソールウィンドウを設定し、フォームを表示するときに無効にします。次のようなもの:

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  windows,
  forms,
  Unit1 in 'Unit1.pas' {Form1};

const
  ConsoleClass = 'ConsoleWindowClass';

var
  console: HWND;
  len: DWORD;
  title: array [0 .. MAX_PATH] of Char;

begin
  try
    len := GetConsoleTitle(title, SizeOf(title));
    Win32Check(Bool(len));
    console := FindWindow(ConsoleClass, title);
    Win32Check(Bool(console));
    Form1 := TForm1.Create(nil);
    try
      EnableWindow(console, False);
      try
        Form1.HandleNeeded;
        SetWindowLongPtr(Form1.Handle, GWLP_HWNDPARENT, console);
        Form1.ShowModal;
      finally
        EnableWindow(console, True);
      end;
    finally
      Form1.Free;
    end;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.
于 2012-05-27T11:45:57.930 に答える