как получить доступ к объектам в runtime?

отредактировано 08:59 Раздел: FastReport 3.0
Проблема. В fast report 3.20 в runtime нужно получить доступ к ранее созданному обьекту (в данном случае к memo).
Как было написано в руководстве:

var
Memo1: TfrxMemoView;
Memo1 := frxReport1.FindObject('Memo1') as TfrxMemoView;

Так вот - код не работает, компилятор указывает, что нужно поставить точку с запятой перед AS, а если ее ставишь, то происходит несовпадение типов TfrxMemoView и TfrxComponent !

Кто знает, подскажите, как решить данную проблему и получить доступ к свойствам объекта ?

Комментарии

  • LexLex
    отредактировано 08:59
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Memo1: TfrxMemoView;
    begin
      Memo1 := frxReport1.FindObject('Memo1') as TfrxMemoView;
      Memo1.Text := '1111';
      frxReport1.ShowReport;
    end;
    

    ни каких ошибок, все работает
  • отредактировано 08:59
    Ну да, если из дельфы делать, то может быть. А мне это в самом отчете надо сделать!!!
  • LexLex
    отредактировано 08:59
    в самом отчете просто
    Memo1.Text := '1111';
  • отредактировано 08:59
    Если бы!!! Сами эти объекты создаются динамически при выполнении отчета, и соответственно компилятору на стадии написания кода ничего об этих компонентах неизвестно, поэтому такой вариант не подходит.
    У меня динамически создается N-е количество memo, при этом их названия идут от 1 до N, например d1, d2, ..., dN.

    Так вот вопрос, как можно получить доступ к I-тому мемо.

    Я пробовал так:

    MemObj := Report.FindObject('''' + 'd'+ inttostr(i) + '''' ) as TfrxMemoView;

    а эта строка приводила в свою очередь к ошибке, описанной выше!!!
  • LexLex
    отредактировано 08:59
    Где и как ты создаешь свои мемо?
  • отредактировано 08:59
    Значит мемо создаются после выбора соответсвующих опций на форме (в моем случае форма тоже находится в отчете) по нажатии кнопки...

    Код:


    qrRecordsCount.Open;
    qrRecordsCount.First;
    i:=1;
    while not qrRecordsCount.EOF do
    begin
    MxCode := <qrRecordsCount."Matrix_code">;
    MxName := <qrRecordsCount."Matrix_name">;
    inc(i);
    qrRecordsCount.next;
    end;

    N := i-1;

    for i:=1 to N do begin
    if ((page2.Paperwidth - 10) <= (170 + i * 20 + 20)) then
    page2.Paperwidth := page2.Paperwidth + 20;

    with TfrxMemoView.create(header2) do
    begin
    Parent := header2;
    align := 1;
    text := MxName;
    Name := 'm'+ inttostr(i);
    frame.typ :=15;
    width := 2 * 37.7953;
    height := 0.4 * 37.7953;
    left := 17 * 37.7953 + i * 2 * 37.7953;
    visible := true;
    color := $00FFFFDC;
    end;
    with TfrxMemoView.create(MasterData2) do
    begin
    Parent := MasterData2;
    align := 1;
    text := '';
    Name := 'd'+ inttostr(i);
    frame.typ :=15;
    width := 2 * 37.7953;
    height := 0.4 * 37.7953;
    left := 19 * 37.7953;
    visible := true;
    stretchmode := smMaxheight;
    end;
    i:= i+1;
    end;
  • LexLex
    отредактировано 08:59
    похоже вот что тебе нужно(хотя не пойму зачем)

    Memo := TfrxMemoView(Report.FindObject('Memo1'));
    Memo.Text := 'asdfsdf';
  • отредактировано 08:59
    Ура. Заработало, спасибо!!!

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

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