В основном я пытаюсь получить экран паузы для моей игры в тетрис с игровым фреймом, замороженным на заднем плане. Проблема в том, что когда я помещаю свой 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:
Код паузы:
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.