亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rm_pehgrid.pas

?? report machine 2.3 功能強大
?? PAS
?? 第 1 頁 / 共 2 頁
字號:

{*****************************************}
{                                         }
{          Report Machine v2.0            }
{             EHLib report                }
{                                         }
{*****************************************}

unit RM_PEHGrid;

interface

{$I RM.INC}
{$IFDEF EHLib}
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Stdctrls,
  Grids, DBGrids, DBGridEh, Printers, Db, RM_Class, RM_dbset, RM_View, RM_Pars,
  RM_FormReport;

type
  TRMPrintEHLib = class(TComponent) // fake component
  end;

 { TRMPrintEHGrid }
  TRMPrintEHGrid = class(TRMFormReportObject)
  private
    FPrintDoubleFrame: Boolean;
    FFormReport: TRMFormReport;
    FPage: TRMPage;
    FDBGridEh: TCustomDBGridEh;
    procedure PrintMultiTitle;
    procedure OnBeforePrintBandEvent(Band: TRMBand; var PrintBand: Boolean);
    procedure PrintSimpleTitle;
  protected
  public
    procedure OnGenerate_Object(aFormReport: TRMFormReport; Page: TRMPage;
      Control: TControl; var t: TRMView); override;
  end;

{$ENDIF}
implementation

{$IFDEF EHLib}
uses RM_chbox, RM_Utils;

type
  THackGrid = class(TCustomDBGridEh)
  end;

  THackFormReport = class(TRMFormReport)
  end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{TRMPrintEHGrid}

procedure TRMPrintEHGrid.PrintMultiTitle;
var
  liLeft0, liTop0: Integer;
  liNextX, liLastX, liNextY, liLeftX, liRightX: Integer;
  liPage: TRMPage;
  liNum: Integer;
  liSaveNode: THeadTreeNode;
  liFlagFirstColumn: Boolean;
  liLevel: Integer;
  liMinx: Integer;
  t, t1: TRMMemoView;
  i: Integer;

  procedure MakeOneHeader(aNode: THeadTreeNode);
  begin
    liSaveNode := aNode;
    t := TRMMemoView(RMCreateObject(gtMemo, ''));
    t.CreateUniqueName;
    if (rmgoGridLines in FFormReport.ReportOptions) and (dgColLines in THackGrid(FDBGridEh).Options) then
      t.Prop['FrameTyp'] := $F
    else
      t.Prop['FrameTyp'] := 0;
    t.PWordWrap := True;
    t.LineSpacing := 0;
    t.PLayout := rmtlCenter;
    if Assigned(aNode.Column) then
    begin
{$IFDEF EHLib20}
      t.PRotation90 := aNode.Column.Title.Orientation = tohVertical;
{$ENDIF}
      case aNode.Column.Title.Alignment of
        taLeftJustify: t.PAlignment := rmtaLeftJustify;
        taRightJustify: t.PAlignment := rmtaRightJustify;
        taCenter: t.PAlignment := rmtaCenterJustify;
      end;
    end
    else
      t.PAlignment := rmtaCenterJustify;

    if liNextX < liLeftX then
      t.SetBounds(liLeftX, liNextY, aNode.Width + 1 + (liNextX - liLeftX), aNode.Height)
    else
    begin
      if liNextX + aNode.Width + 1 > liRightX then
        t.SetBounds(liNextX, liNextY, (liRightX - liNextX), aNode.Height)
      else
        t.SetBounds(liNextX, liNextY, aNode.Width + 1, aNode.Height);
    end;

    t.Memo.Add(aNode.Text);
    if Assigned(aNode.Column) then
      FFormReport.AssignFont(t, aNode.Column.Title.Font)
    else
      FFormReport.AssignFont(t, THackGrid(FDBGridEh).TitleFont);

    liPage.Objects.Add(t);
    FFormReport.PageHeaderViews.Add(t);

    if (liLevel <= 0) and FPrintDoubleFrame then
			t.TopFrame.Width := 2;
    if FPrintDoubleFrame then
    begin
			if liFlagFirstColumn then liMinx := liNextX;
    	if liFlagFirstColumn or (liMinx >= liNextX) then
	    	t.LeftFrame.Width := 2;
    end;
    liFlagFirstColumn := False;

    liLastX := liNextX;
    liNextX := liNextX + aNode.Width + 1;
  end;

  procedure ShowParentNode(aNode: THeadTreeNode);
  var
    SaveY: Integer;
  begin
    SaveY := liNextY;
    while (aNode <> nil) and (aNode.Text <> 'Root') do
    begin
			Dec(liLevel);
      liNextY := liNextY - aNode.Height;
      liNextX := liLastX;
      MakeOneHeader(aNode);
      if FPrintDoubleFrame then
      	t.RightFrame.Width := 2;
      aNode := aNode.Host;
    end;
    liNextY := SaveY;
  end;


  procedure DrawHeader(aNode: THeadTreeNode; aCount: Integer);
  var
    htLast: THeadTreeNode;
    liCount: Integer;
    liFlag: Boolean;

    procedure ShowOneColumn(aNode: THeadTreeNode);
    var
      SaveY: Integer;
      SaveLevel: Integer;
    begin
      if (FFormReport.ScaleMode.ScaleMode <> rmsmFit) or (not FFormReport.ScaleMode.FitPageWidth) then
      begin
        if (liNum > 0) and (THackFormReport(FFormReport).CalcWidth(liNextX + aNode.Width + 1) > THackFormReport(FFormReport).PageWidth) then // 超寬
        begin
					SaveLevel := liLevel;
          liNum := 0;
          liRightX := liNextX;
  				if FPrintDoubleFrame then
  					t.RightFrame.Width := 2;

          if aNode.Host = liSaveNode.Host then
          	ShowParentNode(liSaveNode.Host);
          liRightX := 9999999;
          THackFormReport(FFormReport).FormWidth[FFormReport.Report.Pages.Count - 1] := IntToStr(liNextX);
          THackFormReport(FFormReport).AddPage;
          THackFormReport(FFormReport).FormWidth.Add('0');
          liPage := FFormReport.Report.Pages[FFormReport.Report.Pages.Count - 1];
          liNextX := liLeft0; liLeftX := liLeft0;

				  liFlagFirstColumn := True;
          if FFormReport.GridFixedCols > 0 then
          begin
            SaveY := liNextY; liNextY := liTop0;
						liLevel := 0;
            DrawHeader(FDBGridEh.HeadTree, FFormReport.GridFixedCols);
            liNextY := SaveY;
            liLeftX := liNextX;
          end;

	        liLevel := SaveLevel;
        end;
      end;

      MakeOneHeader(aNode);
      Inc(liNum);
    end;

  begin
    liCount := 0;
    htLast := aNode.Child;
    liFlag := True;
    while liFlag do
    begin
      if htLast.Child <> nil then
      begin
        liNextY := liNextY + htLast.Height;
        Inc(liLevel);
        DrawHeader(htLast, aCount);
        Dec(liLevel);
      end;

      if htLast <> nil then
      begin
        Inc(liCount);
        ShowOneColumn(htLast);
        if (aCount > 0) and (liCount >= aCount) then
          liFlag := False;
      end;

      if aNode.Child = htLast.Next then
      begin
        liNextY := liNextY - aNode.Height;
        liNextX := liNextX - aNode.Width - 1;
        Break;
      end;
      htLast := htLast.Next;
    end;
  end;

begin
  liSaveNode := nil;
  liLeft0 := FDBGridEh.Left + THackFormReport(FFormReport).OffsX;
  liTop0 := FDBGridEh.Top + THackFormReport(FFormReport).OffsY;
  liNextX := liLeft0; liNextY := liTop0; liLastX := liNextX;
  liLeftX := liLeft0;
  liRightX := 9999999; liNum := 0;
  liPage := FPage;
  liFlagFirstColumn := True;
  liLevel := 0;
  DrawHeader(FDBGridEh.HeadTree, -1);

  if FPrintDoubleFrame then
  begin
		t.RightFrame.Width := 2;
    for i := liPage.Objects.Count - 1 downto 0 do
    begin
			t1 := liPage.Objects[i];
      if t1.x + t1.dx = t.x + t.dx then
      	t1.RightFrame.Width := 2
      else
      	Break;  
    end;
  end;
end;

procedure TRMPrintEHGrid.PrintSimpleTitle;
var
  i, liTitleHeight: Integer;
  liNextX, liNextY: Integer;
  liPage: TRMPage;
  liNum: Integer;
  t: TRMMemoView;
  tmpx0: Integer;
  liFlagFirstColumn: Boolean;

  procedure MakeOneHeader(aIndex: Integer);
  begin
    t := TRMMemoView(RMCreateObject(gtMemo, ''));
    t.CreateUniqueName;
    if (rmgoGridLines in FFormReport.ReportOptions) and (dgColLines in THackGrid(FDBGridEh).Options) then
      t.Prop['FrameTyp'] := $F
    else
      t.Prop['FrameTyp'] := 0;
    t.PWordWrap := True;
    t.LineSpacing := 0;
{$IFDEF EHLib20}
    t.PRotation90 := FDBGridEh.Columns[aIndex].Title.Orientation = tohVertical;
{$ENDIF}
    t.PLayout := rmtlCenter;
    case THackGrid(FDBGridEh).Columns[aIndex].Title.Alignment of
      taLeftJustify: TRMMemoView(t).PAlignment := rmtaLeftJustify;
      taRightJustify: TRMMemoView(t).PAlignment := rmtaRightJustify;
      taCenter: TRMMemoView(t).PAlignment := rmtaCenterJustify;
    end;
    t.SetBounds(liNextX, liNextY, THackGrid(FDBGridEh).Columns[aIndex].Width + 1, liTitleHeight);
    t.Memo.Add(THackGrid(FDBGridEh).Columns[aIndex].Title.Caption);
    FFormReport.AssignFont(t, THackGrid(FDBGridEh).Columns[aIndex].Title.Font);

    liPage.Objects.Add(t);
    FFormReport.PageHeaderViews.Add(t);
    liNextX := liNextX + t.dx;

    if FPrintDoubleFrame then
    begin
      if liFlagFirstColumn then
        t.LeftFrame.Width := 2;
      t.TopFrame.Width := 2;
    end;
    liFlagFirstColumn := False;
  end;

  procedure DrawFixedColHeader;
  var
    i: Integer;
  begin
    for i := 0 to FFormReport.GridFixedCols - 1 do
    begin
      if not THackGrid(FDBGridEh).Columns[i].Visible then Continue;
      if i < THackGrid(FDBGridEh).Columns.Count then MakeOneHeader(i);
    end;
  end;

begin
  liNextX := FDBGridEh.Left + THackFormReport(FFormReport).OffsX;
  liNextY := FDBGridEh.Top + THackFormReport(FFormReport).OffsY;
  liTitleHeight := THackGrid(FDBGridEh).RowHeights[0] + 4;
  liPage := FPage;
  liNum := 0; tmpx0 := liNextX;
  liFlagFirstColumn := True;
  for i := 0 to THackGrid(FDBGridEh).Columns.Count - 1 do
  begin
    if not THackGrid(FDBGridEh).Columns[i].Visible then Continue;

    if (FFormReport.ScaleMode.ScaleMode <> rmsmFit) or (not FFormReport.ScaleMode.FitPageWidth) then
    begin
      if (liNum > 0) and (THackFormReport(FFormReport).CalcWidth(liNextX + (THackGrid(FDBGridEh).Columns[i].Width + 1)) > THackFormReport(FFormReport).PageWidth) then // 超寬
      begin
        liNum := 0;
        liFlagFirstColumn := True;
        if FPrintDoubleFrame then
          t.RightFrame.Width := 2;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人网在线播放| 欧美精选一区二区| 欧美精品久久一区二区三区| 国产日本亚洲高清| 日本欧美在线观看| 欧洲av一区二区嗯嗯嗯啊| 精品乱码亚洲一区二区不卡| 亚洲高清三级视频| 色天使色偷偷av一区二区| 国产清纯白嫩初高生在线观看91 | 国产高清精品网站| 欧美撒尿777hd撒尿| 国产精品久久久久桃色tv| 免费欧美日韩国产三级电影| 欧美亚洲综合久久| 亚洲黄一区二区三区| 成人激情图片网| 精品美女在线播放| 久久精品72免费观看| 欧美精品v国产精品v日韩精品| 亚洲欧洲av另类| 成人在线一区二区三区| 国产欧美日韩精品一区| 国产一区二区不卡| 久久亚洲综合色一区二区三区| 日韩av一区二区在线影视| 欧美日韩在线免费视频| 亚洲人精品一区| 99久久精品免费看国产免费软件| 欧美国产亚洲另类动漫| 国产精品亚洲综合一区在线观看| 精品99一区二区| 捆绑变态av一区二区三区| 欧美一区三区二区| 日韩av不卡一区二区| 91精品一区二区三区久久久久久| 午夜精品成人在线视频| 欧美喷水一区二区| 视频一区二区中文字幕| 91麻豆精品国产无毒不卡在线观看| 午夜一区二区三区在线观看| 欧美精品丝袜中出| 久久er99热精品一区二区| 欧美变态tickle挠乳网站| 国产自产v一区二区三区c| 国产婷婷一区二区| 99久久久久久| 亚洲国产精品久久人人爱蜜臀 | 国产精品一二三四区| 国产精品午夜免费| 色婷婷亚洲精品| 日本美女一区二区三区| 久久久国产精品午夜一区ai换脸| 国产69精品久久久久毛片| 亚洲视频一二三区| 9191国产精品| 国产激情视频一区二区三区欧美| 国产精品嫩草久久久久| 欧美性视频一区二区三区| 免费人成精品欧美精品| 中文字幕av一区二区三区高| 欧美视频在线播放| 国产精品1024| 亚洲国产日韩av| 久久久蜜桃精品| 91久久国产综合久久| 久久精品国产成人一区二区三区 | 亚洲自拍偷拍图区| 精品国产91亚洲一区二区三区婷婷| 成人理论电影网| 午夜精品一区在线观看| 久久久久久久久久久99999| 日本韩国精品在线| 国产一区二区三区最好精华液| 亚洲女同女同女同女同女同69| 日韩写真欧美这视频| 在线影视一区二区三区| 韩国欧美国产一区| 午夜欧美2019年伦理 | 欧美一三区三区四区免费在线看| 国产成人精品影视| 日韩精品免费专区| 国产精品日韩精品欧美在线| 91精品国产色综合久久| 色偷偷久久一区二区三区| 国产一区二区三区电影在线观看| 香蕉av福利精品导航 | 国产精品美女久久久久久久| 欧美电影在线免费观看| 99久久99久久精品免费观看| 精品综合久久久久久8888| 亚洲成人免费视频| 日韩美女视频19| 国产精品久久午夜夜伦鲁鲁| 精品美女在线观看| 日韩欧美精品三级| 欧美男生操女生| 在线观看日韩av先锋影音电影院| 成人激情图片网| 成人一区二区三区视频| 国产一区二区三区最好精华液| 日本不卡123| 五月开心婷婷久久| 一区二区不卡在线播放 | 91久久免费观看| 色综合久久久久久久久久久| 9i在线看片成人免费| 成人av综合在线| 成人美女在线观看| 成人国产精品视频| 国产.精品.日韩.另类.中文.在线.播放| 久久精品国产精品亚洲综合| 精品系列免费在线观看| 日韩精品电影在线观看| 日本美女一区二区| 蜜乳av一区二区| 精品一区二区三区香蕉蜜桃| 久久se这里有精品| 国产精品一二三四五| 成人免费看片app下载| 99精品视频在线观看| 色综合咪咪久久| 欧美喷潮久久久xxxxx| 日韩亚洲欧美一区二区三区| 精品区一区二区| 久久久不卡网国产精品一区| 中文字幕日本乱码精品影院| 亚洲激情图片小说视频| 天天av天天翘天天综合网 | 日韩欧美国产一区二区三区| 日韩午夜中文字幕| 日本一区二区三级电影在线观看 | 美女久久久精品| 国产一区二区三区免费观看| 国产成人99久久亚洲综合精品| av一本久道久久综合久久鬼色| 色综合天天综合网国产成人综合天 | 欧美网站一区二区| 91麻豆精品久久久久蜜臀| 欧美大尺度电影在线| 久久久亚洲高清| 亚洲综合激情小说| 老司机午夜精品| 成人免费视频视频| 欧美精选一区二区| 欧美激情在线一区二区| 午夜精品久久一牛影视| 国产一区激情在线| 91小视频免费观看| 日韩一区二区电影网| 国产精品国产自产拍高清av| 亚洲va国产天堂va久久en| 国内成+人亚洲+欧美+综合在线 | 国产精品69久久久久水密桃| 一本大道综合伊人精品热热| 欧美一区二区三区人| 国产精品乱码一区二区三区软件| 亚洲妇熟xx妇色黄| 岛国一区二区在线观看| 91麻豆精品国产综合久久久久久| 国产精品乱码一区二三区小蝌蚪| 日韩激情av在线| 成人激情校园春色| 日韩精品一区二区三区中文不卡| 国产精品久久777777| 久久精品国产秦先生| 欧美主播一区二区三区美女| 国产女人水真多18毛片18精品视频 | 国产传媒一区在线| 欧美另类一区二区三区| 亚洲欧美中日韩| 激情欧美一区二区三区在线观看| 91浏览器打开| 亚洲国产精品成人综合| 激情综合五月婷婷| 3d动漫精品啪啪一区二区竹菊| 日本一区二区三级电影在线观看 | 国产亚洲综合av| 丝袜美腿亚洲一区二区图片| 色婷婷综合中文久久一本| 中文字幕精品一区二区精品绿巨人 | 精品国产一区二区三区忘忧草| 亚洲一区二区综合| 色综合欧美在线视频区| 中文字幕在线不卡一区二区三区 | 欧美中文字幕一区| 亚洲日本va在线观看| 国产99久久久国产精品| 亚洲精品一线二线三线 | 丝瓜av网站精品一区二区| 99re在线精品| 一色屋精品亚洲香蕉网站| 成人网页在线观看| 日本一区二区三区四区在线视频| 精品制服美女久久| 欧美大度的电影原声| 国模娜娜一区二区三区| 精品捆绑美女sm三区| 国产久卡久卡久卡久卡视频精品| 精品久久久久久久久久久久久久久|