0

アプリケーションを最大化するように設定すると、Windows タスクバーが自動的に非表示になるように設定すると、下部にあるタスクバーの小さな 2 ピクセルのラインが消え、アプリケーションを最小化するとタスクバーが再表示された後、タスクバーにアクセスできなくなります。

なぜなのかご存知ですか ?

私は Windows 7 を使用しています。私のアプリケーションは Delphi XE でプログラムされています。

上部にタブがある chrome/firefox のようなアプリケーションを作成することです。タスクバーが消える問題のサンプルを示します。

DFM

object Form3: TForm3
  Left = 0
  Top = 0
  Caption = 'Form3'
  ClientHeight = 320
  ClientWidth = 635
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Arial'
  Font.Style = []
  OldCreateOrder = False
  WindowState = wsMaximized
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 14
  object PageControl1: TPageControl
    AlignWithMargins = True
    Left = 0
    Top = 15
    Width = 635
    Height = 305
    Margins.Left = 0
    Margins.Top = 15
    Margins.Right = 0
    Margins.Bottom = 0
    ActivePage = TabSheet3
    Align = alClient
    TabOrder = 0
    object TabSheet1: TTabSheet
      Caption = 'TabSheet1'
    end
    object TabSheet2: TTabSheet
      Caption = 'TabSheet2'
    end
    object TabSheet3: TTabSheet
      Caption = 'TabSheet3'
    end
  end
end

コード

unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Dwmapi, ComCtrls, StdCtrls;

type
  TForm3 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    procedure FormCreate(Sender: TObject);
  private
    FWndTopFrameSize : Integer;
    FWndBorderFrameSize : Integer;
    procedure WMNCCalcSize(var Message: TWMNCCalcSize); message WM_NCCALCSIZE;
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.FormCreate(Sender: TObject);
var
   r : TRect;
begin
   if DwmCompositionEnabled then begin
      SetRectEmpty(r);
      AdjustWindowRectEx(r, GetWindowLong(Handle, GWL_STYLE), False,
                         GetWindowLong(Handle, GWL_EXSTYLE));
      FWndTopFrameSize:=-r.Top;
      FWndBorderFrameSize:=r.Right;
      GlassFrame.Top:=FWndTopFrameSize+PageControl1.Margins.Top;
      GlassFrame.Enabled:=True;
      SetWindowPos(Handle, 0, Left, Top, Width, Height, SWP_FRAMECHANGED);
   end;
end;

procedure TForm3.WMNCCalcSize(var Message: TWMNCCalcSize);
begin
   inherited;
   if DwmCompositionEnabled then
      Inc(Message.CalcSize_Params.rgrc[0].Top, -FWndTopFrameSize);
end;

end.
4

0 に答える 0