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

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

?? printer.htm

?? 對于學習很有幫助
?? HTM
?? 第 1 頁 / 共 3 頁
字號:
<!-- This document was created with HomeSite v2.5 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">

<HTML>
<HEAD>
	<TITLE>UDDF - Printer</TITLE>
	<META NAME="Description" CONTENT="Printer section of the Delphi Developers FAQ" >
	<META NAME="KeyWords" CONTENT="" >

</HEAD>

<BODY bgcolor="#FFFFFF">
<CENTER>
<IMG SRC="../images/uddf.jpg"> </CENTER>
<HR SIZE="6" color="#00FF00">


<CENTER><FONT SIZE="7" FACE="Arial Black" COLOR="RED">Printer</FONT></CENTER>
<P><H1><A NAME="printer0">Help on Printer Control Codes</P></A></H1>
<P><I>From: dblock@vdn.com (David Block)</I></P>

<PRE>Vincent Lim &lt;kaneda@singnet.com.sg&gt; wrote:

How do I send Printer Control Codes to the printer without having them
translated into unprintable characters?
Not sure if it is Windows API or Delphi is the culprit.
When I write the printer control codes, they are just printed as
unprintable characters rather than being interpreted by the printer.
</PRE>

You need to use the Passthrough printer Escape function to send data
directly to the printer. If you're using WriteLn, then it won't work.
Here's some code to get you started:
<P>
<HR><PRE>unit Passthru;

interface

uses printers, WinProcs, WinTypes, SysUtils;

Procedure       PrintTest;

implementation

Type
        TPassThroughData = Record
                nLen : Integer;
                Data : Array[0..255] of byte;
        end;

Procedure DirectPrint(s : String);
var
        PTBlock : TPassThroughData;
Begin
        PTBlock.nLen := Length(s);
        StrPCopy(@PTBlock.Data,s);
        Escape(printer.handle, PASSTHROUGH,0,@PTBlock,nil);
End;



Procedure PrintTest;
Begin
        Printer.BeginDoc;
        DirectPrint(CHR(27)+'&amp;l1O'+'Hello, World!');
        Printer.EndDoc;
End;


end.
</PRE><HR>

<P><H1><A NAME="printer1">How to get Paper Source?</P></A></H1>
<P><I> 'Joe C. Hecht' &lt;jhecht@wpo.borland.com&gt;</I></P>


<P>Below are some code snippets to change the printer settings. Wherever the changes are made, you could instead examine the printer settings. 
See the documentation for  ExtDeviceMode and the TDEVMODE structure as well the printer escape GETSETPAPERBINS and GetDeviceCaps().</P>

*********************************************
<P>One way to change printer settings at the start of a print job is to change the printers devicemode.</P>

<P>Example:</P>

<HR><PRE>var
Device : array[0..255] of char;
Driver : array[0..255] of char;
Port   : array[0..255] of char;
hDMode : THandle;
PDMode : PDEVMODE;
begin
  Printer.PrinterIndex := Printer.PrinterIndex;
  Printer.GetPrinter(Device, Driver, Port, hDMode);
  if hDMode &lt;&gt; 0 then begin
    pDMode := GlobalLock(hDMode);
    if pDMode &lt;&gt; nil then begin
      pDMode^.dmFields := pDMode^.dmFields or DM_COPIES;
      pDMode^.dmCopies := 5;
      GlobalUnlock(hDMode);
    end;
    GlobalFree(hDMode);
  end;
  Printer.PrinterIndex := Printer.PrinterIndex;
  Printer.BeginDoc;
  Printer.Canvas.TextOut(100,100, 'Test 1');
  Printer.EndDoc;
</PRE><HR>

<P>Another way is to change TPrinter.
This will enable you to change settings in mid job. 
You must make the change &gt;&gt;&gt;between&lt;&lt;&lt; pages.</P>

<P>To do this:</P>

<P>Before every startpage() command in printers.pas in the Source\VCL directory add something like:</P>

<HR><PRE> DevMode.dmPaperSize:=DMPAPER_LEGAL
{any other devicemode settings go here}
 Windows.ResetDc(dc,Devmode^);
</PRE><HR>

<P>This will reset the pagesize. you can look up DEVMODE in the help to find other paper sizes.</P>

<P>You will need to rebuild the vcl source for this to work, by adding the path to the VCL source directory to the beginning of the library path s
tatement under tools..options.. library...libaray path. Quit Delphi then do a build all.</P>

<P><B>Another quick note...</B></P>

<P>When changing printers, be aware that fontsizes may not always scale properly. To ensure proper scaling set the PixelsPerInch property of the font.</P>

<P>Here are two examples:</P>

<HR><PRE>uses Printers;

var
  MyFile: TextFile;
begin
  AssignPrn(MyFile);
  Rewrite(MyFile);

  Printer.Canvas.Font.Name := 'Courier New';
  Printer.Canvas.Font.Style := [fsBold];
  Printer.Canvas.Font.PixelsPerInch:=
    GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY);

  Writeln(MyFile, 'Print this text');

  System.CloseFile(MyFile);
end;
</PRE><HR>

<HR><PRE>uses Printers;

begin
  Printer.BeginDoc;
  Printer.Canvas.Font.Name := 'Courier New';
  Printer.Canvas.Font.Style := [fsBold];

  Printer.Canvas.Font.PixelsPerInch:=
    GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY);

  Printer.Canvas.Textout(10, 10, 'Print this text');

  Printer.EndDoc;
end;
</PRE><HR>

<P><H1><A NAME="printer2">How to Print VERTICAL oriented text in Delphi</P></A></H1>
<P><I>From: "Peter Szymiczek" &lt;szymicpe@bmw.com.au&gt;</I></P>

<HR><PRE>procedure AngleTextOut(CV: TCanvas; const sText: String; x, y, angle:integer);
var
  LogFont: TLogFont;
  SaveFont: TFont;
begin
  SaveFont := TFont.Create;
  SaveFont.Assign(CV.Font);
  GetObject(SaveFont.Handle, sizeof(TLogFont), @LogFont);
  with LogFont do
    begin
      lfEscapement := angle *10;
      lfPitchAndFamily := FIXED_PITCH or FF_DONTCARE;
    end; {with}
  CV.Font.Handle := CreateFontIndirect(LogFont);
  SetBkMode(CV.Handle, TRANSPARENT);
  CV.TextOut(x, y, sText);
  CV.Font.Assign(SaveFont);
  SaveFont.Free;
end;
</PRE><HR>


<P><H1><A NAME="printer3">Help - Printing sideways text...</P></A></H1>
<P><I>From: Jukka Palom&auml;ki &lt;jukpalom@utu.fi&gt;</I></P>

<P>This is how I have solved the problem:</P>

<HR><PRE>procedure TextOutVertical(var bitmap: TBitmap; x, y: Integer; s: String);
var b1, b2: TBitmap;
    i, j: Integer;
begin
  with bitmap.Canvas do
  begin
    b1 := TBitmap.Create;
    b1.Canvas.Font := lpYhFont;
    b1.Width  := TextWidth(s) + 1;
    b1.Height := TextHeight(s) + 1;
    b1.Canvas.TextOut(1, 1, s);

    b2 := TPackedBitmap.Create;
    b2.Width  := TextHeight(s);
    b2.Height := TextWidth(s);
    for i := 0 to b1.Width - 1 do
        for j := 0 to b1.Height do
            b2.Canvas.Pixels[j, b2.Height + 1 - i] := b1.Canvas.Pixels[i, j];
    Draw(x, y, b2);
    b1.Free;
    b2.Free;
  end
end;
</PRE><HR>

<P><H1><A NAME="printer4">How to print a bitmap?</P></A></H1>
<P>Use the following code.  Remember to include the Printers unit in the uses clause :</P>

<P>Lines followed by // ** are essential.  The others are to get the scaling correct otherwise you end up with extremely small images. 
 Printer resolutions are higher than your screen resolution.</P>

<HR><PRE>procedure TForm1.Button1Click(Sender: TObject);
var
  ScaleX, ScaleY: Integer;
  R: TRect;
begin
  Printer.BeginDoc;  // **
  with Printer do
  try
    ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;
    ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch;
    R := Rect(0, 0, Image1.Picture.Width * ScaleX,
      Image1.Picture.Height * ScaleY);
    Canvas.StretchDraw(R, Image1.Picture.Graphic);  // **
  finally
    EndDoc;  // **
  end;
end;
</PRE><HR>

<P><H1><A NAME="printer5">Hack: tired of ReportSmith?  Wish you had wysiwyg reports?</P></A></H1>
<P><I>From: "James D. Rofkar" &lt;jim_rofkar%lotusnotes1@instinet.com></I></P>

<P>For those of you who are sick and tired of mucking around with ReportSmith, only to find limitations, drawbacks, etc.  
And have grown tired of trying to find that perfect WYSIWYG report generator.</P>

<P>Well...</P>

<P>Chances are you've got a good one already.  It's called MS-Word! That's right!  Use Word for report generation.  
It's actually quite easy with OLE Automation.  I know that word (OLE) scares some of you, but check-out this code:</P>

<HR><PRE>  var
     Word: Variant;
  begin
     Word := CreateOleObject('Word.Basic');
     with Word do
        begin {Pure WordBASIC commands follow...}
        FileNew('Normal');
        Insert('This is the first line'#13);
        Insert('This is the second line'#13);
        FileSaveAs('c:\temp\test.txt', 3);
        end;
  end;
</PRE><HR>
<P>Simple, isn't it?  If you notice, there's no need for SendMessage(), or PostMessage(), or DDE, or Word's C-API, or some proprietary  
DOS-based batch programming that requires text files to be  written.  In fact, none of that junk!</P>

<P>Another benefit of OLE Automation is that it doesn't require the darned app to launch.  That's right!  Word does not show-up using this technique. 
 Instead, just the WordBASIC engine is used.  The speed improvements and lower memory footprint kick the livin' crap out of the techniques listed in the previous paragraph.</P>

<P>A wild side-benefit is that if you startup Word while your program is using OLE Automation, you can watch it work.  
Yup!  Word realizes that "documents" are opened and being editing, and hence, displays them like regular old Word documents.</P>

<P>Now all you need to do is generate a Word template with Bookmarks! Then, using the WordBASIC commands "EditBookmark .Goto" and "Insert",  you're ready to rock!</P>

<P>I've given-up on report generators.  They suck compared to Word's WYSIWYG output!</P>

<P>- Jim Rofkar.</P>

<P>P.S. - If you use this technique, try to incorporate my name somewhere in your source comments.  Thanks.  I'll return the favor if I use one of your cool hacks!</P>

<P><H1><A NAME="printer6">Dump a text file</P></A></H1>
<P><I>From: Chris Monson &lt;ckmonson@burgoyne.com></I></P>

<P>Use CreateFile to get a handle to LPT1</P>

<HR><PRE>  LPTHandle := CreateFile( 'LPT1',GENERIC_WRITE,
                 0, PSecurityAttributes(nil),
                 OPEN_EXISTING, FILE_FLAG_OVERLAPPED,
                 0);
</PRE><HR>

<P>Then use WriteFile to send a string of characters or use</P>

<HR><PRE>  While not
    TransmitCommChar( LPTHandle, CharToSend ) do
  Application.ProcessMessages;
</PRE><HR>

<P>It sends one raw character at a time to the parallel port.  It waits for
the recent character to get processed and then immediately sends a new
one.  I got it printing stuff pretty fast.</P>

<P><H1><A NAME="printer7">Printing a line at a time</P></A></H1>
<P><I>From:             Peter van Lonkhuyzen &lt;peterv@lin01.global.co.za></I></P>

<PRE>> I've tried to write a D1 or D2 program that will print only one line at a time to a printer (any type), exit the program but NOT eject the page, 
so that the next time I run the program and it prints a line, it prints on the very next line, etc.</PRE>

<P>According to M$ this is illegal as it "defeats the multitasking nature"  but I needed the same functionality.</P>

<P>I created the following derivative of the TPrinter object. It works perfectly on dotmatrix printers.</P>

<P>sample usage</P>

<HR><PRE>var Myprinter : TRawPrinter;
    oldprinter : TPrinter;
begin
 MyPrinter:=TRawPrinter.Create;
 oldprinter:=setprinter(MyPrinter);
 try
  if Printdialog1.execute then
  begin
    myprinter.startraw;
    myprinter.write('khsdhskhkshdksd');
    myprinter.writeln;
    myprinter.endraw;
  end
 finally
  setprinter(oldprinyter);
  myprinter.free;
 end
end;
</PRE><HR>

<P>Here is the code for the raw printer object.</P>

<HR><PRE>unit Rawprinter;

interface
uses printers,windows;

type TRawprinter =class(TPrinter)
                  public
                    dc2 : HDC;
                    procedure startraw;
                    procedure endraw;
                    procedure write(const s : string);
                    procedure writeln;
                  end;

implementation
uses sysutils,forms;

function AbortProc(Prn: HDC; Error: Integer): Bool; stdcall;
begin
  Application.ProcessMessages;
  Result := not Printer.Aborted;
end;

type
  TPrinterDevice = class
    Driver, Device, Port: String;
    constructor Create(ADriver, ADevice, APort: PChar);
    function IsEqual(ADriver, ADevice, APort: PChar): Boolean;
  end;

constructor TPrinterDevice.Create(ADriver, ADevice, APort: PChar);
begin
  inherited Create;
  Driver := ADriver;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
懂色av一区二区夜夜嗨| 国产亚洲一区二区三区四区| 色婷婷综合五月| 91在线视频网址| 99久久久免费精品国产一区二区| 成人的网站免费观看| 波多野结衣中文字幕一区| 丁香婷婷综合五月| 91网址在线看| 色婷婷一区二区| 欧美色精品在线视频| 欧美日韩国产一级片| 欧美福利一区二区| 欧美va日韩va| 国产色91在线| 亚洲品质自拍视频| 亚洲精品免费播放| 午夜精品久久久久久久蜜桃app| 亚洲国产一区视频| 日本91福利区| 久久精品72免费观看| 国产精品一区二区久久不卡| 处破女av一区二区| 色女孩综合影院| 欧美丝袜自拍制服另类| 欧美日韩精品欧美日韩精品一综合| 欧美日本精品一区二区三区| 91精品在线免费| 国产欧美综合色| 亚洲一区二区精品视频| 免费在线观看成人| 高清不卡一区二区| 欧美在线播放高清精品| 欧美刺激午夜性久久久久久久| 久久久久久久久久电影| 亚洲人成精品久久久久| 麻豆一区二区在线| 99re亚洲国产精品| 日韩一本二本av| 中文字幕亚洲一区二区va在线| 亚洲一区二区五区| 国产综合久久久久影院| 色欧美乱欧美15图片| 精品日本一线二线三线不卡| 亚洲天堂精品在线观看| 免费看欧美美女黄的网站| 成人精品一区二区三区四区| 欧美美女直播网站| 国产精品日日摸夜夜摸av| 午夜精品久久久久久久99樱桃| 狠狠色伊人亚洲综合成人| 91搞黄在线观看| 久久这里都是精品| 亚洲国产精品综合小说图片区| 国产综合色精品一区二区三区| 在线看一区二区| 国产视频在线观看一区二区三区| 亚洲va欧美va人人爽| 不卡的电视剧免费网站有什么| 欧美一区二区三区在线电影| 亚洲色图视频网站| 狠狠v欧美v日韩v亚洲ⅴ| 一本一本大道香蕉久在线精品| 26uuu久久综合| 日一区二区三区| 色噜噜狠狠成人网p站| 国产日本欧洲亚洲| 麻豆极品一区二区三区| 欧美中文字幕不卡| 最新成人av在线| 国产精品2024| 日韩午夜激情视频| 亚洲国产日韩精品| 99精品国产一区二区三区不卡| 欧美va亚洲va在线观看蝴蝶网| 亚洲一级在线观看| 99精品视频一区| 国产精品入口麻豆原神| 国产寡妇亲子伦一区二区| 日韩欧美亚洲国产另类| 日韩电影在线免费观看| 在线观看www91| 亚洲狼人国产精品| 91在线观看一区二区| 国产亚洲精品bt天堂精选| 久久草av在线| 日韩一级精品视频在线观看| 亚洲成人av在线电影| 色婷婷综合久久久| 一区二区三区中文字幕精品精品 | www.色精品| 日本韩国精品一区二区在线观看| 国产亚洲欧美日韩俺去了| 中文字幕av不卡| 狠狠色丁香婷婷综合| 91传媒视频在线播放| 一区二区三区在线看| 91婷婷韩国欧美一区二区| 国产精品久久久久一区二区三区 | 五月天视频一区| 欧美三级电影网站| 亚洲成人av电影在线| 欧美在线视频日韩| 亚洲韩国精品一区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 亚洲另类春色国产| 欧美视频在线观看一区二区| 亚洲大片精品永久免费| 欧美高清一级片在线| 蜜桃在线一区二区三区| 欧美mv日韩mv国产网站| 国产美女精品在线| 国产欧美一区二区精品久导航| 国产毛片精品国产一区二区三区| 国产欧美一区二区精品婷婷| 不卡高清视频专区| 亚洲免费资源在线播放| 欧美四级电影网| 蜜桃精品视频在线| 久久久久久夜精品精品免费| 成人综合婷婷国产精品久久| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 国产精品久久久久久久久久久免费看 | 欧美日韩亚洲综合| 蜜桃精品视频在线| 久久久另类综合| 色综合中文综合网| 51精品久久久久久久蜜臀| 日韩 欧美一区二区三区| 日韩美女在线视频| 国产黄色91视频| 一区二区三区在线视频观看| 欧美日韩一区二区三区四区| 丝瓜av网站精品一区二区| 久久女同性恋中文字幕| 91视频91自| 麻豆国产欧美日韩综合精品二区 | 亚洲女与黑人做爰| 欧美精品丝袜久久久中文字幕| 卡一卡二国产精品| 国产精品久久久久久久岛一牛影视| 在线一区二区三区四区| 久久激情五月激情| 美女免费视频一区二区| 国产午夜精品久久| 欧美视频在线观看一区二区| 国产一区欧美二区| 亚洲裸体xxx| 日韩精品一区二区三区老鸭窝| av在线不卡网| 久久精品国产精品亚洲红杏| 亚洲特级片在线| 日韩欧美国产一区二区三区| 9l国产精品久久久久麻豆| 日韩精品一二三区| 一区在线观看视频| 欧美一级精品在线| 一本久久精品一区二区| 国产麻豆精品在线观看| 亚洲一区二区偷拍精品| 久久久99精品免费观看不卡| 欧美日韩一区二区在线观看视频| 国产精品一区二区三区乱码| 亚洲福利一区二区| 国产精品福利在线播放| 欧美zozozo| 欧美在线视频不卡| 成人动漫在线一区| 全部av―极品视觉盛宴亚洲| 亚洲女性喷水在线观看一区| 久久精品视频一区| 欧美一区二区私人影院日本| 91免费国产视频网站| 风间由美一区二区三区在线观看| 日韩主播视频在线| 亚洲免费在线电影| 欧美激情在线一区二区| 欧美大片在线观看| 91精品久久久久久久91蜜桃| 色播五月激情综合网| 成人开心网精品视频| 国产乱国产乱300精品| 久久精品国产精品亚洲红杏| 亚洲第一成人在线| 一区二区国产盗摄色噜噜| 国产精品免费视频观看| 久久久久久久久久久久久女国产乱| 欧美一区二区三区精品| 欧美猛男gaygay网站| 欧美自拍偷拍午夜视频| 色吊一区二区三区| 色美美综合视频| 色综合天天综合网天天看片| 91亚洲精品久久久蜜桃| 成人白浆超碰人人人人| 成人午夜激情片| 成人理论电影网| 不卡电影一区二区三区| 99久久综合精品| 99久久婷婷国产|