3

この質問によると、ウィンドウ スタイルをWS_EX_TOOLWINDOWに変更することで、fmx タスクバー アイコンを非表示にすることができます。XE2 および XE3 では、次のコードが機能します。

uses FMX.Platform.Win, Winapi.Windows;

procedure TForm1.Button1Click(Sender: TObject);
var h:THandle;
begin
  h := FmxHandleToHWND(Handle);
  ShowWindow(h, SW_HIDE);
  SetWindowLong(h, GWL_EXSTYLE, GetWindowLong(h, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
  ShowWindow(h, SW_SHOW);
end;

XE4 では、このソリューションは機能しません (アプリケーション ボタンは非表示になるはずですが、何も起こりません)。体は何か考えがありますか?

ありがとう。

4

5 に答える 5

4

XE7でこれを試してみましたが、もちろんうまくいきませんでした。ただし、FMX.PlatformWin を少し調べると、アプリケーション ハンドルが ApplicationHWND 関数を通じて公開されていることがわかります。そのため、XE7 で動作するコード (ユニットFMX.Platform.Winとを含めることを忘れないでくださいWinapi.Windows) は...

procedure HideAppOnTaskbar (AMainForm : TForm);
var
  AppHandle : HWND;
begin
  AppHandle := ApplicationHWND; 
  ShowWindow(AppHandle, SW_HIDE);
  SetWindowLong(AppHandle, GWL_EXSTYLE, GetWindowLong(AppHandle, GWL_EXSTYLE) and (not     WS_EX_APPWINDOW) or WS_EX_TOOLWINDOW);
  //ShowWindow(AppHandle, SW_SHOW);
end;

最後の ShowWindow はオプションです - 違いはないようです。拡張スタイルを削除し、WS_EX_APPWINDOW スタイルを復元して、ツールバー アイコンを再び表示することができます。

于 2014-10-08T14:07:58.227 に答える
0
HWND hWnd = NULL;
DWORD pid, current_pid = GetCurrentProcessId();
do 
{
    hWnd = FindWindowExA(NULL, hWnd, "TFMAppClass", NULL);
    if(hWnd)
    {
        GetWindowThreadProcessId(hWnd, &pid);
        if(current_pid == pid)
            break;
    }
} while(hWnd);

::SetParent(FmxHandleToHWND(Handle), NULL);
::ShowWindow(hWnd, SW_HIDE);
于 2013-12-10T15:06:44.433 に答える