Доступ к источникам данных на фреймах

отредактировано 04:55 Раздел: FastReport 2.xx VCL
;)

Как можно получить доступ к источникам данных, которые находятся в фреймах из дизайнера FastReport во время выполнения?

Комментарии

  • отредактировано 04:55
    rudjuk написал:
    ;)

    Как можно получить доступ к источникам данных, которые находятся в фреймах из дизайнера FastReport во время выполнения?
    Пришлось править в исходниках:

    Модуль FR_Units.pas

    1) procedure frGetDataSetAndField(ComplexName: String; var DataSet: TfrTDataSet;
    var Field: String);
    ....
    function FindField(ds: TfrTDataSet; FName: String): String;
    ....
    case n of
    0: // field name only
    ...
    Добавляем:

    2: // FormName.DatasetName.FieldName
    begin
    f := FindGlobalComponent(sl[0]);
    if f <> nil then
    begin
    DataSet := TfrTDataSet(f.FindComponent(sl[1]));
    s := frRemoveQuotes(sl[2]);
    Field := FindField(DataSet, s);
    end
    // Добавил Рудюк С.А. 11.02.2004
    else
    begin
    f := FindMyGlobalComponent(sl[0]);
    if f <> nil then
    begin
    DataSet := TfrTDataSet(f.FindComponent(sl[1]));
    s := frRemoveQuotes(sl[2]);
    Field := FindField(DataSet, s);
    end;
    end;

    end;


    2) function frFindComponent(Owner: TComponent; Name: String): TComponent;
    var
    n: Integer;
    s1, s2: String;
    begin
    Result := nil;
    n := Pos('.', Name);
    try
    if n = 0 then
    Result := Owner.FindComponent(Name)
    else
    begin
    s1 := Copy(Name, 1, n - 1); // module name
    s2 := Copy(Name, n + 1, 255); // component name
    Owner := FindGlobalComponent(s1);

    // Рудюк С.А. 11.02.2004
    if Owner = nil then Owner := FindMyGlobalComponent(s1);


    3)procedure frGetComponents(Owner: TComponent; ClassRef: TClass;
    List: TStrings; Skip: TComponent);
    var
    i, j: Integer;

    procedure EnumComponents(f: TComponent);
    var
    i: Integer;
    c: TComponent;
    begin
    {$IFDEF Delphi5}
    if f is TForm then
    for i := 0 to TForm(f).ControlCount - 1 do
    begin
    c := TForm(f).Controls;
    if c is TFrame then
    EnumComponents©;
    end;
    {$ENDIF}
    for i := 0 to f.ComponentCount - 1 do
    begin
    c := f.Components;

    // Добавлено Рудюк С.А. 11.02.2004}
    if c is TFrame then
    EnumComponents©
    else

    if (c <> Skip) and (c is ClassRef) then
    if f = Owner then
    List.Add(c.Name)
    else if ((f is TForm) or (f is TDataModule) or (f is TFrame){Исправлено Рудюк С.А. 11.02.2004}) then
    List.Add(f.Name + '.' + c.Name)
    else
    List.Add(TControl(f).Parent.Name + '.' + f.Name + '.' + c.Name)
    end;
    end;

    4) function FindMyGlobalComponent(const Name: string): TComponent;
    // Рудюк С.А. 11.02.2004
    var
    I: Integer;
    begin
    Result := nil;
    for I := 0 to CurReport.Owner.ComponentCount-1 do
    begin
    if Trim(UpperCase(CurReport.Owner.Components.Name))=Trim(UpperCase(Name)) then
    begin
    result:=CurReport.Owner.Components;
    Exit;
    end;
    end;
    end;

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

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