Содержание материала

Таким образом, если третьим параметром метода «Add» будет задано True, то TVCLScriptControl установит обработчики событий OnClick, OnChange, OnEnter, OnExit и OnTimer на свои методы, реализованные следующим образом:

 

Code:

procedure TVCLScriptControl.OnClickHandler(Sender: TObject);

begin

RunProc((Sender as TComponent).Name + '_' + 'OnClick');

end;

 

 

 

Примером использования данной функциональности может служить следующий код:

 

Code:

Sub Main()

Self.Add "Timer1", "TTimer", True

With Timer1

   .Interval = 1000

   .Enabled = True

End With

End Sub

 

Sub Timer1_OnTimer()

Self.Caption = CStr(Time)

End Sub

 

Если требуется назначить обработчики событий имеющихся на форме компонентов это может быть сделано в коде

Button1.OnClick := ScriptControl1.OnClickHandler;

или реализацией соответствующего метода в GetIdsOfNames и Invoke

 

Получение свойств

Для получения свойств классов VCL служит метод GetVCLProperty. В нем осуществляется трансляция типов данных Object Pascal в типы данных OLE.

 

Code:

function TVCLProxy.GetVCLProperty(PropInfo: PPropInfo;

dps: TDispParams; PDispIds: PDispIdList; var Value: OleVariant

): HResult;

var

I, J, K: Integer;

S: String;

P, P1: TPersistent;

Data: PTypeData;

DT: TDateTime;

TypeInfo: PTypeInfo;

begin

Result := S_OK;

case PropInfo^.PropType^.Kind of

 

 

 

Для данных строкового и целого типа Delphi осуществляет автоматическую трансляцию

 

Code:

   tkString, tkLString, tkWChar, tkWString:

     // Символьная строка

     Value := GetStrProp(FOwner, PropInfo);

   tkChar, tkInteger:

     // Целое число

     Value := GetOrdProp(FOwner, PropInfo);

 

 

Для перечисляемых типов OLE не имеет прямых аналогов. Поэтому для всех типов, кроме Boolean будем передавать символьную строку с именем соответствующей константы. Для Boolean имеется подходящий тип данных и этот случай необходимо обрабатывать отдельно

 

Code:

   tkEnumeration:

     begin

       // Проверяем, не Boolean ли это

       if CompareText(PropInfo^.PropType^.Name, 'BOOLEAN') = 0 then

         // Передаем как Boolean

         Value := Boolean(GetOrdProp(FOwner, PropInfo));

       else begin

         // Остальные - передаем как строку

         I := GetOrdProp(FOwner, PropInfo);

         Value := GetEnumName(PropInfo^.PropType^, I);

       end;

     end;

 

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить