Как вы и просили, вот мое мнение по этому вопросу, но, как я неуверен с C ++ Builder, в Delphi pascal.
Проблема, которую вы описываете (разница в поведении в зависимости от того, выводится ли Form1
или Form2
на передний план) из-за того, что Form1
является главной формой. Проблема не существует, если ни одна форма не является основной формой.
Если одна форма является основной формой, проблема становится менее заметной, если вы используете AlphaBlendValue
для одновременного изменения видимости обеих форм, то есть повышения значение для формы, чтобы привести и уменьшить значение для другой. Поскольку обе формы частично видны, их порядок z не так очевиден, как если бы вы изменили только одну из форм.
Начните с проекта с двумя формами (TForm25 и TForm26 в моем коде).
TForm25
property AlphaBlend = True
property AlphaBlendValue = 255
property Visible = True
TForm26
property AlphaBlend = True
property AlphaBlendValue = 0
property Visible = True
Добавьте следующий код где-нибудь, где обе формы имеют к нему доступ.
procedure FadeOutIn(FOut, FIn: TForm);
var
i: integer;
begin
FIn.BringToFront;
for i := 1 to 255 do
begin
FOut.AlphaBlendValue := 255-i;
FIn.AlphaBlendValue := i;
sleep(1); // use 20 for a really slow transition, just to demonstrate
// or remove if not needed
end;
end;
В моем тесте обе формы создаются автоматически, и Visible = True
для обеих, но Form26
не виден, так как его AlphaBlendValue = 0
. У каждой формы есть кнопка для вызова FadeOutIn()
для ее постепенного исчезновения (скрытия) и появления (отображения) другой формы.
procedure TForm25.Button1Click(Sender: TObject);
begin
FadeOutIn(Form25, Form26);
end;
procedure TForm26.Button1Click(Sender: TObject);
begin
FadeOutIn(Form26, Form25);
end;
Предупреждение: - Поскольку обе формы являются полупрозрачными одновременно, независимо от Лежа позади также просвечивает во время перехода.