Обработчики событий в диалоговых компонентах

отредактировано 10:12 Раздел: FastReport 4.0
При разработке собственных компонент для диалоговой формы обработчики
событий не опознаются в дизайнере в качестве таковых, поскольку в C++
Builder тип обработчика в TypeInfo.Name не TfrxEvent, а AnsiString.
Исправить можно например так:

Файл frxDsgnIntf.pas

function TfrxPropertyEditorCollection.GetPropertyEditor(PropertyType: PTypeInfo;
Component: TPersistent; PropertyName: String): Integer;
var
i: Integer;
Item: TfrxPropertyEditorItem;
begin
if (Pos('tfrx', LowerCase(PropertyType.Name)) = 1) and
(Pos('event', LowerCase(PropertyType.Name)) = Length(PropertyType.Name) - 4) then
begin
Result := FEventEditorItem;
Exit;
end;

{Patched for C++ Builder compatibility}
{Patch start}
if (Pos('On', PropertyName) = 1) and
(Pos('AnsiString',PropertyType.Name) = 1) then
begin
Result := FEventEditorItem;
Exit;
end;
{Patch end}





Файл frxInsp.pas

procedure TfrxObjectInspector.SetSelectedObjects(Value: TList);
var
i: Integer;
s: String;

procedure CreateLists;
var
i: Integer;
p: TfrxPropertyItem;
s: String;
begin
if FPropertyList <> nil then
FPropertyList.Free;
if FEventList <> nil then
FEventList.Free;
FEventList := nil;

FPropertyList := frxCreatePropertyList(Value, FDesigner);

{Patched for C++ Builder compatibility}
{Patch start}

if FPropertyList <> nil then
begin
FEventList := TfrxPropertyList.Create(FDesigner);

i := 0;
while i < FPropertyList.Count do
begin
p := FPropertyList;
s := p.Editor.PropInfo.PropType^.Name;
if (Pos('Tfrx', s) = 1) and (Pos('Event', s) = Length(s) - 4) then
p.Collection := FEventList
else
if (Pos('On', p.Editor.PropInfo.Name) = 1) and
(Pos('AnsiString',s) = 1) then
p.Collection := FEventList

else

Inc(i);
end;
end;
{Patch end}

Комментарии

  • отредактировано 10:12
    Это не все - дизайнер FR не сможет автоматически создавать код обработчика. Тут нужен именно тип события, имени недостаточно.
  • отредактировано November 2006
    Не буду спорить с автором ;) , но после вышеприведенного патча у меня все прекрасно работает в моих диалоговых компонентах - обработчики создаются.

    Все это тянется еще с FR3, этот код остался прежним.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.