Topic: Как получить имя формы
Мне нужно в отдельную процедуру послать имя формы. Как получить имя формы?
My Visual Database → Russian → Как получить имя формы
Мне нужно в отдельную процедуру послать имя формы. Как получить имя формы?
Form1.Name
Я перефразирую свой вопрос:
Есть скрипт, которым можно заблокировать прокрутку значений в ComboBox-ах:
procedure Form1_OnShow (Sender: string; Action: string);
begin
Form1.OnMouseWheel := @OnMVDMouseWheel;
end;
procedure OnMVDMouseWheel(Sender: TObject; isShift, isAlt, isCtrl: boolean; WheelDelta: Integer; X, Y: Integer; var Handled: Boolean);
begin
if Form1.ActiveControl is TdbComboBox then Handled := True;
end;
В процедуре OnMVDMouseWheel имя формы "Form1" указано в явном виде.
Есть ли способ, чтобы избавиться от явного указания имени формы "Form1"?
как послать в OnMVDMouseWheel переменную, которая содержит имя формы "Form1"?
Т.е. надо чтобы было так: if Переменная_с_именем_формы.ActiveControl is TdbComboBox then Handled := True;
в процедуре OnMVDMouseWheel есть переменная Sender, в которой содержится компонент, который вызывает данное событие, т.о. данное событие можно использовать одновременно для нескольких форм, пример
procedure Form1_OnShow (Sender: string; Action: string);
begin
Form1.OnMouseWheel := @OnMVDMouseWheel;
Form2.OnMouseWheel := @OnMVDMouseWheel;
end;
procedure OnMVDMouseWheel(Sender: TObject; isShift, isAlt, isCtrl: boolean; WheelDelta: Integer; X, Y: Integer; var Handled: Boolean);
begin
if TAForm(Sender).ActiveControl is TdbComboBox then Handled := True;
end;
Тогда во всех формах в событии открытия можно не указывать имя формы, а просто можно написать один и тот же код TAForm(Sender).OnMouseWheel := @OnMVDMouseWheel и получится:
procedure Form1_OnShow (Sender: string; Action: string);
begin
TAForm(Sender).OnMouseWheel := @OnMVDMouseWheel;
end;
procedure OnMVDMouseWheel(Sender: TObject; isShift, isAlt, isCtrl: boolean; WheelDelta: Integer; X, Y: Integer; var Handled: Boolean);
begin
if TAForm(Sender).ActiveControl is TdbComboBox then Handled := True;
end;
Да, точно.
Нет, так не работает.
Когда нажимаешь открытие формы кнопкой то, вылетает ошибка "Could not convert variant of type (OleStr) into type (Boolean).
Видимо потому, что Sender - это кнопка, а не форма.
Получается, что всегда надо вызывать процедуру именно с названием формы.
Т.е. правильный код:
procedure Form1_OnShow (Sender: string; Action: string);
begin
Form1.OnMouseWheel := @OnMVDMouseWheel;
end;
А может можно как то внутри процедуры получить имя текущей формы, чтобы можно было универсальный код написать? Например:
procedure Form1_OnShow (Sender: string; Action: string);
begin
ИмяТекущейФормы.OnMouseWheel := @OnMVDMouseWheel;
end;
Проще сделать так
procedure OnMVDMouseWheel(Sender: TObject; isShift, isAlt, isCtrl: boolean; WheelDelta: Integer; X, Y: Integer; var Handled: Boolean);
begin
if TAForm(Sender).ActiveControl is TdbComboBox then Handled := True;
end;
begin
Form1.OnMouseWheel := @OnMVDMouseWheel;
frmAbonent.OnMouseWheel := @OnMVDMouseWheel;
end.
My Visual Database → Russian → Как получить имя формы
Powered by PunBB, supported by Informer Technologies, Inc.
Theme Hydrogen by Kushi