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

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

?? qlrptbld.pas

?? 詳細的ERP設計資料
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
end;

procedure TQLDBGridReportBuilder.BuildList(Grid: TDBGrid; AutoFit: Boolean;
  ColumnHeaderBand, DetailBand, SummaryBand: TQRCustomBand;
  FieldList: TList; SummaryFields: TStrings);
const
  HorzOffset = 2;
var
  I, TitleRowCount: Integer;
  AColumn: TColumn;
  AData: TQRDBText;
  ALabel: TQRLabel;
  AExpr: TQRExpr;
  AColumnShape, ADetailShape: TQRShape;
  AWidth: Integer;
  TotalWidth: Integer;
  HadDetail: Boolean;
  HadColHead: Boolean;
  VertLines, HorzLines: Boolean;
//  TM: TTextMetric;
  CurrentLefts: array of Integer;

  function GridLineWidth: Integer;
  begin
    Result := THackDBGrid(Grid).GridLineWidth;
  end;

  procedure AddColumn(AColumn: TColumn);

    function GetColumnCount: Integer;
    var
      I: Integer;
    begin
      Result := 0;
      if AColumn.ParentColumn <> nil then
        for I := 0 to Grid.Columns.Count - 1 do
          with Grid.Columns[I] do
            if ParentColumn = AColumn.ParentColumn then
              Inc(Result);
    end;

    function GetMasterCol(ACol: TColumn; ADepth: Integer): TColumn;
    begin
      Result := ACol;
      while (Result <> nil) and (Result.Depth > ADepth) do
        Result := Result.ParentColumn;
    end;

    function GetRowCount: Integer;
    var
      I: Integer;
      MasterCol: TColumn;
    begin
      Result := 0;
      MasterCol := GetMasterCol(AColumn, 0);
      with Grid do
        for I := 0 to Columns.Count - 1 do
          if (GetMasterCol(Columns[I], 0) = MasterCol) and (Columns[I].Depth + 1 > Result) then
            Result := Columns[I].Depth + 1;
    end;

    function GetColWidth: Integer;
    var
      I: Integer;
//      MasterCol: TColumn;
    begin
      Result := 0;
      with Grid do
        for I := 0 to Columns.Count - 1 do
          if GetMasterCol(Columns[I], AColumn.Depth) = AColumn then
            Result := Result + Columns[I].Width + GridLineWidth;
    end;

    function GetIsLastColumn: Boolean;
    var
      I: Integer;
    begin
      Result := True;
      for I := AColumn.Index + 1 to Grid.Columns.Count - 1 do
        if GetMasterCol(Grid.Columns[I], AColumn.Depth) <> AColumn then
        begin
          Result := False;
          Break;
        end;
    end;

    function GetIsChildLastCol: Boolean;
    var
      MasterCol: TColumn;
      I: Integer;
    begin
      Result := False;
      MasterCol := GetMasterCol(AColumn, AColumn.Depth - 1);
      if MasterCol <> nil then
      begin
        for I := AColumn.Index + 1 to Grid.Columns.Count - 1 do
          if GetMasterCol(Grid.Columns[I], AColumn.Depth - 1) = MasterCol then
            Exit;
        Result := True;
      end;
    end;

  var
    Temp: string;
    RowCount, RowHeight, ColWidth, I: Integer;
//    ARect: TRect;
    IsLastCol: Boolean;
  begin
{$IFDEF DEBUG}
    SendDebug('-------------------------------------------');
    SendDebug('AColumn.FieldName = ' + AColumn.FieldName);
    SendInteger('AColumn.Depth', AColumn.Depth);
{$ENDIF}
//    ARect := THackDBGrid(Grid).CalcTitleRect(AColumn, AColumn.Depth, MasterCol);
    if Length(CurrentLefts) <= AColumn.Depth then SetLength(CurrentLefts, Length(CurrentLefts) + 1);
//    ColWidth := ARect.Right - ARect.Left;
    ColWidth := GetColWidth;
    RowCount := GetRowCount;
    RowHeight := ColumnHeaderBand.Height div RowCount;
//    ColCount := GetColumnCount;
    IsLastCol := GetIsLastColumn;
    AData := nil;

    ALabel := TQRLabel(ColumnHeaderBand.AddPrintable(TQRLabel));
    ALabel.Top := RowHeight * AColumn.Depth + (RowHeight - ALabel.Height) div 2;
    ALabel.AutoSize := False;
    ALabel.Font.Assign(AColumn.Title.Font);
    ALabel.Alignment := AColumn.Title.Alignment;
    if AutoFit then
    begin
      if IsLastCol  then
        AWidth := ColumnHeaderBand.Width - CurrentLefts[AColumn.Depth]
      else
        AWidth := Trunc(ColWidth / TotalWidth * ColumnHeaderBand.Width);
      ALabel.Width := AWidth - HorzOffset;
//      ALabel.Transparent := True;
    end
    else begin
//      ALabel.AutoSize := True;
//      GetTextMetrics(Grid.Canvas.Handle, TM);
//      ALabel.Caption := MakeStr('X', (ColWidth + (TM.tmAveCharWidth div 2) - TM.tmOverhang - 3)
//          div TM.tmAveCharWidth);
//      ALabel.AutoSize := False;
      ALabel.Width := ColWidth - HorzOffset;
      AWidth := ColWidth + GridLineWidth;
//      AWidth := ALabel.Width + HorzOffset;
    end;
//    ALabel.AutoSize := False;
//    ALabel.Font.Style := ALabel.Font.Style + [fsBold];
    if ALabel.Alignment = taRightJustify then
      ALabel.Left := CurrentLefts[AColumn.Depth]
    else
      ALabel.Left := CurrentLefts[AColumn.Depth] + HorzOffset;
    ALabel.Caption := AColumn.Title.Caption;
//    ALabel.Frame.DrawBottom := True;
    if HorzLines and (AColumn.Depth < RowCount - 1) then
    begin
      with TQRShape(ColumnHeaderBand.AddPrintable(TQRShape)) do
      begin
        Shape := qrsHorLine;
        Top := RowHeight * (AColumn.Depth + 1) - 1;
        Left := CurrentLefts[AColumn.Depth];
        if IsLastCol then Width := ColumnHeaderBand.Width - Left
        else Width := AWidth;
        Height := 1;
{$IFDEF DEBUG}
        SendInteger('HorzShape.Width', Width);
        SendInteger('ColumnHeaderBand.Width', ColumnHeaderBand.Width);
{$ENDIF}
      end;
//      if AutoFit then ADetailShape.Left := CurrentLeft + ALabel.Width + HorzOffset;
    end;
    if VertLines and not IsLastCol and not GetIsChildLastCol then
    begin
      AColumnShape := TQRShape(ColumnHeaderBand.AddPrintable(TQRShape));
      AColumnShape.Shape := qrsVertLine;
      if AColumn.Depth = 0 then AColumnShape.Top := 0
      else AColumnShape.Top := RowHeight * AColumn.Depth;
      AColumnShape.Width := 1;
      AColumnShape.Height := ColumnHeaderBand.Height - AColumnShape.Top;
      {if AutoFit then }AColumnShape.Left := CurrentLefts[AColumn.Depth] + AWidth - 1;
    end;
    if not AColumn.Expanded then
    begin
      AData := TQRDBText(DetailBand.AddPrintable(TQRDBText));
      AData := TQRDBText.Create(Report);
      AData.Parent := DetailBand;
      AData.AutoSize := False;
      AData.DataSet := AColumn.Field.DataSet;
      AData.DataField := AColumn.FieldName;
      if AColumn.Field.DataSet.FindField(AColumn.FieldName) = nil then
        ShowMessage('');
      AData.Top := (DetailBand.Height - AData.Height) div 2;
      AData.Width := ALabel.Width;
      AData.Alignment := AColumn.Alignment;
{$IFDEF DEBUG}
      SendDebug('AData.DataName = ''' + AData.DataField+ '''');
{$ENDIF}
  //    if AutoFit then
      if AData.Alignment = taRightJustify then
        AData.Left := CurrentLefts[AColumn.Depth]
      else AData.Left := CurrentLefts[AColumn.Depth] + HorzOffset;
      if VertLines and not IsLastCol and FHasColLines then
      begin
        ADetailShape := TQRShape(DetailBand.AddPrintable(TQRShape));
        ADetailShape.Shape := qrsVertLine;
        ADetailShape.Top := 0;//ALabel.Top;
        ADetailShape.Left := CurrentLefts[AColumn.Depth] + AWidth - 1;
        ADetailShape.Width := 1;
        ADetailShape.Height := DetailBand.Height;
  //      if AutoFit then ADetailShape.Left := CurrentLeft + ALabel.Width + HorzOffset;
      end;
    end;
    Temp := SummaryFields.Values[AColumn.FieldName];
    if Temp <> '' then
    begin
      AExpr := TQRExpr(SummaryBand.AddPrintable(TQRExpr));
      AExpr.AutoSize := False;
      AExpr.Expression := Temp;
      if IsPublishedProp(AColumn.Field, 'currency') and
        (GetOrdProp(AColumn.Field, 'currency') = 1) then
        AExpr.Mask := CurrencyString + '0.00';
      AExpr.Alignment := AData.Alignment;
      AExpr.Left := AData.Left;
      AExpr.Width := AData.Width;
      AExpr.Top := (SummaryBand.Height - AExpr.Height) div 2;
      AExpr.ResetAfterPrint := True;
    end;
    if (Temp <> '') and VertLines and not IsLastCol and FHasColLines then
    begin
      with TQRShape(SummaryBand.AddPrintable(TQRShape)) do
      begin
        Shape := qrsVertLine;
        Top := 0;
        Left := ADetailShape.Left;
        Width := 1;
        Height := SummaryBand.Height;
      end;
//      if AutoFit then ADetailShape.Left := CurrentLeft + ALabel.Width + HorzOffset;
    end;
{$IFDEF DEBUG}
    SendInteger('AWidth', AWidth);
    SendInteger('ColWidth', ColWidth);
    SendInteger('CurrentLeft', CurrentLefts[AColumn.Depth]);
    SendInteger('RowCount', RowCount);
{$ENDIF}
    if AColumn.Depth = RowCount - 1 then
      for I := Length(CurrentLefts) - 1 downto AColumn.Depth + 1 do
        CurrentLefts[I] := CurrentLefts[I] + AWidth;
    CurrentLefts[AColumn.Depth] := CurrentLefts[AColumn.Depth] + AWidth;
//    if not AColumn.Expanded then
//      CurrentLeft := CurrentLeft + AWidth;
//    else begin
      if FAutoOrientation and (AData <> nil) and (AData.Left + AData.Width > DetailBand.Width) and
        (Orientation = poPortrait) then Orientation := poLandscape;
      if (AData <> nil) and (AData.Left + AData.Width > DetailBand.Width) then
      begin
        ALabel.Free;
        AData.Free;
      end;
//    end;
  end;

begin
  TotalWidth := 0;
  for I := 0 to Grid.Columns.Count - 1 do
    if Grid.Columns[I].Visible and not Grid.Columns[I].Expanded and
      (FieldList.IndexOf(Grid.Columns[I].Field) >= 0) then
      TotalWidth := TotalWidth + Grid.Columns[I].Width + GridLineWidth;
  Font.Assign(Grid.Font);
  HadColHead := ColumnHeaderBand <> nil;
  HadDetail := DetailBand <> nil;
  if HadColHead then
    with TQRLabel(ColumnHeaderBand.AddPrintable(TQRLabel)) do
    try
      Caption := 'Wg';
      Font.Style := Font.Style + [fsBold];
      ColumnHeaderBand.Height := Round(Height * 1.5)
    finally
      Free;
    end;
  if HadDetail then
    with TQRLabel(DetailBand.AddPrintable(TQRLabel)) do
    try
      Caption := 'Wg';
      DetailBand.Height := Round(Height * 1.5)
    finally
      Free;
    end;
  VertLines := DBGrids.dgColLines in Grid.Options;
  HorzLines := DBGrids.dgRowLines in Grid.Options;
  if DBGrids.dgTitles in Grid.Options then
  begin
//    if HadColHead then
//      ColumnHeaderBand.Height := 20;
    if VertLines then
    begin
      if HadColHead then
        with ColumnHeaderBand.Frame do
        begin
          DrawLeft := True;
          DrawRight := True;
        end;
      if FHasColLines then
        with DetailBand.Frame do
        begin
          DrawLeft := True;
          DrawRight := True;
        end;
    end;
    if HorzLines then
    begin
      if HadColHead then
        with ColumnHeaderBand.Frame do
        begin
          DrawTop := True;
          DrawBottom := True;
        end;
      if FHasRowLines then
        with DetailBand.Frame do DrawBottom := True;
    end;
  end;
//  ColumnHeaderBand.Height := ColumnHeaderBand.Height * 2;
  if Grid <> nil then
  begin
//    CurrentLeft := 0;
    TitleRowCount := 0;
    with Grid do
      for I := 0 to Columns.Count - 1 do
        if Columns[I].Depth + 1 > TitleRowCount then
          TitleRowCount := Columns[I].Depth + 1;
    if ColumnHeaderBand <> nil then
      with ColumnHeaderBand do Height := Height * TitleRowCount;
    SetLength(CurrentLefts, TitleRowCount);
    for I := 0 to Grid.Columns.Count - 1 do begin
      AColumn := Grid.Columns[I];
      if AColumn.Visible and (FieldList.IndexOf(AColumn.Field) >= 0) {and not (AField.DataType in ftNonTextTypes +
        [ftUnknown]) }then AddColumn(AColumn);
    end;
  end;
  RenameObjects;
end;

procedure TQLDBGridReportBuilder.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
  inherited Notification(AComponent, Operation);
  if Operation = opRemove then
    if (AComponent = Report) then Report := nil
    else if AComponent = DBGrid then DBGrid := nil
    else if AComponent = SubDetailDBGrid then SubDetailDBGrid := nil;
end;

function TQLDBGridReportBuilder.GetReport: TCustomQuickRep;
begin
  Result := inherited Report;
end;

procedure TQLDBGridReportBuilder.SetReport(const Value: TCustomQuickRep);
begin
  if Value <> Report then
  begin
//    if Report <> nil then Report.RemoveFreeNotification(Self);
    inherited Report := Value;
    if Value <> nil then Value.FreeNotification(Self);
  end;
end;

procedure TQLDBGridReportBuilder.SetDBGrid(const Value: TDBGrid);
begin
  if FDBGrid <> Value then
  begin
    FDBGrid := Value;
    if Value <> nil then Value.FreeNotification(Self);
  end;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
性欧美大战久久久久久久久| 亚洲天天做日日做天天谢日日欢 | 日本 国产 欧美色综合| 在线成人av影院| 国产综合色在线视频区| 色婷婷av一区二区三区软件| 欧美日韩国产另类不卡| 中文字幕一区av| 国产宾馆实践打屁股91| 亚洲成人第一页| 久久成人免费电影| 欧美一区二区三区男人的天堂| 成人综合在线视频| 久久99精品久久久久久国产越南 | 极品少妇xxxx偷拍精品少妇| 亚洲一区成人在线| 日韩国产欧美在线观看| 欧美这里有精品| 理论电影国产精品| 国产精品高潮久久久久无| 成人午夜av在线| 国产精品女同互慰在线看| 成人爱爱电影网址| 亚洲一级二级三级在线免费观看| 欧美日韩免费一区二区三区 | 国产成都精品91一区二区三| 久久久国产午夜精品| 成人久久18免费网站麻豆| 亚洲影视在线播放| 精品日本一线二线三线不卡| 国产**成人网毛片九色 | 精品少妇一区二区三区| 亚洲综合视频网| xf在线a精品一区二区视频网站| 欧美日韩高清在线播放| 粉嫩13p一区二区三区| 国产精品无遮挡| 七七婷婷婷婷精品国产| 国产欧美日韩精品在线| 伊人色综合久久天天| 欧美日韩大陆一区二区| 久久狠狠亚洲综合| 秋霞午夜鲁丝一区二区老狼| 免费在线观看不卡| 久久精品国产色蜜蜜麻豆| 日本色综合中文字幕| 日韩va欧美va亚洲va久久| 蜜臀久久久久久久| 精品一区二区三区久久| 国产精品1区2区3区在线观看| 成人午夜视频在线观看| 日韩不卡在线观看日韩不卡视频| 日韩毛片一二三区| 中文字幕精品一区二区精品绿巨人| 欧美日韩国产a| 欧美日韩一二区| 91原创在线视频| 99re在线精品| 99久久99久久免费精品蜜臀| 成人午夜精品在线| 国产成人在线网站| 国产在线一区观看| 久久精品国产久精国产爱| 亚洲va国产va欧美va观看| 综合av第一页| 亚洲福利电影网| 日韩高清不卡在线| 美女在线一区二区| 丁香婷婷综合网| 成人开心网精品视频| 欧美色男人天堂| 色综合久久久久综合99| 欧美日韩国产乱码电影| 欧美一区二区三区四区视频| www国产成人免费观看视频 深夜成人网| 91福利国产成人精品照片| 久久久噜噜噜久久中文字幕色伊伊| 国产欧美日韩精品在线| 琪琪一区二区三区| 日本亚洲最大的色成网站www| 国产精品高清亚洲| 久88久久88久久久| 国产精品伦理一区二区| 在线精品视频免费播放| 岛国精品在线播放| 欧美日韩高清一区二区三区| 国产亚洲精品福利| 亚洲午夜激情av| 成人精品一区二区三区四区 | 成人18视频在线播放| 91精品国产综合久久久蜜臀粉嫩| 欧美韩国日本一区| 水野朝阳av一区二区三区| 精品一区二区三区欧美| 91丨porny丨最新| 欧美一级片免费看| 亚洲丝袜另类动漫二区| 久久国产婷婷国产香蕉| 在线亚洲精品福利网址导航| 欧美不卡一区二区| 青青草原综合久久大伊人精品优势| 99精品视频一区| 久久久久成人黄色影片| 久久99久久久欧美国产| 精品视频1区2区3区| 亚洲欧美在线视频观看| 国产乱码字幕精品高清av| 欧美日韩一级片网站| 亚洲三级小视频| 国产91精品欧美| 国产精品福利av| 成人一区二区三区视频| 国产视频一区在线观看| 国产在线视频一区二区三区| 欧美一卡二卡在线观看| 日韩国产在线观看| 5月丁香婷婷综合| 免费在线看成人av| 久久久一区二区三区捆绑**| 久久精品国产精品亚洲综合| 亚洲黄色小视频| 欧美亚洲动漫精品| 麻豆91精品91久久久的内涵| 亚洲国产精品嫩草影院| 色噜噜狠狠成人中文综合| 久久青草国产手机看片福利盒子| 国产精品正在播放| 亚洲午夜一区二区三区| 中文字幕亚洲成人| 欧美精品一区二区三区在线播放| 国产乱码精品一区二区三| 成人黄色av网站在线| 亚洲免费资源在线播放| 91精品国产综合久久精品| 国产一区二区视频在线播放| 国产成人一级电影| 欧美中文字幕一区| av一区二区三区黑人| 日韩欧美资源站| 麻豆91精品91久久久的内涵| 日韩女优电影在线观看| 久久se精品一区二区| 精品成人在线观看| 国模无码大尺度一区二区三区| 亚洲欧美视频在线观看视频| 成人激情免费网站| 亚洲免费观看高清完整版在线观看熊| 国产成人精品一区二区三区四区| 美女视频黄免费的久久| 亚洲国产精品高清| 日韩欧美成人一区| 欧洲一区在线电影| 国产精品综合在线视频| 亚洲成av人影院在线观看网| 久久先锋影音av| 欧美一级二级三级乱码| 一本大道久久a久久精二百| 韩国av一区二区| 免费高清不卡av| 麻豆视频观看网址久久| 午夜精品久久久久久久99水蜜桃 | 日韩视频免费观看高清完整版| 成人免费观看av| 韩国精品一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲国产综合人成综合网站| 亚洲精品成a人| 中文字幕欧美一| 亚洲精品高清在线观看| 亚洲视频免费观看| 一区二区三区成人| 一区二区三区四区亚洲| 久久精品国产一区二区三区免费看 | 韩国女主播一区二区三区| 国产在线精品一区二区夜色 | 九色porny丨国产精品| 亚洲国产精品成人综合色在线婷婷 | 欧美日韩国产首页| 精彩视频一区二区| 国产精品第13页| 日韩一区二区免费在线观看| 国产91精品一区二区| 天天影视网天天综合色在线播放| 久久久久久99精品| 欧美日韩一区二区在线观看| 国产精品自拍一区| 亚洲成av人综合在线观看| 视频一区在线视频| 在线观看日韩电影| 日韩免费福利电影在线观看| 欧美激情艳妇裸体舞| 亚洲免费电影在线| 美女脱光内衣内裤视频久久影院| 美女诱惑一区二区| 91麻豆国产福利在线观看| 欧美精品成人一区二区三区四区| 欧美一级夜夜爽| 亚洲美女屁股眼交3| 成人综合婷婷国产精品久久蜜臀 | 欧美日韩亚洲国产综合|