如何正确让无模式表单出现在任务栏中

2023-11-24

我正在努力实现古老的 Delphi 梦想,即在任务栏中显示无模式窗体。

是什么correct如何让无模式窗体出现在任务栏中?


研究工作

这些是我为解决问题所做的尝试。要让它发挥作用需要很多东西正确地- 仅仅在任务栏上显示一个按钮并不是解决方案。我的目标是让 Windows 应用程序像 Windows 应用程序那样正确运行。

对于那些了解我、了解我有多深的人来说“展示研究成果”继续,坚持下去,因为这将是疯狂地掉进兔子洞。

问题就在标题中,也在上面的水平线上方。下面的一切只是为了说明为什么一些经常重复的建议是不正确的。

Windows 仅为无主窗口创建任务栏按钮

最初我有我的「主要表格」,由此我展示了另一种无模式形式:

procedure TfrmMain.Button2Click(Sender: TObject);
begin
    if frmModeless = nil then
        Application.CreateForm(TfrmModeless, frmModeless);

    frmModeless.Show;
end;

这正确显示了新表单,但任务栏上没有出现新按钮:

enter image description here

没有创建任务栏按钮的原因是设计使然。Windows 将仅显示以下窗口的任务栏按钮“无主”。这种无模式的 Delphi 形式绝对是owned。就我而言,它的所有者是Application.Handle:

enter image description here

我的项目名称是ModelessFormFail.dpr,这是Windows类名的由来Modelessformfail与所有者相关。

幸运的是,有一种方法可以forceWindows 为窗口创建任务栏按钮,即使该窗口已拥有:

只需使用WS_EX_APPWINDOW

MSDN 文档WS_EX_APPWINDOW说:

WS_EX_APPWINDOW 0x00040000L当窗口可见时,强制将顶级窗口置于任务栏上。

它也是一个知名德尔福覆盖技巧CreateParams并手动添加WS_EX_APPWINDOW style:

procedure TfrmModeless.CreateParams(var Params: TCreateParams);
begin
    inherited;

    Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; //force owned window to appear in taskbar
end;

当我们运行它时,新创建的无模式表单does确实有自己的任务栏按钮:

enter image description here

我们完成了吗?不,因为它的行为不正确。

如果用户点击frmMain任务栏按钮,该窗口不会提前。相反,另一种形式(无模式) 提出:

enter image description here

一旦您理解了 Windows 的概念,这就有意义了所有权。从设计上来说,Windows 可以为任何孩子带来owned形式向前。这就是所有权的全部目的——将拥有的表单保留在其所有者之上。

使表单实际上无主

解决方案,你们中有些人知道不是为了对抗任务栏启发式和窗口。如果我希望表单不被拥有,请将其设置为无主。

这(相当)简单。在CreateParam强制所有者窗口null:

procedure TfrmModeless.CreateParams(var Params: TCreateParams);
begin
    inherited;

    //Doesn't work, because the form is still owned
//  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; //force owned windows to appear in taskbar

    //Make the form actually unonwed; it's what we want
    Params.WndParent := 0; //unowned. Unowned windows naturally appear on the taskbar.
          //There may be a way to simulate this with PopupParent and PopupMode.
end;

顺便说一句,我想调查是否有一种方法可以使用PopupMode and PopupParent属性使窗口成为无主窗口。我swear我在某处读到一条评论(来自你大卫),说如果你通过了Self as the PopupParent, e.g.:

procedure TfrmMain.Button1Click(Sender: TObject);
begin
    if frmModeless = nil then
    begin
        Application.CreateForm(TfrmModeless, frmModeless);
        frmModeless.PopupParent := frmModeless; //The super-secret way to say "unowned"? I swear David Heffernan mentioned it somewhere on SO, but be damned if i can find it now.
        frmModeless.PopupMode := pmExplicit; //happens automatically when you set a PopupParent, but you get the idea
    end;

    frmModeless.Show;
end;

它应该是向 Delphi 表明您想要形成的超级秘密方式“没有主人”。但我现在找不到任何地方的评论。不幸的是,没有组合PopupParent and PopupMode导致表格actually未被拥有:

  • PopupMode: pmNone
    • 所有者 hwnd:Application.Handle/Application.MainForm.Handle
  • PopupMode: pmAuto
    • 所有者 hwnd:Screen.ActiveForm.Handle
  • PopupMode: pmExplicit
    • PopupParent: nil
      • 所有者 hwnd:Application.MainForm.Handle
    • PopupParent: AForm
      • 所有者 hwnd:AForm.Handle
    • PopupParent: Self
      • 所有者 hwnd:Application.MainForm.Handle

我无能为力,无法使表格真正具有no所有者(每次都用 Spy++ 检查)。

设置WndParent期间手动CreateParams:

  • does使表单无主
  • it does有一个任务栏按钮
  • 和两个任务栏按钮do行为正确:

enter image description here

我们就完成了,对吧?我是这么想的。我改变了一切以使用这项新技术。

除了我的修复中存在一些问题似乎会导致其他问题 - Delphi 不喜欢我更改表单的所有权。

提示窗口

我的无模式窗口上的控件之一有一个工具提示:

enter image description here

问题是,当出现此工具提示窗口时,它会导致另一种形式(frmMain,模态一)挺身而出。它不会获得激活焦点;但它现在确实掩盖了我正在查看的表格:

enter image description here

原因可能是合乎逻辑的。德尔福提示窗口可能属于Application.Handle or Application.MainForm.Handle,而不是被它应该被拥有的形式所拥有:

enter image description here

我认为这是 Delphi 的一个错误;使用错误的所有者。

转移查看实际的应用布局

现在重要的是我花点时间来表明我的应用程序不是主表单和无模式表单:

enter image description here

它实际上是:

  • 登录屏幕(隐藏的牺牲主窗体)
  • 主屏幕
  • 模态控制面板
  • 显示无模式形式

enter image description here

即使应用程序布局是现实的,除了提示窗口所有权之外的所有内容都有效。有两个任务栏按钮,单击它们会显示正确的表单:

enter image description here

但我们仍然存在 HintWindow 所有权带来错误形式的问题:

enter image description here

在任务栏上显示主窗体

当我试图创建一个最小的应用程序来重现问题时,我意识到我做不到。有一些不同的东西:

  • 我的 Delphi 5 应用程序移植到 XE6 之间
  • 在 XE6 中创建的新应用程序

After 比较一切,我最终追溯到XE6中的新应用程序添加了这一事实MainFormOnTaskbar := True默认情况下,在任何新项目中(大概是为了不破坏现有应用程序):

program ModelessFormFail;
//...
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TfrmSacrificialMain, frmSacrificialMain);
  //Application.CreateForm(TfrmMain, frmMain);
  Application.Run;
end.

当我添加此选项时,工具提示的外观并没有带来错误的形式!:

enter image description here

成功!除了那些知道即将发生什么的人知道接下来会发生什么. My “牺牲”主登录表单显示“真实”主表单,隐藏自身:

procedure TfrmSacrificialMain.Button1Click(Sender: TObject);
var
    frmMain: TfrmMain;
begin
    frmMain := TfrmMain.Create(Application);
    Self.Hide;
    try
        frmMain.ShowModal;
    finally
        Self.Show;
    end;
end;

当这种情况发生时,我"login",我的任务栏图标完全消失:

enter image description here

发生这种情况是因为:

  • 无主的牺牲主窗体不是不可见的:所以按钮随之而来
  • 真正的主要形式是owned所以它没有工具栏按钮

使用 WS_APP_APPWINDOW

现在我们有机会使用WS_EX_APPWINDOW。我想强制我拥有的主窗体出现在任务栏上。所以我重写CreateParams并强制它出现在任务栏上:

procedure TfrmMain.CreateParams(var Params: TCreateParams);
begin
    inherited;

    Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; //force owned window to appear in taskbar
end;

我们试一试:

enter image description here

看起来不错!

  • 两个任务栏按钮
  • 工具提示不会向前弹出错误的所有者表单

除了,当我单击第一个工具栏按钮时,会出现错误的表单。它显示了模态frmMain,而不是当前模态控制面板:

enter image description here

大概是因为新创建的控制面板是 Popup 的父级应用程序.MainForm而不是屏幕.ActiveForm。检查 Spy++:

enter image description here

是的,父母是MainForm.Handle。事实证明,这是由于 VCL 中的另一个错误造成的。如果表格的PopupMode is:

  • pmAuto
  • pmNone(如果是情态形式)

VCL尝试使用Application.ActiveFormHandle as the hWndParent。不幸的是,它然后检查模式表单的父级是否已启用:

if (WndParent <> 0) and (
      IsIconic(WndParent) or 
      not IsWindowVisible(WndParent) or
      not IsWindowEnabled(WndParent)) then

当然,模态表单的父级未启用。如果是的话,它就不是情态形式。所以 VCL 又转而使用:

WndParent := Application.MainFormHandle;

手动育儿

这意味着我可能必须确保手动(?)设置弹出窗口育儿?

procedure TfrmMain.Button2Click(Sender: TObject);
var
    frmControlPanel: TfrmControlPanel;
begin
    frmControlPanel := TfrmControlPanel.Create(Application);
    try
        frmControlPanel.PopupParent := Self;
        frmControlPanel.PopupMode := pmExplicit; //Automatically set to pmExplicit when you set PopupParent. But you get the idea.
        frmControlPanel.ShowModal;
    finally
        frmControlPanel.Free;
    end;
end;

但这也不起作用。单击第一个任务栏按钮会导致激活错误的表单:

enter image description here

此时我彻底困惑了。这parent我的模态形式应该是frmMain,它就是!:

enter image description here

所以现在怎么办?

我知道可能会发生什么。

该任务栏按钮代表frmMain。 Windows 正在推动这一点。

除非它在以下情况下表现正确任务栏上的主窗体被设置为 false。

Delphi VCL 中一定有一些魔法导致了之前的正确性,但被禁用了MainFormOnTaskbar := True,但它是什么?

我并不是第一个希望 Delphi 应用程序能够与 Windows 95 工具栏良好配合的人。我过去曾问过这个问题,但这些答案总是针对 Delphi 5 并且它是旧的中央路由窗口。

我被告知所有事情都在 Delphi 2007 年的时间框架内得到修复。

那么正确的解决方案是什么呢?

奖励阅读

  • http://blogs.msdn.com/b/oldnewthing/archive/2003/12/29/46371.aspx
  • WS_EX_APPWINDOW 是做什么的?
  • 调用 TsaveDialog 时,我的详细表单隐藏在主表单后面
  • Delphi 博客中的 Oracle:PopupMode 和 PopupParent
  • DocWiki:Vcl.Forms.TForm.PopupMode
  • DocWiki:Vcl.Forms.TCustomForm.PopupParent
  • 如何启动带有隐藏主窗体的Delphi应用程序?

在我看来,根本问题在于,在 VCL 看来,你的主窗体不是你的主窗体。一旦你解决了这个问题,所有的问题都会消失。

你应该:

  1. Call Application.CreateForm对于真正的主要形式,恰好一次。这是一个值得遵循的好规则。考虑以下工作Application.CreateForm创建应用程序的主窗体。
  2. 创建登录表单并设置其WndParent to 0。这确保它出现在任务栏上。然后模态地显示它。
  3. 通过调用以通常的方式创建主窗体Application.CreateForm.
  4. Set MainFormOnTaskbar to be True.
  5. Set WndParent to 0为无模式形式。

就是这样。这是一个完整的示例:

项目1.dpr

program Project1;

uses
  Vcl.Forms,
  uMain in 'uMain.pas' {MainForm},
  uLogin in 'uLogin.pas' {LoginForm},
  uModeless in 'uModeless.pas' {ModelessForm};

{$R *.res}

begin
  Application.Initialize;
  Application.ShowHint := True;
  Application.MainFormOnTaskbar := True;
  with TLoginForm.Create(Application) do begin
    ShowModal;
    Free;
  end;
  Application.CreateForm(TMainForm, MainForm);
  Application.Run;
end.

uLogin.pas

unit uLogin;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
  TLoginForm = class(TForm)
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

implementation

{$R *.dfm}

procedure TLoginForm.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.WndParent := 0;
end;

end.

u登录.dfm

object LoginForm: TLoginForm
  Left = 0
  Top = 0
  Caption = 'LoginForm'
  ClientHeight = 300
  ClientWidth = 635
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
end

uMain.pas

unit uMain;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, uModeless;

type
  TMainForm = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

procedure TMainForm.Button1Click(Sender: TObject);
begin
  with TModelessForm.Create(Self) do begin
    Show;
  end;
end;

end.

uMain.dfm

object MainForm: TMainForm
  Left = 0
  Top = 0
  Caption = 'MainForm'
  ClientHeight = 300
  ClientWidth = 635
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 288
    Top = 160
    Width = 75
    Height = 23
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
  end
end

uModeless.pas

unit uModeless;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TModelessForm = class(TForm)
    Label1: TLabel;
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

implementation

{$R *.dfm}

procedure TModelessForm.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.WndParent := 0;
end;

end.

uModeless.dfm

object ModelessForm: TModelessForm
  Left = 0
  Top = 0
  Caption = 'ModelessForm'
  ClientHeight = 300
  ClientWidth = 635
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  ShowHint = True
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
    Left = 312
    Top = 160
    Width = 98
    Height = 13
    Hint = 'This is a hint'
    Caption = 'I'#39'm a label with a hint'
  end
end

如果您希望无模式表单由主表单拥有,您可以通过替换来实现TModelessForm.CreateParams with:

procedure TModelessForm.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何正确让无模式表单出现在任务栏中 的相关文章

  • 从 Windows 中的 C++ 应用程序进行 Thrift 调用

    正如标题所示 我有一个用 C 编写的 Windows 应用程序 我需要从中调用远程 Thrift 服务 说实话 我对这个主题有点迷失 http wiki apache org thrift ThriftInstallationWin32 h
  • C# 系统 CPU 使用情况并与 Windows 任务管理器同步

    这是一个由两部分组成的问题 我想将我的代码发布到堆栈上以帮助其他人完成相同的任务 问题一 我有一个代码子集 我相信它可以根据测量间隔正确测量 CPU 使用情况 根据检索的时间跨系统中的尽可能多的核心 我在线程调用中使用 1 秒 我必须从网上
  • 在 Delphi XE 中将类作为过程的参数传递

    我需要做的是这样的 procedure A type of form var form TForm begin form type of form Create application form showmodal freeandnil f
  • C++ [Windows] 可执行文件所在文件夹的路径[重复]

    这个问题在这里已经有答案了 我需要访问一些文件fstream在我的 Windows 上的 C 应用程序中 这些文件都位于我的exe文件所在文件夹的子文件夹中 获取当前可执行文件的文件夹路径的最简单且更重要的 最安全的方法是什么 Use 获取
  • Windows 任务计划程序报告不正确/不一致的结果代码

    背景 我正在尝试在计划任务失败时收到电子邮件通知 我的任务可以通过退出代码 错误级别 指示失败 我想使用它并遵循中描述的过滤方法这个答案 https stackoverflow com a 4289360 29805触发电子邮件 Probl
  • 防止 Windows 中的崩溃消息

    我的应用程序需要扫描经常导致崩溃的第三方文件 为了克服这个问题 它使用一个单独的进程来扫描这些文件并 每当这个进程崩溃时 我的应用程序就会实例化另一个应用程序 我的问题是 每次崩溃后我都会收到 Windows 崩溃消息 AuxScanner
  • Windows 与 Linux 文本文件读取

    问题是 我最近从 Windows 切换到 Ubuntu 我的一些用于分析数据文件的 python 脚本给了我错误 我不确定如何正确解决 我当前仪器的数据文件输出如下 Header 有关仪器等的各种信息 Data 状态 代码 温度 字段等 0
  • 检测注册表虚拟化

    我有一组 C v2 应用程序 并且在 Win7 以及较小程度上的 Vista 中的注册表虚拟化方面遇到了困难 我有一个共享注册表配置区域 我的应用程序需要在 HKLM Software Company 中访问该区域 在 Vista 之前 所
  • 如何驯服 Windows 标头(有用的定义)?

    在其中一个答案中this https stackoverflow com questions 1394132 macro and member function conflict问题jalf https stackoverflow com
  • 避免回绕的 timeGetTime 的最佳替代品是什么?

    time获取时间 http msdn microsoft com en us library dd757629 VS 85 aspx查询系统时间似乎相当不错 然而 它的返回值仅为 32 位 因此大约每 49 天环绕一次 在调用代码中检测翻转
  • 检测反射 DLL 注入

    在过去的几年中 恶意软件 以及一些渗透测试工具 如 Metasploit 的 meterpreter 负载 已经开始使用反射 DLL 注入 PDF http www harmonysecurity com files HS P005 Ref
  • Windows 上本机 C++ 应用程序中的自动死代码检测?

    背景 我有一个用原生 C 编写的应用程序 花了几年的时间 大约有 60 KLOC 有很多函数和类已经死了 可能有 10 15 就像下面提出的类似的基于 Unix 的问题 我们最近开始对所有新代码进行单元测试 并尽可能将其应用于修改后的代码
  • 在 System.Windows.Forms.RichTextBox 中禁用 VScrollbar 的绘制

    我有一个继承自 RichTextBox 的自定义控件 该控件能够 禁用 富文本编辑 我通过在 TextChanged 事件期间将 Rtf 属性设置为 text 属性来实现此目的 这就是我的代码的样子 private bool lockTex
  • 如何使用 setuptools Windows 安装程序在开始菜单中创建快捷方式

    我想为我的 Python Windows 安装程序包创建开始菜单或桌面快捷方式 我正在尝试遵循https docs python org 3 4 distutils builtdist html the post 安装脚本 https do
  • Delphi XE5 REST/Android 客户端“会话已过期”

    我有一个REST Server与Android Client 都在Deplhi Xe5 Android客户端成功连接Rest服务器 在我的服务器中我有一个TDSHttpWebDispatcher with SessionTimeout 12
  • 如何用if条件编写ini文件

    我想编写一个带有 if else 条件的 ini 文件 我用 python 中的 ConfigParser 解析它 如何在ini文件中使用if和else语句 如果我明白你在问什么 您可能想要做的是这样的 在 INI 文件中设置条件值 sec
  • 正确配置JDK环境变量后仍然找不到java命令

    我在 Windows 虚拟机启动时安装 JDK 使用 cloudinit 用户数据将 PowerShell 脚本传输到 Windows 计算机 然后运行该脚本来安装 JDK softwares Get ItemProperty HKLM S
  • 我试图理解为什么在使用 paramiko 1.7.6 时出现“权限被拒绝”错误

    谁能告诉我为什么我会收到以下错误 Traceback most recent call last File C Python27 connect py line 22 in
  • 将 HttpApi 与 I/O 完成端口结合使用

    我刚刚偶然发现了微软的HTTP 服务器 API http msdn microsoft com en us library aa364510 28v vs 85 29 aspx 简介中写道 HTTP 服务器 API 使应用程序能够通过 HT
  • 以标准用户身份打开默认浏览器 (C++)

    我目前正在使用 ShellExecute 打开 在用户浏览器中打开 URL 但在 Win7 和 Vista 中遇到了一些麻烦 因为该程序作为服务运行提升 当 ShellExecute 打开浏览器时 它似乎读取 本地管理员 配置文件而不是用户

随机推荐

  • 如何使用 Vuelidate 验证密码?

    问候 我需要验证密码表格 除了必填字段外 必须至少有 1 个大写字母 至少 1 个小写字母 至少 1 个数字且至少包含以下字符之一 我正在使用这个包https vuelidate js org EDIT 或正则表达式 只需添加一个自定义函数
  • 使用 python 计算卷上剩余的跨平台空间

    我需要一种方法来在 Linux Windows 和 OS X 上使用 python 来确定磁盘卷上的剩余空间 我目前正在解析各种系统调用 df dir 的输出来完成此操作 有更好的方法吗 import ctypes import os im
  • 如何从浏览器控制台访问和测试 AngularJS 过滤器?

    给定一个测试过滤器 这样说 大写 过滤器将每个单词的第一个字母大写 return function input return input input replace W s g function txt return txt charAt
  • Visual Studio 构建失败:无法将 exe 文件从 obj\debug 复制到 bin\debug

    Update 可以找到重现此错误的示例项目在 Microsoft Connect 上 我还测试并验证了中给出的解决方案下面接受的答案致力于该示例项目 如果此解决方案不适合您 则您可能遇到了不同的问题 属于单独的问题 这是之前在 Stack
  • 打印时如何避免最后出现多余的空白页?

    我正在使用 CSS 属性 如果我使用page break after always 它之前会打印一个额外的空白页 如果我使用page break before always 之后会打印一个额外的空白页 我怎样才能避免这种情况
  • 使用 java 将电子邮件转换为其原始格式

    到目前为止我一直尝试创建一个类型的对象MimeMessage使用JavaMail api 然后获取其原始表示 但没有成功 我唯一能获得的是原始表示content电子邮件的内容 但不包括标题 主题或收件人 我对任何建议 任何 java 库感兴
  • 如何扩展代码点火器控制器类?

    在我的 CI system libraries 目录中 我有一个名为 DD Controller php 的新类 该文件如下所示
  • Python 中的“@”是什么意思?

    什么是 在 Python 中是什么意思 例子 login required etc 这是装饰器语法 函数定义可以由一个或多个装饰器表达式包装 定义函数时 在包含函数定义的范围内评估装饰器表达式 结果必须是可调用的 它是用函数对象作为唯一参数
  • 给定一个函数记录,以及该函数所作用的类型的数据记录,如何通用地应用该函数记录?

    标题稍微不准确 因为我的特定情况涉及更多 而不是第一个记录中的函数直接作用于第二个记录中的值 而是作用于值的列表 或其他可遍历的 我们可以假设 对特定字段的应用程序的结果返回的值与该字段中的类型相同 如果这能给我们带来什么好处的话 一个例子
  • 在启动画面期间加载所有场景

    我的移动 2D Unity 游戏中有多个场景 我想在启动屏幕中加载所有场景 以便场景传递流畅 我怎样才能做到这一点 如果我这样做 我是否需要更改 Application LoadScene 方法 我可以使用什么方法 我是否需要更改 Appl
  • TDM-GCC w64 脚本将 Windres 更改为 32 位?

    尝试让 TDM GCC 4 7 1 在 XP SP3 上运行 我现在只需要一个 c 32 位版本 看来 Windres 的格式不正确 我的 rc 文件构建失败 x86 64 w64 mingw32 g exe Wall m32 s D M
  • 在 WPF 文本框中使用箭头键 (C#)

    有没有办法捕获 WPF TextBox 中的向上 向下箭头键 System Windows Controls Textbox 并允许他们更改文本 我读过有关覆盖ProcessCmdKeyWindows 窗体文本框的方法 System Win
  • 使用 Django South 重置迁移历史记录的推荐方法是什么?

    我已经使用 South 0 7 和 Django 1 1 2 积累了相当多的迁移 这些迁移开始在我的单元测试中消耗相当多的时间 我想重置基线并开始一组新的迁移 我已经审查了南方文档 完成了通常的 Google Stackoverflow 搜
  • Git 预提交挂钩在文件中查找文本

    我正在编写一个 git 预提交挂钩来检查任何暂存文件是否包含不允许的文本 如果是这种情况则中止 不是这方面的专家 到目前为止我已经得到了这个 git diff cached name status while read x file do
  • JMeter 和带有 SSL 的 HTTP 代理服务器的问题

    我们正在使用 JMeter 2 4 并尝试使用 HTTP 代理服务器来捕获测试计划 尝试 HTTPS 欺骗 未勾选 我们在 JMeter 日志中得到的错误是 2010 08 02 14 46 02 错误 jmeter protocol ht
  • .NET 中快速且紧凑的对象序列化

    我想使用对象序列化在网络之间进行通信Mono服务器和 Silverlight 客户端 序列化的空间效率和速度非常重要 因为服务器将托管多个实时游戏 我应该使用什么技术 BinaryFormatter 为本应用程序中不需要的序列化类 版本 区
  • 将新文件夹/文件推送到共享存储库时,Git 将创建模式设置为 100664

    我和我的同事有一个共享的网站存储库 我们都在使用 Windows 7 64 位并升级到 Ubuntu 10 04 以下是我们的设置 以防出现问题 本地 gt 中心 gt 网站 我们推送到集线器 这是一个裸存储库 然后使用集线器中的更新后挂钩
  • 每天在特定时间重复闹钟(闹钟管理器)

    您好 我希望我的应用程序每天在特定时间运行 为此 我使用下面的代码 但它只运行一次 这里有什么错误我怎样才能完成这个任务 AlarmManager alarmMgr0 AlarmManager getSystemService Contex
  • 不允许异步锁

    基本上 我想向 TCP 服务器发出多个异步请求 我目前有一个工作客户端 它只是同步的 并且会阻止每个网络调用的 UI 由于多个请求可能几乎同时发生 我尝试这样做 private object readonly readLock new ob
  • 如何正确让无模式表单出现在任务栏中

    我正在努力实现古老的 Delphi 梦想 即在任务栏中显示无模式窗体 是什么correct如何让无模式窗体出现在任务栏中 研究工作 这些是我为解决问题所做的尝试 要让它发挥作用需要很多东西正确地 仅仅在任务栏上显示一个按钮并不是解决方案 我