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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? reportcontrol.~pa

?? 國產(chǎn)的報表控件
?? ~PA
?? 第 1 頁 / 共 5 頁
字號:
  FLeftLineWidth := Cell.FLeftLineWidth;

  FTopLine := Cell.FTopLine;
  FTopLineWidth := Cell.FTopLineWidth;

  FRightLine := Cell.FRightLine;
  FRightLineWidth := Cell.FRightLineWidth;

  FBottomLine := Cell.FBottomLine;
  FBottomLineWidth := Cell.FBottomLineWidth;

  // 斜線
  FDiagonal := Cell.FDiagonal;

  // color
  FTextColor := Cell.FTextColor;
  FBackGroundColor := Cell.FBackGroundColor;

  // align
  FHorzAlign := Cell.FHorzAlign;
  FVertAlign := Cell.FVertAlign;

  // string
//  FCellText := Cell.FCellText;

  // font
  FLogFont := Cell.FLogFont;

  if Cell.OwnerCell <> nil then
  begin
    if bInsert then
    begin
      Cell.OwnerCell.FCellsList.Insert(
        Cell.OwnerCell.FCellsList.IndexOf(Cell),
        Self);
      FOwnerCell := Cell.OwnerCell;
    end
    else
      Cell.OwnerCell.AddOwnedCell(Self);
  end;
end;

// 一覺醒來,又是一個陽光燦爛的日子

///////////////////////////////////////////////////////////////////////////
// CReportLine

{ TReportLine }

procedure TReportCell.RemoveOwnedCell(Cell: TReportCell);
begin
  FCellsList.Remove(Cell);
  Cell.OwnerCell := nil;
end;

procedure TReportLine.CalcLineHeight;
var
  I: Integer;
  ThisCell: TReportCell;
begin
  FMinHeight := 0;

  for I := 0 to FCells.Count - 1 do
  begin
    ThisCell := TReportCell(FCells[I]);
    if ThisCell.CellHeight > FMinHeight then
      FMinHeight := ThisCell.CellHeight;
    ThisCell.CellIndex := I;

    if (I = 0) and (ReportControl <> nil) then
      ThisCell.CellLeft := ReportControl.FLeftMargin;

    if I > 0 then
      ThisCell.CellLeft := TReportCell(FCells[I - 1]).CellLeft + TReportCell(FCells[I - 1]).CellWidth;
  end;
end;

procedure TReportLine.CopyLine(Line: TReportLine; bInsert: Boolean);
var
  I: Integer;
  NewCell: TReportCell;
begin
  if Line = nil then
    Exit;

  FDragHeight := 0;
  FMinHeight := 20;
  FReportControl := Line.FReportControl;

  for I := 0 to Line.FCells.Count - 1 do
  begin
    NewCell := TReportCell.Create;
    FCells.Add(NewCell);
    NewCell.FOwnerLine := Self;
    NewCell.CopyCell(Line.FCells[I], bInsert);
  end;
end;

constructor TReportLine.Create;
begin
  FReportControl := nil;
  FCells := TList.Create;
  FIndex := 0;

  FMinHeight := 0;
  FDragHeight := 0;
  FLineTop := 0;
  FLineRect.left := 0;
  FLineRect.top := 0;
  FLineRect.right := 0;
  FLineRect.bottom := 0;
end;

destructor TReportLine.Destroy;
var
  I: Integer;
  ThisCell: TReportCell;
begin
  for I := FCells.Count - 1 downto 0 do
  begin
    ThisCell := TReportCell(FCells[I]);
    ThisCell.Free;
  end;

  FCells.Free;
  FCells := nil;

  inherited Destroy;
end;

procedure TReportLine.CreateLine(LineLeft, CellNumber, PageWidth: Integer);
var
  I: Integer;
  NewCell: TReportCell;
  CellWidth: Integer;
begin
  CellWidth := trunc(PageWidth / CellNumber + 0.5);

  for I := 0 to CellNumber - 1 do
  begin
    NewCell := TReportCell.Create;
    FCells.Add(NewCell);
    NewCell.OwnerLine := Self;
    NewCell.CellIndex := I;
    NewCell.CellLeft := I * CellWidth + LineLeft;
    NewCell.CellWidth := CellWidth;
  end;
end;

function TReportLine.GetLineHeight: Integer;
begin
  if FMinHeight > FDragHeight then
    Result := FMinHeight
  else Result := FDragHeight;
end;

function TReportLine.GetLineRect: TRect;
var
  I: Integer;
begin
  // 重新由各個CELL計算出該行的矩形來

  // 由各個CELL計算出行的高度
//  CalcLineHeight;                  // 移到UpdateLines中樂,呵呵。

  // 通知每個CELL重新計算坐標(biāo)
  for I := 0 to FCells.Count - 1 do
  begin
    TReportCell(FCells[I]).CellIndex := I;
    TReportCell(FCells[I]).CalcCellRect;
  end;

  if FCells.Count > 0 then
    Result.Left := TReportCell(FCells.First).CellLeft;
  Result.Top := FLineTop;
  Result.Bottom := Result.Top + LineHeight;
  Result.Right := Result.Left;

  for I := 0 to FCells.Count - 1 do
    Result.Right := Result.Right + TReportCell(FCells[I]).CellWidth;

  FLineRect := Result;
end;

procedure TReportLine.SetDragHeight(const Value: Integer);
begin
  FDragHeight := Value;
end;

procedure TReportLine.SetLineTop(const Value: Integer);
var
  I: Integer;
begin
  if FLineTop = Value then
    Exit;

  FLineTop := Value;

  for I := 0 to FCells.Count - 1 do
  begin
    TReportCell(FCells[I]).CalcCellRect;
  end;
end;

///////////////////////////////////////////////////////////////////////////
// TReportControl

{TReportControl}

procedure TReportControl.CreateWnd;
begin
  inherited;

  if Handle <> INVALID_HANDLE_VALUE then
    SetClassLong(Handle, GCL_HCURSOR, 0);
end;

constructor TReportControl.Create(AOwner: TComponent);
var
  hDesktopDC: HDC;
  nPixelsPerInch: Integer;
begin
  inherited Create(AOwner);

// 設(shè)定為無光標(biāo),防止光標(biāo)閃爍。
//  Cursor := crNone;

  FPreviewStatus := False;

  Color := clWhite;
  FLineList := TList.Create;
  FSelectCells := TList.Create;

  Celldisp := nil;
  cellline_d := nil;
  FEditCell := nil;

  FNewTable := True;
//  FDataLine := 2147483647;
//  FTablePerPage := 2147483647;
  FDataLine := 57; //廖伯志 1999.1.16
  FTablePerPage := 1; //

  pgw := 0;
  pgh := 0;

  FReportScale := 100;
  scale := FReportScale;
  FPageWidth := 0;
  FPageHeight := 0;

  hDesktopDC := GetDC(0);
  nPixelsPerInch := GetDeviceCaps(hDesktopDC, LOGPIXELSX);

  FLeftMargin1 := 20;
  FRightMargin1 := 20;
  FTopMargin1 := 20;
  FBottomMargin1 := 20;

  FLeftMargin := trunc(nPixelsPerInch * FLeftMargin1 / 25 + 0.5);
  FRightMargin := trunc(nPixelsPerInch * FRightMargin1 / 25 + 0.5);
  FTopMargin := trunc(nPixelsPerInch * FTopMargin1 / 25 + 0.5);
  FBottomMargin := trunc(nPixelsPerInch * FBottomMargin1 / 25 + 0.5);

  ReleaseDC(0, hDesktopDC);

  // 鼠標(biāo)操作支持
  FMousePoint.x := 0;
  FMousePoint.y := 0;

  // 編輯、顏色及字體
  FEditWnd := INVALID_HANDLE_VALUE;
  FEditBrush := INVALID_HANDLE_VALUE;
  FEditFont := INVALID_HANDLE_VALUE;
  CalcWndSize;
end;

destructor TReportControl.Destroy;
var
  I: Integer;
  ThisLine: TReportLine;
begin
  FSelectCells.Free;
  FSelectCells := nil;

  for I := FLineList.Count - 1 downto 0 do
  begin
    ThisLine := TReportLine(FLineList[I]);
    ThisLine.Free;
  end;

  FLineList.Free;
  FLineList := nil;
  inherited Destroy;
end;

procedure TReportControl.CalcWndSize;
var
  hClientDC: HDC;
begin
  isprint := 0;
  if printer.Printers.Count <= 0 then
  begin
    isprint := 1; //未安裝打印機
    if pgw <> 0 then
    begin
      FPageWidth := pgw;
      FPageHeight := pgh;
    end;
  end;

  // 根據(jù)用戶選擇的紙來確定報表窗口的大小并對該窗口進行設(shè)置。
  hClientDC := GetDC(0);
  if pgw = 0 then
  begin
    if isprint = 1 then
    begin
      FPageWidth := 768; //未安裝打印機時,設(shè)置默認(rèn)紙寬
      FPageHeight := 1058; //未安裝打印機時,設(shè)置默認(rèn)紙高
    end
    else
    begin
      FPageWidth := trunc(Printer.PageWidth / GetDeviceCaps(Printer.Handle, LOGPIXELSX)
        * GetDeviceCaps(hClientDC, LOGPIXELSX) + 0.5);
      FPageHeight := trunc(Printer.PageHeight / GetDeviceCaps(Printer.Handle, LOGPIXELSY)
        * GetDeviceCaps(hClientDC, LOGPIXELSY) + 0.5);
    end;
  end;
  pgw := FPageWidth;
  pgh := FPageHeight;
  Width := trunc(FPageWidth * FReportScale / 100 + 0.5);
  Height := trunc(FPageHeight * FReportScale / 100 + 0.5);
  ReleaseDC(0, hClientDC);
end;

procedure TReportControl.WMPaint(var Message: TMessage);
var
  hPaintDC: HDC;
  ps: TPaintStruct;
  I, J: Integer;
  TempRect: TRect;
  hGrayPen, hPrevPen: HPEN;
  ThisLine: TReportLine;
  ThisCell: TReportCell;
  WndSize: TSize;
  rectPaint: TRect;
begin
  hPaintDC := BeginPaint(Handle, ps);

  SetMapMode(hPaintDC, MM_ISOTROPIC);
  WndSize.cx := Width;
  WndSize.cy := Height;
  SetWindowExtEx(hPaintDC, FPageWidth, FPageHeight, @WndSize);
  SetViewPortExtEx(hPaintDC, Width, Height, @WndSize);

  rectPaint := ps.rcPaint;

  if FReportScale <> 100 then
  begin
    rectPaint.Left := trunc(rectPaint.Left * 100 / FReportScale + 0.5);
    rectPaint.Top := trunc(rectPaint.Top * 100 / FReportScale + 0.5);
    rectPaint.Right := trunc(rectPaint.Right * 100 / FReportScale + 0.5);
    rectPaint.Bottom := trunc(rectPaint.Bottom * 100 / FReportScale + 0.5);
  end;

  Rectangle(hPaintDC, 0, 0, FPageWidth, FPageHeight);

  hGrayPen := CreatePen(PS_SOLID, 1, RGB(128, 128, 128));
  hPrevPen := SelectObject(hPaintDC, hGrayPen);

  // 左上
  MoveToEx(hPaintDC, FLeftMargin, FTopMargin, nil);
  LineTo(hPaintDC, FLeftMargin, FTopMargin - 25);

  MoveToEx(hPaintDC, FLeftMargin, FTopMargin, nil);
  LineTo(hPaintDC, FLeftMargin - 25, FTopMargin);

  // 右上
  MoveToEx(hPaintDC, FPageWidth - FRightMargin, FTopMargin, nil);
  LineTo(hPaintDC, FPageWidth - FRightMargin, FTopMargin - 25);

  MoveToEx(hPaintDC, FPageWidth - FRightMargin, FTopMargin, nil);
  LineTo(hPaintDC, FPageWidth - FRightMargin + 25, FTopMargin);

  // 左下
  MoveToEx(hPaintDC, FLeftMargin, FPageHeight - FBottomMargin, nil);
  LineTo(hPaintDC, FLeftMargin, FPageHeight - FBottomMargin + 25);

  MoveToEx(hPaintDC, FLeftMargin, FPageHeight - FBottomMargin, nil);
  LineTo(hPaintDC, FLeftMargin - 25, FPageHeight - FBottomMargin);

  // 右下
  MoveToEx(hPaintDC, FPageWidth - FRightMargin, FPageHeight - FBottomMargin, nil);
  LineTo(hPaintDC, FPageWidth - FRightMargin, FPageHeight - FBottomMargin + 25);

  MoveToEx(hPaintDC, FPageWidth - FRightMargin, FPageHeight - FBottomMargin, nil);
  LineTo(hPaintDC, FPageWidth - FRightMargin + 25, FPageHeight - FBottomMargin);

  SelectObject(hPaintDC, hPrevPen);
  DeleteObject(hGrayPen);

  ///////////////////////////////////////////////////////////////////////////
    // 繪制所有與失效區(qū)相交的矩形
  for I := 0 to FLineList.Count - 1 do
  begin
    ThisLine := TReportLine(FLineList[I]);
    {
        if ThisLine.LineRect.Bottom < ps.rcPaint.top then
          Continue;

        if ThisLine.LineTop > ps.rcPaint.bottom then
          Break;
    }
    for J := 0 to TReportLine(FLineList[i]).FCells.Count - 1 do
    begin
      ThisCell := TReportCell(ThisLine.FCells[J]);

      if ThisCell.CellRect.Left > rectPaint.Right then
        Break;

      if ThisCell.CellRect.Right < rectPaint.Left then
        Continue;

      if ThisCell.CellRect.Top > rectPaint.Bottom then
        Break;

      if ThisCell.CellRect.Bottom < rectPaint.Top then
        Continue;

      if ThisCell.OwnerCell = nil then
        ThisCell.PaintCell(hPaintDC, FPreviewStatus);
    end;
  end;

  if not FPreviewStatus then
  begin
    for I := 0 to FSelectCells.Count - 1 do
    begin
      IntersectRect(TempRect, ps.rcPaint, TReportCell(FSelectCells[I]).CellRect);
      if (TempRect.right >= TempRect.Left) and (TempRect.bottom >= TempRect.top) then
        InvertRect(hPaintDC, TempRect);
    end;
  end;

  // 劃線的算法目前還沒有想出來
  // 各個CELL之間表線重疊的部分如何處理,如何存儲這些線的設(shè)置呢?顯然,現(xiàn)在的方法太土了。

  // 改樂,如果右面的CELL或下面的CELL的左邊線或上邊線為0時,不畫不就得樂。(1998.9.9)

  EndPaint(Handle, ps);
end;

procedure TReportControl.WMLButtonDBLClk(var Message: TMessage);
var
  ThisCell: TReportCell;
  TempPoint: TPoint;
  dwStyle: DWORD;
begin
  RemoveAllSelectedCell;
  GetCursorPos(TempPoint);
  Windows.ScreenToClient(Handle, TempPoint);

  ThisCell := CellFromPoint(TempPoint);

  if (ThisCell <> nil) and (ThisCell.CellWidth > 10) then
  begin
    FEditCell := ThisCell;

    if FEditFont <> INVALID_HANDLE_VALUE then
      DeleteObject(FEditFont);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区观看| 精品日本一线二线三线不卡| 成+人+亚洲+综合天堂| 国产精品自拍网站| 国产成a人亚洲精品| 丁香五精品蜜臀久久久久99网站| 极品少妇xxxx精品少妇| 国产自产高清不卡| 国产精品夜夜爽| 夫妻av一区二区| 91在线视频在线| 欧美视频在线一区| 7777精品伊人久久久大香线蕉最新版| 欧美图片一区二区三区| 欧美精品 日韩| 日韩一区二区高清| www久久精品| 国产女主播在线一区二区| 亚洲欧美一区二区在线观看| 亚洲视频一二区| 亚洲成人久久影院| 日韩av高清在线观看| 激情五月婷婷综合| 懂色中文一区二区在线播放| 91丨porny丨中文| 欧美亚洲一区二区在线| 日韩欧美一区在线观看| 国产午夜亚洲精品羞羞网站| 亚洲色图色小说| 亚洲成av人片在线观看| 久久精品国产99久久6| 国产成人激情av| 91豆麻精品91久久久久久| 欧美日韩一区二区三区在线| 精品美女在线观看| 中文字幕中文字幕在线一区| 午夜不卡av在线| 国产原创一区二区| 97精品国产露脸对白| 欧美精品电影在线播放| 国产亚洲精久久久久久| 亚洲资源在线观看| 激情综合网最新| 色国产精品一区在线观看| 欧美一区二区视频免费观看| 国产亚洲精品超碰| 婷婷国产在线综合| 成人午夜精品在线| 欧美日韩国产精品成人| 国产肉丝袜一区二区| 五月激情综合网| 成人午夜看片网址| 日韩欧美一级二级| 一区二区三区中文字幕精品精品| 美脚の诱脚舐め脚责91 | 另类小说视频一区二区| www.av精品| 日韩一卡二卡三卡四卡| 亚洲乱码中文字幕综合| 韩国精品免费视频| 欧美久久久久久蜜桃| 国产精品久久夜| 精品亚洲porn| 欧美午夜精品一区二区蜜桃| 中文字幕精品一区二区三区精品| 天天综合网 天天综合色| 不卡的看片网站| 精品国产一区二区三区不卡| 亚洲裸体xxx| 国产传媒欧美日韩成人| 欧美一区欧美二区| 夜夜嗨av一区二区三区四季av | 精品福利在线导航| 天堂蜜桃91精品| 色哟哟精品一区| 国产欧美1区2区3区| 久久疯狂做爰流白浆xx| 欧美日韩一区国产| 亚洲精品中文在线观看| 国产成人精品免费一区二区| 欧美大片在线观看| 男女男精品网站| 欧美日韩一区高清| 亚洲在线视频免费观看| 91蝌蚪porny| 1000部国产精品成人观看| 狠狠色狠狠色综合日日91app| 51精品国自产在线| 亚洲va天堂va国产va久| 色婷婷综合久久| 亚洲同性同志一二三专区| 国产98色在线|日韩| 久久久一区二区| 精品一区二区在线播放| 日韩一级精品视频在线观看| 丝袜美腿亚洲一区| 精品污污网站免费看| 亚洲在线视频一区| 欧美在线观看18| 亚洲成人高清在线| 91.com视频| 日本亚洲电影天堂| 日韩一区二区电影网| 美女在线观看视频一区二区| 欧美一二三区在线| 日本不卡一区二区三区| 91精品国产综合久久久蜜臀图片| 性久久久久久久久| 欧美一区二区在线观看| 麻豆精品一区二区三区| 欧美mv日韩mv亚洲| 国产一区二区三区四区在线观看 | 亚洲人成网站精品片在线观看| 成人午夜免费电影| 亚洲色图制服诱惑| 欧美性猛交一区二区三区精品| 成人小视频免费在线观看| 国产精品网站导航| 成人h动漫精品一区二| 亚洲私人黄色宅男| 欧美午夜精品一区二区三区| 日韩国产精品91| 久久午夜电影网| av网站免费线看精品| 亚洲欧美另类久久久精品| 欧美日韩三级视频| 美女诱惑一区二区| 中文字幕av一区二区三区| 91蝌蚪porny| 日本欧美大码aⅴ在线播放| 精品少妇一区二区三区在线播放| 国产一区91精品张津瑜| 日本一区二区成人在线| 色猫猫国产区一区二在线视频| 亚洲电影视频在线| 91精品福利在线一区二区三区| 老司机精品视频导航| 国产精品对白交换视频| 欧美日韩色综合| 国产在线不卡一区| 一级日本不卡的影视| 日韩午夜激情电影| 99久久久久久| 蜜桃视频一区二区| 国产精品成人免费| 777奇米四色成人影色区| 高清不卡在线观看| 亚洲国产精品久久不卡毛片| 久久久久久久国产精品影院| 一本久道中文字幕精品亚洲嫩| 日本中文字幕一区二区视频 | 亚洲国产视频一区| 精品久久五月天| 在线观看三级视频欧美| 久久99国内精品| 一区二区成人在线观看| 欧美精品一区视频| 欧美自拍偷拍一区| 国产乱码一区二区三区| 亚洲成a人片在线观看中文| 久久久久国产精品免费免费搜索| 欧美性猛片xxxx免费看久爱| 福利一区在线观看| 全部av―极品视觉盛宴亚洲| 日韩一区有码在线| 久久婷婷一区二区三区| 精品视频在线视频| av男人天堂一区| 精品综合久久久久久8888| 夜夜嗨av一区二区三区| 国产欧美一区二区三区在线老狼| 91麻豆精品国产自产在线 | 91久久国产最好的精华液| 六月婷婷色综合| 亚瑟在线精品视频| 国产精品国产精品国产专区不片| 欧美成人在线直播| 欧美日韩美少妇| 99国产精品国产精品毛片| 国产在线精品一区二区三区不卡| 午夜av一区二区三区| 一区在线播放视频| 国产亚洲成年网址在线观看| 精品日韩在线观看| 日韩一区二区视频在线观看| 日本丶国产丶欧美色综合| a亚洲天堂av| 国产大陆精品国产| 国产高清不卡一区二区| 看片网站欧美日韩| 日韩**一区毛片| 日本一区中文字幕| 亚洲第一在线综合网站| 亚洲精选一二三| 亚洲精品视频观看| 亚洲视频网在线直播| 国产精品久久久久三级| 久久久精品免费网站| 久久这里只有精品视频网| 精品国产免费久久|