Доброго времени суток. Сразу к делу: В программе будет несколько форм (На данном этапе всего две), между ними осуществляется переход в различным разделам. Хочу создать раздел "меню настроек" в котором будет реализован пункт Полноэкранного/Оконного режима, но я не могу понять почему происходит Глюк.
Имеется Главная Форма 1 с переходом на Форму 2
В Форме 2 осуществляется переход программы в Полноэкранный/Оконный режим.
На Форме 2 я перехожу в Полноэкранный режим. В этом режиме (из Формы 2) я перехожу на Форму 1, а потом возвращаюсь обратно (на Форму 2) для перехода в оконный режим, с этого момента начинается глюк: После закрытия Формы 2 - Форму 1 кидает в верхний левый угол, хотя она должна появиться на месте Формы 2.
Если просто запустить программу и осуществить переходе из Оконного режима в Полноэкранный и вернуться обратно - то всё всё хорошо, формы появляются друг за другом.
Этот глюк проскакивает всего один раз при запуске программы, при повторных переходах и смены режима экрана глюк не появляется. Господа-эксперты помогите поймать ошибку.
---------------------------------------------------------------------------------------------------------------------------------------
Delphi |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
| unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Imaging.jpeg,
Vcl.ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Image2: TImage;
procedure Button5Click(Sender: TObject);
procedure Image2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure MyMove(var msg:TMessage); message wm_move;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses Unit2;
procedure TForm1.MyMove; // движение формы 2 за формой 1
begin
if Visible then
begin
Form2.Left:=Self.Left;
Form2.Top := Top;
end
end;
procedure TForm1.Button3Click(Sender: TObject); // Переход в раздел Настроек Программы
begin
Form2.Show;
Form2.position:=poMainFormCenter;
Form2.WindowState:=Form1.WindowState;
Form1.Hide;
end;
procedure TForm1.Button5Click(Sender: TObject); // Выход из программы
begin
Form1.Close;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Position:= poOwnerFormCenter;
end;
procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton; // Возможность перетаскивания формы в оконном режиме
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Perform(WM_SysCommand,$F012,0);
end;
end. |
|
------------------------------------------------------------------------------------------------------------------------------------------
Delphi |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
| unit Unit2;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Imaging.jpeg,
Vcl.ExtCtrls;
type
TForm2 = class(TForm)
Image1: TImage;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Image2: TImage;
procedure Button1Click(Sender: TObject);
procedure Image2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure MyMove(var msg:TMessage); message wm_move;
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
{ Private declarations }
procedure CreateParams(var Params: TCreateParams); override;
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
uses Unit1;
procedure TForm2.MyMove; // движение формы 1 за формой 2
begin
if Visible then
begin
Form1.Left:=Self.Left;
Form1.Top := Top;
end
end;
procedure TForm2.Button1Click(Sender: TObject); // переход в главное меню
begin
Form1.Position:=Form2.Position;
Form1.Show;
Form1.WindowState:=Form2.WindowState;
Form1.Image2.Visible:=Form2.Image2.Visible;
Form2.Hide;
end;
procedure TForm2.Button2Click(Sender: TObject); // Полнноэкранный режим
begin
Form2.WindowState:= Wsmaximized;
Form2.Image2.Visible:=False;
end;
procedure TForm2.Button3Click(Sender: TObject); // Оконный режим
begin
Form2.WindowState := wsNormal;
Form2.Position:= poDesktopCenter;
Form2.Image2.Visible:=True;
end;
procedure TForm2.CreateParams(var Params: TCreateParams); // Отображение программы на панели задач
begin
inherited CreateParams(Params);
with Params do
ExStyle := ExStyle or WS_EX_APPWINDOW;
end;
procedure TForm2.Image2MouseDown(Sender: TObject; Button: TMouseButton; // Возможность перетаскивания формы в оконном режиме
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Perform(WM_SysCommand,$F012,0);
end;
end. |
|
-----------------------------------------------------------------------------------------------------------------------------------------