Профессионалы отзовитесь, помогите решить проблему

отредактировано 18:03 Раздел: FastReport 3.0
Есть masterdata (на нем Мемо), ниже под Masterdata ноходится Child

вопрос: как сделать если в Мемо например 400 символов или меньше, то Child не отображается, если больше 400, то отображается в репорте???????

Комментарии

  • отредактировано 18:03
    делаю так:

    procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
    begin
    if Length(Memo1.Lines.text) > 390 then
    MasterData1.Child:=nil; (или Child1.Visivle:=false)
    end;
  • отредактировано 18:03
    Ставим свойства компонентов:
    1) MasterData1.Child = Child1,
    2) Child1.Visible = false;

    В коде пишем (код на C++Script, переведешь в PascalScript):
    bool bFlag;	// объявляем глобальный флаг смены свойства видимости Child1
      	// для того, чтобы менять это свойство единажды
    
    {  	// выставляем начальное значение флага
      bFlag = false;
    }
    
    void MasterData1OnAfterCalcHeight(TfrxComponent Sender)
    {
      if ((<Line> > 400) && (bFlag == false))	// <Line> - стандартное свойство FR
              	// сравниваем с нужным числом
      {
        ShowMessage ("больше");    	// можно убрать (для показухи)
        Child1.Visible = true;    	// делаем потомка доступным
        bFlag = true;      	// меняем состояние флага,
              	// чтобы не выполнять этот блок n раз
      }
    }
    

    Вот собственно и все.
    После записи в MasterData1 под номером 400 начнет отображаться Cild1
  • отредактировано 18:03
    спасибо за помошь, но чета у меня не работает

    если можна файлик с репортом через файлообменник скинь пожалста.

    вот так я сделал, может че не так???????
    var
     bFlag: Boolean;
    
    procedure Child5OnAfterCalcHeight(Sender: TfrxComponent);
    begin
     if ((<Line> > 400) and (bFlag = false))  then
       begin
         ShowMessage ('áîëüøå');
        Child2.Visible:=true;
        bFlag:=true;
       end;
    end;
    
    begin
     bFlag:=false;
    end.
    
  • отредактировано June 2006
    ВСЕ разобрался



    огромное спасибо за помощь



    и спасибо что есть такие люди, которые всегда рады помочь


    вместо
    if ((<Line> > 400) and (bFlag = false)) then
    сделал
    if ((Length(Memo10.Lines.Text) > 400) and (bFlag = false)) then
  • отредактировано 18:03
    Странно, что у тебя <Line> не работает. Эта переменная FastReport есть в Variables, может, она в PascalScript не в "<>" таких кавычках вызвывается... Попробуй написать
    Get("Line") //C++Script
    Get('Line') //PascalScript
    
    вместо
    <Line>
    
    или "[]" вместо "<>"

    У меня <Line> работает, и Get("...") работает.

    PS. В паскале не обязательна куча скобок в условиях ;)
  • LexLex
    отредактировано 18:03
    aseroff написал:
    Странно, что у тебя <Line> не работает.
    ему она не нужна
    aseroff написал:
    как сделать если в Мемо например 400 символов
  • отредактировано 18:03
    Понятно ;) )

    Меня просто переклинило, и я, уже по привычке, посчитал количество строк, а не символов ;) )))))

    <Line>, собственно, здесь и не должна работать - это количество Memo строк.

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

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