Изменение цвета в DataBand

отредактировано 19:27 Раздел: FastReport 3.0
В общем проблема такая. На Delphi 7 динамически создается отчет. Данные берутся из таблицы. И в зависимости от значения ячейки таблицы необходимо изменять цвет ячейки отчета. Как это делается? Шаблоны отчетов неприемлимы.

Комментарии

  • отредактировано 19:27
    У мемки есть такое свойство как Highligh

    кстати что означает фраза "Шаблоны отчетов неприемлимы" ?
  • отредактировано 19:27
    -=Serg=- спасибо, поковыряюсь. ;)
    А фраза означает что изначально я представления не имею, какой отчет получу (т.е. все в динамике).
  • отредактировано 19:27
    -=Serg=-
    и где это свойство мемки обрабатывать? ;)
  • gpigpi
    отредактировано March 2006
    Свойством Highlight задаются параметры условного выделения. Обычно это делается на этапе проектирования отчёта либо в главной процедуре скрипта отчёта
    Если на этапе проектирования нельзя определить параметры условного выделения, то тогда нужно менять параметры отображения мемо в обработчике OnBeforePrint мемо или бэнда, на котором расположен мемо
  • отредактировано 19:27
    а если бенд и мемка создаются динамически в Дельфях, то мне как все это реализовать средствами Дельфи?
  • gpigpi
    отредактировано 19:27
    Модификация примера из документации
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, frxDesgn, frxClass, StdCtrls, frxDBSet, Printers, DB, DBTables;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
     Table1: TTable;
     frxReport1: TfrxReport;
     frxDBDataSet1: TfrxDBDataSet;
     Page: TfrxReportPage;
     Band: TfrxBand;
     DataBand: TfrxMasterData;
     Memo: TfrxMemoView;
    begin
    { создаём таблицу }
    Table1 := TTable.Create(Form1);
    Table1.DatabaseName := 'DBDEMOS';
    Table1.TableName := 'customer.db';
    Table1.Active := True;
    { создаём отчет }
    frxReport1 :=TfrxReport.Create(Form1);
    { создаём датасет }
    frxDBDataSet1 :=TfrxDBDataSet.Create(Form1);
    frxDBDataSet1.UserName:='frxDBDataSet1';
    frxDBDataSet1.DataSet:=Table1;
    { очищаем отчет }
    frxReport1.Clear;
    { очищаем скрипт }
    frxReport1.ScriptText.Clear;
    { добавляем источник данных в список доступных для отчета }
    frxReport1.DataSets.Add(frxDBDataSet1);
    { добавляем страницу }
    Page := TfrxReportPage.Create(frxReport1);
    { создаем уникальное имя }
    Page.CreateUniqueName;
    { устанавливаем размеры полей, бумаги и ориентацию по умолчанию }
    Page.SetDefaults;
    { меняем ориентацию бумаги }
    Page.Orientation := poLandscape;
    { добавляем report title }
    Band := TfrxReportTitle.Create(Page);
    Band.CreateUniqueName;
    { для бэнда достаточно установить координату Top и высоту }
    { обе координаты - в пикселах }
    Band.Top := 0;
    Band.Height := 20;
    { добавляем объект на report title }
    Memo := TfrxMemoView.Create(Band);
    Memo.CreateUniqueName;
    Memo.Text := 'Hello FastReport!';
    Memo.Height := 20;
    { этот объект будет растянут на ширину бэнда }
    Memo.Align := baWidth;
    { добавляем master data }
    DataBand := TfrxMasterData.Create(Page);
    DataBand.CreateUniqueName;
    DataBand.DataSet := frxDBDataSet1;
    { координата Top не должна пересекать ранее добавленный бэнд! }
    DataBand.Top := 100;
    DataBand.Height := 20;
    { добавляем объект на master data }
    Memo := TfrxMemoView.Create(DataBand);
    Memo.CreateUniqueName;
    Memo.OnBeforePrint:=Memo.Name+'OnBeforePrint';
    { добавляем в скрипт обработчик }
    frxReport1.ScriptText.Add('procedure '+Memo.Name+'OnBeforePrint(Sender: TfrxComponent);');
    frxReport1.ScriptText.Add('begin');
    frxReport1.ScriptText.Add(' if <frxDBDataSet1."CustNo">=1231 then '+Memo.Name+'.Color:=clRed else '+Memo.Name+'.Color:=clNone;');
    frxReport1.ScriptText.Add('end;');
    { подключаем к данным }
    Memo.DataSet := frxDBDataSet1;
    Memo.DataField := 'CustNo';
    Memo.SetBounds(0, 0, 100, 20);
    { выравниваем текст по правому краю объекта }
    Memo.HAlign := haRight;
    frxReport1.ScriptText.Add('begin');
    frxReport1.ScriptText.Add('end.');
    { показываем отчет }
    frxReport1.ShowReport;
    end;
    
    end.
    ======dfm======
    object Form1: TForm1
      Left = 260
      Top = 152
      Width = 237
      Height = 217
      Caption = 'Form1'
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'MS Sans Serif'
      Font.Style = []
      OldCreateOrder = False
      PixelsPerInch = 96
      TextHeight = 13
      object Button1: TButton
        Left = 78
        Top = 112
        Width = 75
        Height = 25
        Caption = 'Show Report'
        TabOrder = 0
        OnClick = Button1Click
      end
    end
    
  • отредактировано 19:27
    gpi, спасибо, именно то, что я и хотел! ;)

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

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