Ваш подход
Frm := TForm2.Create(nil);
Frm.Left := 5;
Frm.Top := 5;
Frm.Parent := Self;
Frm.OnCreate := OncreateFrm;
Frm.Show;
не может работать, потому что вы установили обработчик OnCreate
в строке 5, что происходит после создания формы в строке 1; следовательно, во время создания формы (строка 1) он видит, что OnCreate
есть nil
, и ничего не делает. Ваша инструкция в строке 5 не действует.
Это все равно, что сказать своему другу: «Пожалуйста, купи молока по пути домой с работы после того, как твой друг уже вернулся с работы.
Решения
1: Установите свойства во время разработки
Конечно, вы можете использовать Инспектор объектов, чтобы установить свойства AlphaBlend
и AlphaBlendValue
объекта TForm2
во время разработки. Но я подозреваю, что вы хотите сделать это динамически, потому что вы задаете этот вопрос.
2: Используйте обработчик OnCreate
на TForm2
Просто откройте TForm2
в редакторе форм и дважды щелкните по нему, чтобы дать ему собственный обработчик OnCreate
:
// in Unit2.pas
procedure TForm2.FormCreate(Sender: TObject);
begin
AlphaBlend := True;
AlphaBlendValue := 128;
end;
3: переопределить конструктор TForm2
// in Unit2.pas
constructor TForm2.Create(AOwner: TComponent);
begin
inherited;
AlphaBlend := True;
AlphaBlendValue := 128;
end;
4: Установите свойства при создании объекта
// in Unit1.pas
procedure TForm1.Button1Click(Sender: TObject);
var
Frm: TForm2;
begin
Frm := TForm2.Create(nil);
Frm.Left := 5;
Frm.Top := 5;
Frm.AlphaBlend := True;
Frm.AlphaBlendValue := 128;
Frm.Show;
end;
В отличие от предыдущих трех подходов, этот влияет только на этот экземпляр TForm2
— он не влияет на сам класс.
Все эти подходы работают.
Есть но
Ваша линия
Frm.Parent := Self
означает, что вы превращаете эту форму в элемент управления, а не в окно верхнего уровня.
И многоуровневые окна (функция Win32, на которой основана функция AlphaBlend
VCL) поддерживаются только как дочерние окна в Windows 8 и более поздних версиях.
Поэтому, если вы используете Windows 7 или более раннюю версию, вы не можете использовать AlphaBlend
в этом случае.
person
Andreas Rejbrand
schedule
14.02.2021