Windows 隐藏任务栏按钮有效,但在显示第二个窗体时无效
我设法使用隐藏了winforms应用程序任务栏按钮Windows 隐藏任务栏按钮有效,但在显示第二个窗体时无效,windows,lazarus,Windows,Lazarus,我设法使用隐藏了winforms应用程序任务栏按钮 ShowWindow(GetParent(Form1.Handle),SW_HIDE); 我在表单创建后1秒调用计时器。任务栏按钮在应用程序使用过程中始终保持隐藏状态,但直到我单击表单上的按钮以显示另一个表单,并且表单1是其所有者 我尝试使用相同的代码隐藏第二个表单,但无法工作 编辑:添加更多代码: 格式1中的代码: // this fires every 1 second and works well. procedure TForm1.
ShowWindow(GetParent(Form1.Handle),SW_HIDE);
我在表单创建后1秒调用计时器。任务栏按钮在应用程序使用过程中始终保持隐藏状态,但直到我单击表单上的按钮以显示另一个表单,并且表单1是其所有者
我尝试使用相同的代码隐藏第二个表单,但无法工作
编辑:添加更多代码:
格式1中的代码:
// this fires every 1 second and works well.
procedure TForm1.scanTimerTimer(Sender: TObject);
begin
ShowWindow(GetParent(Form1.Handle),SW_HIDE);
end;
// when a user press Settings button on the Form1
// I open another form.
procedure TForm1.SettingsBtnClick(Sender: TObject);
var
settings: TSettingsForm;
begin
settings := TSettingsForm.Create(Form1);
settings.Show;
end;
设置窗体中的代码
// this fires every 1 second and DOESNT WORK!
procedure TSettingsForm.scanTimerTimer(Sender: TObject);
begin
ShowWindow(GetParent(SettingsForm.Handle),SW_HIDE);
end;
这就是代码的全部内容。因此,当我打开SettingsForm时,任务栏按钮立即重新出现,并且不再消失。我希望任务栏保持隐藏状态,无论我从主窗体打开多少其他窗体。我尝试了一个针对windows的操作系统特定API,它是
ShowWindow(GetParent(Form1.Handle),SW_HIDE);
在FormCreate之后工作,但在主窗口打开辅助窗口之后,
任务栏按钮重新出现。因此,如果你的应用程序只有一个窗口,你可以使用这个窗口。但对于多个windows/forms应用程序,它将不起作用
我还尝试了非操作系统特定的API:
SettingsForm.ShowInTaskBar := stNever;
尝试将其放在FormCreate中,也在调用方表单中显示之前,但仍然不起作用。任务栏按钮仍然出现
最后,我在lazarus论坛中找到了使用操作系统特定API的答案:
您需要添加2个导入:
InterfaceBase, Win32Int
这是FormCreate:
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
EXStyle: Long;
AppHandle: THandle;
begin
AppHandle := TWin32WidgetSet(WidgetSet).AppHandle;
EXStyle:= GetWindowLong(AppHandle, GWL_EXSTYLE);
SetWindowLong(AppHandle, GWL_EXSTYLE, EXStyle or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
end;
请出示一张。我确实停了。因此,我的句子末尾有一个句号。尽量不要使用特定于操作系统的API。改为尝试设置。ShowInTaskBar:=stNever;就在设置之前。显示;此外,欢迎您加入-它比stackoverflow的Pascal社区友好得多@阿贝利斯托:谢谢你,它很有效!!!如果你贴出答案,我会接受。Ok肯定会加入lazarus论坛。实际上说得太早了。我以为它在起作用,但实际上不起作用。哈哈。总之,我在lazarus论坛上搜索找到了答案。也可以尝试Application.MainFormOnTaskBar:=False;Application.TaskBarBehavior:=tbSingleButton;