Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 隐藏任务栏按钮有效,但在显示第二个窗体时无效_Windows_Lazarus - Fatal编程技术网

Windows 隐藏任务栏按钮有效,但在显示第二个窗体时无效

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.

我设法使用隐藏了winforms应用程序任务栏按钮

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;