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

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

?? rm_e_main.pas

?? report machine 2.3 功能強(qiáng)大
?? PAS
字號:
unit RM_e_main;

interface

{$I RM.INC}

uses
  SysUtils, Windows, Messages, Classes, Graphics, Forms, Dialogs, StdCtrls,
  Controls, Comctrls, RM_Class
{$IFDEF RXGIF}, RxGif{$ENDIF}
{$IFDEF JPEG}, JPEG{$ENDIF};

type
  TRMEFImageFormat = (ifGIF, ifJPG, ifBMP);

  TRMEFFrameTyp = (efftNone, efftRight, efftBottom, efftRightBottom,
    efftLeft, efftLeftRight, efftLeftBottom, efftLeftRightBottom,
    efftTop, efftRightTop, efftTopBottom, efftRightTopBottom,
    efftLeftTop, efftLeftRightTop, efftLeftTopBottom, efftAll);

  TRMEFFontInfo = packed record
    Name: TFontName;
    Size: Integer;
    Color: TColor;
    Style: TFontStyles;
    Charset: TFontCharset;
  end;

  TRMEFFrameInfo = packed record
    FrameTyp: TRMEFFrameTyp;
    FrameWidth: Single;
    FrameColor: TColor;
    FrameStyle: Word;
    FillColor: TColor;
  end;

  TRMEFTextProperty = (eftpAlignLeft, eftpAlignRight, eftpAlignTop, eftpAlignBottom,
    eftpAlignJustify, eftpAlignCenter, eftpAlignVerticalCenter);

  TRMEFTextRec = packed record
    X, Y: Integer;
    Text: string;
    TextWidth: Integer;
    TextHeight: Integer;
    FontInfo: TRMEFFontInfo;
    DrawRect: TRect;
  end;
  PRMEFTextRec = ^TRMEFTextRec;

  TRMEFDataRec = record
    X, Y, dx, dy: Integer;
    Text: string; // for RTF
    TextWidth: Integer; // for RTF
    TextAlign: set of TRMEFTextProperty;
    FontInfo: TRMEFFontInfo; // for RTF
    FrameInfo: TRMEFFrameInfo;
    ViewName: string;
    ViewIndex: Integer;
    ViewClassName: string;
    Bitmap: TBitmap;
		BmpWidth: Integer;
		BmpHeight: Integer;
    VerticalText: Boolean;
    Stretched: Boolean;
  end;
  PRMEFDataRec = ^TRMEFDataRec;

  TRMMainExportFilter = class;

  TBeforeSaveGraphicEvent = procedure(Sender: TRMMainExportFilter;
    AViewName: string; var UniqueImage: Boolean; var ReuseImageIndex: Integer;
    AAltText: string) of object;

  TAfterSaveGraphicEvent = procedure(Sender: TRMMainExportFilter;
    AViewName: string; ObjectImageIndex: Integer) of object;

 { TRMMainExportFilter }
  TRMMainExportFilter = class(TRMExportFilter)
  private
    FExportFrames, FExportImages: Boolean;
{$IFDEF JPEG}
    FJPEGQuality: TJPEGQualityRange;
{$ENDIF}
    FViewNames: TStringList;
  protected
    FTextList: TList;
    FDataList: TList;
    FPageNo: Integer;
    FPageWidth: Integer;
    FPageHeight: Integer;
    FExportImageFormat: TRMEFImageFormat;
    function GetBitmapAsJpgGifStream(Bmp: TBitmap; ImgFormat: TRMEFImageFormat
{$IFDEF JPEG}; JPEGQuality: TJPEGQualityRange{$ENDIF}): TStream;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure OnBeginDoc; override;
    procedure OnEndDoc; override;
    procedure OnBeginPage; override;
    procedure OnEndPage; override;
    procedure OnData(x, y: Integer; View: TRMView); override;
    procedure OnText(DrawRect: TRect; x, y: Integer; const text: string; FrameTyp: Integer; View: TRMView); override;
    procedure ClearTextList;
    procedure ClearDataList;
  published
    property ExportImages: Boolean read FExportImages write FExportImages default True;
    property ExportFrames: Boolean read FExportFrames write FExportFrames default True;
    property ExportImageFormat: TRMEFImageFormat read FExportImageFormat write FExportImageFormat default ifJPG;
{$IFDEF JPEG}
    property JPEGQuality: TJPEGQualityRange read FJPEGQuality write FJPEGQuality default High(TJPEGQualityRange);
{$ENDIF}
  end;

const
  ImageFormats: array[TRMEFImageFormat] of string = ('GIF', 'JPG', 'BMP');

function RMReplaceString(const S, OldPattern, NewPattern: string): string;

implementation

uses RM_CmpReg, RM_rrect;

function RMReplaceString(const S, OldPattern, NewPattern: string): string;
var
  I: Integer;
  SearchStr, Str, OldPat: string;
begin
  SearchStr := AnsiUpperCase(S);
  OldPat := AnsiUpperCase(OldPattern);
  Str := S;
  Result := '';
  while SearchStr <> '' do
  begin
    I := AnsiPos(OldPat, SearchStr);
    if I = 0 then
    begin
      Result := Result + Str;
      Break;
    end;
    Result := Result + Copy(Str, 1, I - 1) + NewPattern;
    Str := Copy(Str, I + Length(OldPattern), MaxInt);
    SearchStr := Copy(SearchStr, I + Length(OldPat), MaxInt);
  end;
end;

function RMGetTextSize(AFont: TFont; const Text: string): TSize;
var
  DC: HDC;
  SaveFont: HFont;
begin
  DC := GetDC(0);
  SaveFont := SelectObject(DC, AFont.Handle);
  Result.cX := 0;
  Result.cY := 0;
  GetTextExtentPoint32(DC, PChar(Text), Length(Text), Result);
  SelectObject(DC, SaveFont);
  ReleaseDC(0, DC);
end;

{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{TRMMainExportFilter}

constructor TRMMainExportFilter.Create(AOwner: TComponent);
begin
  inherited;
  ShowDialog := True;

  FExportImages := True;
  FExportFrames := True;
  FExportImageFormat := ifJPG;
{$IFDEF JPEG}
  FJPEGQuality := 100;
{$ENDIF}
end;

destructor TRMMainExportFilter.Destroy;
begin
  RMUnRegisterExportFilter(Self);
  inherited Destroy;
end;

procedure TRMMainExportFilter.OnBeginDoc;
begin
  FDataList := TList.Create;
  FTextList := TList.Create;
  FViewNames := TStringList.Create;

  FPageNo := 0;
  FPageWidth := CurReport.EMFPages[0].PrnInfo.Pgw;
  FPageHeight := CurReport.EMFPages[0].PrnInfo.Pgh;
end;

procedure TRMMainExportFilter.OnEndDoc;
begin
  ClearDataList;
  ClearTextList;
  FDataList.Free;
  FTextList.Free;
  FViewNames.Free;
end;

procedure TRMMainExportFilter.OnBeginPage;
begin
  ClearDataList;
  ClearTextList;
end;

type
  THackRMView = class(TRMView);

procedure TRMMainExportFilter.OnData(x, y: Integer; View: TRMView);
var
  DataRec: PRMEFDataRec;
  I: Integer;
  liFlag: Boolean;
begin
  if not (View is TRMSubReportView) and not (View is TRMBandView) then
  begin
    New(DataRec);

  // Coordinates
    DataRec^.X := x;
    DataRec^.Y := y;
    DataRec^.dx := View.dx;
    DataRec^.dy := View.dy;

    DataRec^.VerticalText := False;
    if (View is TRMMemoView) and ((TRMMemoView(View).Alignment and $4) <> 0) then
      DataRec^.VerticalText := True;

    DataRec^.Bitmap := TBitmap.Create;
    DataRec^.Bitmap.Width := View.dx + 1;
    DataRec^.Bitmap.Height := View.dy + 1;

    View.SetBounds(0, 0, View.dx, View.dy);
    View.Draw(DataRec^.Bitmap.Canvas);
    View.SetBounds(x, y, View.dx, View.dy);

    liFlag := (View.ClassName = TRMMemoView.ClassName) or (View.ClassName = TRMCalcMemoView.ClassName);
    if not (ExportImages and (not liFlag or DataRec^.VerticalText) and
    	(View.ClassName <> TRMLineView.ClassName)) then
		begin
      DataRec^.Bitmap.Free;
      DataRec^.Bitmap := nil;
    end;

  // Font and Text for RTF Filter
    if View is TRMMemoView then
    begin
      with View as TRMMemoView do
      begin
        DataRec^.dx := View.dx + 1;
        DataRec^.Text := RMReplaceString(Memo.Text, #1, '');
        DataRec^.TextWidth := RMGetTextSize(Font, Memo.Text).cx;
        DataRec^.FontInfo.Charset := Font.Charset;
        DataRec^.FontInfo.Color := Font.Color;
        DataRec^.FontInfo.Name := Font.Name;
        DataRec^.FontInfo.Size := Font.Size;
        DataRec^.FontInfo.Style := Font.Style;
        if THackRMView(View).Parent <> nil then
          DataRec^.Stretched := ((Flags and flStretched) <> 0) and
            THackRMView(View).Parent.Stretched
        else
          DataRec^.Stretched := ((Flags and flStretched) <> 0);

        case (Alignment) of
          0: DataRec^.TextAlign := [eftpAlignLeft, eftpAlignTop];
          1: DataRec^.TextAlign := [eftpAlignRight, eftpAlignTop];
          2: DataRec^.TextAlign := [eftpAlignCenter, eftpAlignTop];
          3: DataRec^.TextAlign := [eftpAlignJustify, eftpAlignTop];
          8: DataRec^.TextAlign := [eftpAlignLeft, eftpAlignVerticalCenter];
          9: DataRec^.TextAlign := [eftpAlignRight, eftpAlignVerticalCenter];
          10: DataRec^.TextAlign := [eftpAlignCenter, eftpAlignVerticalCenter];
          11: DataRec^.TextAlign := [eftpAlignJustify, eftpAlignVerticalCenter];
          16: DataRec^.TextAlign := [eftpAlignLeft, eftpAlignBottom];
          17: DataRec^.TextAlign := [eftpAlignRight, eftpAlignBottom];
          18: DataRec^.TextAlign := [eftpAlignCenter, eftpAlignBottom];
          19: DataRec^.TextAlign := [eftpAlignJustify, eftpAlignBottom];
        end;
      end;
    end;

  // Frame information
    if ExportFrames then
    begin
      DataRec^.FrameInfo.FillColor := View.FillColor;
      DataRec^.FrameInfo.FrameColor := View.Prop['FrameColor'];
      DataRec^.FrameInfo.FrameStyle := view.Prop['FrameStyle'];
      DataRec^.FrameInfo.FrameTyp := TRMEFFrameTyp(View.Prop['FrameTyp'] mod 16);
      DataRec^.FrameInfo.FrameWidth := View.Prop['FrameWidth'];
    end;

    I := FViewNames.IndexOf(View.Name);
    if I = -1 then
      I := FViewNames.Add(View.Name);

    DataRec^.ViewIndex := I;
    DataRec^.ViewName := View.Name;
    DataRec^.ViewClassName := View.ClassName;
    FDataList.Add(DataRec);
  end;
end;

procedure TRMMainExportFilter.OnEndPage;
begin
  Inc(FPageNo);
end;

procedure TRMMainExportFilter.OnText(DrawRect: TRect; x, y: Integer;
  const text: string; FrameTyp: Integer; View: TRMView);
var
  TextRec: PRMEFTextRec;
begin
  if (View = nil) or (ExportImages and (View is TRMRoundRectView)) or not (View is TRMMemoView) then
	  Exit;
  if (View is TRMMemoView) and ((TRMMemoView(View).Alignment and $4) <> 0) then
    Exit;

  New(TextRec);
 // Text Coordinates
  TextRec^.X := x;
  TextRec^.Y := y;

  TextRec^.DrawRect := DrawRect;
  TextRec^.Text := text;

 // Font Information
  if View is TRMMemoView then
  begin
    with View as TRMMemoView do
    begin
      TextRec^.TextWidth := RMGetTextSize(Font, text).cx;
      TextRec^.TextHeight := RMGetTextSize(Font, text).cy;
      TextRec^.FontInfo.Charset := Font.Charset;
      TextRec^.FontInfo.Color := Font.Color;
      TextRec^.FontInfo.Name := Font.Name;
      TextRec^.FontInfo.Size := Font.Size;
      TextRec^.FontInfo.Style := Font.Style;
    end;
  end;
  FTextList.Add(TextRec);
end;

procedure TRMMainExportFilter.ClearDataList;
var
  i: Integer;
  p: PRMEFDataRec;
begin
  if FDataList = nil then Exit;
  for i := 0 to FDataList.Count - 1 do
  begin
    Application.ProcessMessages;
    p := PRMEFDataRec(FdataList[i]);
    if p <> nil then
      Dispose(p);
  end;
  FDataList.Clear;
end;

procedure TRMMainExportFilter.ClearTextList;
var
  i: Integer;
  p: PRMEFTextRec;
begin
  if FTextList = nil then Exit;
  for i := 0 to FTextList.Count - 1 do
  begin
    Application.ProcessMessages;
    p := PRMEFTextRec(FTextList[i]);
    if p <> nil then
      Dispose(p);
  end;
  FTextList.Clear;
end;

function TRMMainExportFilter.GetBitmapAsJpgGifStream(Bmp: TBitmap;
  ImgFormat: TRMEFImageFormat{$IFDEF JPEG}; JPEGQuality: TJPEGQualityRange{$ENDIF}): TStream;
var
  Img: TGraphic;
begin
	Result := nil;
{$IFNDEF RXGIF}
{$IFNDEF JPEG}
  Img := nil;
{$ENDIF}
{$ENDIF}
  case ImgFormat of
    ifGIF:
{$IFDEF RXGIF}
      Img := TGIFImage.Create;
{$ELSE}
{$IFDEF JPEG}Img := TJPEGImage.Create;{$ELSE}	Img := nil;{$ENDIF}
{$ENDIF}
    ifJPG:
{$IFDEF JPEG}
      Img := TJPEGImage.Create;
  else
    Img := TJPEGImage.Create;
{$ENDIF}
  end;

	if Img <> nil then
  begin
	  Result := TMemoryStream.Create;
  	try
{$IFDEF JPEG}
    	if Img is TJPEGImage then
	      TJPEGImage(Img).CompressionQuality := JPEGQuality;
{$ENDIF}
  	  Img.Assign(Bmp);
    	Img.SaveToStream(Result);
	  finally
  	  Img.Free;
	  end;
  end;
end;

end.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
92精品国产成人观看免费| 蜜臀av性久久久久av蜜臀妖精| 69av一区二区三区| 欧美日韩一区成人| 欧美无砖专区一中文字| 欧美亚洲一区二区三区四区| 91在线免费视频观看| 99这里都是精品| 成人性色生活片| 99久久精品国产毛片| jizzjizzjizz欧美| 色综合久久88色综合天天免费| voyeur盗摄精品| 色综合久久综合中文综合网| 欧美综合一区二区| 欧美一区二区三区系列电影| 日韩一本二本av| 久久综合色综合88| 国产精品久久久久影院| 最新不卡av在线| 亚洲h在线观看| 韩国午夜理伦三级不卡影院| 成人免费精品视频| 欧美日韩一区二区在线观看视频| 7777女厕盗摄久久久| 日韩欧美综合一区| 日本一区二区久久| 亚洲动漫第一页| 激情久久五月天| 97超碰欧美中文字幕| 9191成人精品久久| 欧美国产日本韩| 亚洲va欧美va人人爽午夜| 九九精品一区二区| 91免费在线视频观看| 欧美午夜电影网| 亚洲国产高清在线| 天堂在线亚洲视频| 成人午夜激情在线| 777色狠狠一区二区三区| 中文字幕不卡的av| 性做久久久久久| av中文一区二区三区| 3d成人h动漫网站入口| 国产欧美一区二区三区在线老狼| 亚洲视频免费在线| 蜜臀国产一区二区三区在线播放| 不卡大黄网站免费看| 91精品国产欧美一区二区 | 亚洲精品视频一区| 男人操女人的视频在线观看欧美| 91网站最新网址| 精品欧美一区二区在线观看| 亚洲韩国精品一区| 成人av电影在线播放| 欧美tickling挠脚心丨vk| 亚洲蜜桃精久久久久久久| 国产不卡视频一区二区三区| 日韩一区二区在线观看视频播放 | 欧美综合视频在线观看| 国产亚洲精久久久久久| 免费观看久久久4p| 欧美日韩久久不卡| 亚洲精品视频自拍| 91亚洲国产成人精品一区二区三| 2021中文字幕一区亚洲| 秋霞影院一区二区| 精品视频在线视频| 亚洲一区二区在线免费看| caoporn国产精品| 中文字幕二三区不卡| 成人av高清在线| 国产精品成人午夜| 国产成人精品一区二区三区四区 | 精品99999| 蜜桃免费网站一区二区三区| 欧美日韩国产片| 偷拍自拍另类欧美| 欧美美女喷水视频| 日韩电影在线免费| 欧美成人艳星乳罩| 精品中文字幕一区二区小辣椒| 日韩一区二区在线看| 久久99精品国产91久久来源| 久久影院午夜片一区| 国产sm精品调教视频网站| 国产片一区二区| 99久久婷婷国产综合精品电影| 国产精品美日韩| 色综合久久久久久久久久久| 一区二区三区在线观看网站| 精品视频一区三区九区| 午夜视黄欧洲亚洲| 日韩精品一区在线| 国产黄色91视频| 亚洲日本在线a| 欧美色图第一页| 免费国产亚洲视频| 中文字幕av一区二区三区| 色综合久久88色综合天天| 日本aⅴ亚洲精品中文乱码| 2017欧美狠狠色| 色香色香欲天天天影视综合网| 日韩成人免费电影| 欧美激情一区三区| 欧美日韩一区久久| 国产精品一级黄| 夜色激情一区二区| 欧美va亚洲va| 在线欧美日韩精品| 青青草精品视频| 中文字幕中文字幕一区| 欧美精品xxxxbbbb| 成人免费毛片a| 日韩高清不卡一区二区| 国产精品国产自产拍高清av| 5858s免费视频成人| 丁香六月综合激情| 日日欢夜夜爽一区| 中文一区在线播放| 欧美videossexotv100| 色偷偷久久人人79超碰人人澡| 捆绑变态av一区二区三区| 自拍视频在线观看一区二区| 精品国产一区久久| 欧美视频自拍偷拍| www.亚洲激情.com| 国产美女av一区二区三区| 一区二区三区欧美视频| 国产精品亲子乱子伦xxxx裸| 日韩一区二区三区三四区视频在线观看| 成人综合在线观看| 久久精品国产免费| 日本亚洲一区二区| 亚洲一区二区三区视频在线播放| 久久久久久亚洲综合影院红桃| 91.com视频| 欧美日韩一区二区电影| 99久久婷婷国产综合精品电影| 国产九色精品成人porny | 成人av在线电影| 狠狠色丁香婷婷综合| 免费成人性网站| 蜜桃传媒麻豆第一区在线观看| 亚洲一区在线视频| 亚洲国产欧美在线人成| 一区二区三区自拍| 一区二区三区欧美久久| 亚洲欧美激情在线| 亚洲免费观看高清完整版在线观看 | 成人激情小说网站| 麻豆一区二区三| 国产综合色在线视频区| 美腿丝袜亚洲综合| 久久www免费人成看片高清| 天天综合网天天综合色| 午夜精品久久久久久久99樱桃| 亚洲一区国产视频| 亚洲美女免费在线| 一区二区三区四区乱视频| 亚洲日本中文字幕区| 亚洲精品免费播放| 亚洲成人在线免费| 五月天激情小说综合| 奇米影视7777精品一区二区| 日本在线不卡一区| 狠狠色丁香九九婷婷综合五月| 韩国av一区二区三区| 成人自拍视频在线| 色999日韩国产欧美一区二区| 91国在线观看| 日韩欧美一级二级三级久久久| 欧美不卡在线视频| 国产片一区二区三区| 亚洲精品中文在线| 五月婷婷综合网| 国内精品嫩模私拍在线| 波多野结衣亚洲一区| 欧美午夜寂寞影院| 精品国内二区三区| 亚洲男人天堂av| 免费成人av在线播放| 国产成人亚洲综合a∨婷婷| 972aa.com艺术欧美| 欧美精品777| 国产欧美一区二区三区在线老狼| 一区二区不卡在线播放 | 色综合久久久网| 欧美一区二区久久久| 久久亚洲欧美国产精品乐播| 亚洲精品中文在线影院| 乱一区二区av| 91美女福利视频| 精品日韩一区二区三区免费视频| 国产精品久久久久久久裸模 | 国产精品你懂的在线欣赏| 亚洲摸摸操操av| 免费久久精品视频| 91极品视觉盛宴| 2024国产精品|