Topic: Как получить имя формы

Мне нужно в отдельную процедуру послать имя формы. Как получить имя формы?

Re: Как получить имя формы

Form1.Name
Dmitry.

Re: Как получить имя формы

Я перефразирую свой вопрос:

Есть скрипт, которым можно заблокировать прокрутку значений в 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;

Re: Как получить имя формы

в процедуре 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;
Dmitry.

Re: Как получить имя формы

Тогда во всех формах в событии открытия можно не указывать имя формы, а просто можно написать один и тот же код 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;

Re: Как получить имя формы

Да, точно.

Dmitry.

7 (edited by mikhail_a 2017-07-20 15:55:48)

Re: Как получить имя формы

Нет, так не работает.
Когда нажимаешь открытие формы кнопкой то, вылетает ошибка "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;

Re: Как получить имя формы

Проще сделать так

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.
Dmitry.