delphi - 如何为控制台窗口创建表单模式

标签 delphi console-application delphi-xe2

在控制台应用程序内部-带有GetOpenFileName()Handle := FindWindow(Nil, Pchar(ConsoleTitle))显示对控制台窗口模态的OpenFile对话框。是否可以创建并显示我自己的表单模式到控制台窗口?

最佳答案

将控制台窗口设置为窗体的窗口所有者,并在显示窗体时将其禁用。类似于以下内容:

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.

关于delphi - 如何为控制台窗口创建表单模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10773487/

相关文章:

delphi - 如果 "Resources and images"为空,如何使用资源

delphi - 在 Delphi 中使用 XSLT 2.0 需要什么

c# - 关于控制台应用程序返回的错误代码的最佳实践是什么?

c# - C# 中的 MergeSort 实现

delphi - 如何为 Interface 对象注册预期的内存泄漏

delphi - 使用对象作为 TObjectDictionary 中的键

delphi - 将 [字节数组] 分配给没有 Unicode 转换的 Variant

delphi - FMX : Handle of controls

delphi - 更改窗口键盘布局时应用程序卡住

c# - StreamWriter 在 WriteLine 中间停止