Когда я помещаю Frame2 в Frame1, компоненты Frame2 появляются позади компонентов Frame1, пока я не наведу их - PullRequest
0 голосов
/ 03 апреля 2020

В основном я пытаюсь получить экран паузы для моей игры в тетрис с игровым фреймом, замороженным на заднем плане. Проблема в том, что когда я помещаю свой PauseFrame в GameFrame, мои компоненты PauseFrame находятся позади моих TPanels.

Есть еще 2 кнопки под кнопкой "Weiter" которые не отображаются, потому что я не парил их

Вот как я показываю PauseFrame:

procedure TTetrisFrame.PauseGame(Sender: TObject);
var
  myMenuFrame: TFrame;
begin
     PauseBtn.Visible := false;
     EinGameMaster.Pause;
     myMenuFrame := TPauseFrame.Create(Nil);
     myMenuFrame.Parent := Self;
end;

Это Pauseframe:

This is the Pauseframe

Код паузы:

type
  TPauseFrame = class(TFrame)
    BackgroundImg: TImage;
    WeiterBtn: TButton;
    NeustartenBtn: TButton;
    HauptmenueBtn: TButton;
    procedure CreateParams(var Params: TCreateParams);override;
    procedure PaintWindow(DC: HDC); override;
  public
    constructor Create(AOwner:TComponent);override;
  end;


implementation

{$R *.dfm}

uses
    GameFrame, Main;

constructor TPauseFrame.Create(AOwner: TComponent);
begin
     inherited;
     BringToFront;
     HauptmenueBtn.BringToFront;
     Brush.Style := bsClear;
end;

procedure TPauseFrame.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT or WS_EX_COMPOSITED;
end;

procedure TPauseFrame.PaintWindow(DC: HDC);
begin
  // Comment for transparency
end;

end.

Код GameFrame:

type
  TTetrisFrame = class(TFrame)
  private
    procedure PlacePauseButton;
    procedure DrawPlayingfield;
    procedure DrawOberflaeche;
  public
    Constructor Create(AOwner: TComponent); override;
  end;


implementation


{$R *.dfm}

uses
    UPauseFrame;
var
    TetrisPlayfield: array of array of TPanel;
    PauseBtn: TButton;

{ TFrame1 }

constructor TTetrisFrame.Create(AOwner: TComponent);
begin
     inherited;
     Left := 5;
     Top := 25;
     DrawPlayingfield;
end;

procedure TTetrisFrame.DrawPlayingfield;
var
   index,index2: integer;
const
     LeftPosition = 150;
     TopPosition = 600;
begin
     SetLength(9,19);
     for index := 0 to 9 do begin
        for index2 := 0 to 19 do begin
           TetrisPlayfield[index,index2] := TPanel.Create(Nil);
           TetrisPlayfield[index,index2].Parent := Self;
           TetrisPlayfield[index,index2].ParentBackground := false;
           TetrisPlayfield[index,index2].ParentColor := false;
           TetrisPlayfield[index,index2].BevelInner := bvNone;
           TetrisPlayfield[index,index2].BevelOuter := bvLowered;
           TetrisPlayfield[index,index2].BevelKind := bkNone;
           TetrisPlayfield[index,index2].Height := 30;
           TetrisPlayfield[index,index2].width := 30;
           TetrisPlayfield[index,index2].Left := LeftPosition + (index * 30);
           TetrisPlayfield[index,index2].Top := TopPosition - (index2 * 30);
           TetrisPlayfield[index,index2].Visible := True;
        end;
     end;
end;

procedure TTetrisFrame.PauseGame(Sender: TObject);
var
  myMenuFrame: TFrame;
begin
     EinGameMaster.Pause;
     PauseBtn.Visible := false;
     myMenuFrame := TPauseFrame.Create(Nil);
     myMenuFrame.Parent := Self;
end;

procedure TTetrisFrame.PlacePauseButton;
begin
     PauseBtn := TButton.Create(Nil);
     PauseBtn.Parent := Self;
     PauseBtn.Width := 100;
     PauseBtn.Height := 60;
     PauseBtn.Left := 50;
     PauseBtn.Top := 500;
     PauseBtn.Caption := 'Pause';
     PauseBtn.OnClick := PauseGame;
end;

end.
...