inheritedCreate(AOwner);
FWindowHandle:=AllocateHWnd(WndProc);
HasBeenLoaded:=False;
Error:=False;
FPort:=PortDefault;
FBaudRate:=BaudRateDefault;
FParity:=ParityDefault;
FDataBits:=DataBitsDefault;
FStopBits:=StopBitsDefault;
FWriteBufferSize:=WriteBufferSizeDefault;
FReadBufferSize:=ReadBufferSizeDefault;
FRxFull:=RxFullDefault;
FTxLow:=TxLowDefault;
FEvents:=EventsDefault;
hComm:=-1;
end;
destructorTComm.Destroy;
begin
DeallocatehWnd(FWindowHandle);
ifhComm>=0 thenCloseComm(hComm);
inheritedDestroy;
end;
procedureTComm.Write(Data:PChar;Len:Word);
begin
ifhComm<0 thenexit;
ifWriteComm(hComm,Data,Len)<0 thenError:=True;
GetCommEventMask(hComm,Integer($FFFF));
end;
procedureTComm.Read(Data:PChar;Len:Word);
begin
ifhComm<0 thenexit;
ifReadComm(hComm,Data,Len)<0 thenError:=True;
GetCommEventMask(hComm,Integer($FFFF));
end;
functionTComm.IsError:Boolean
begin
IsError:=Error;
Error:=False;
end;
procedure Register;
begin
RegisterComponents('Additional',[TComm]);
end;
end.
Печать табуляторов с помощью TextOut
Я пытаюсь напечатать некий текст с помощью Printer.Canvas.TextOut. Моя строка содержит табуляторы, но они почему-то печатаются на бумаге в виде черных прямоугольников. Как мне правильно напечатать строку, содержащую табуляторы?
Обратите внимание на функцию API «TabbedTextOut». Ваш холст (canvas) воспользоваться ей не сможет, но вы можете просто вызвать эту API функцию и передать ей дескриптор холста.
– Bob Fisher
Печать через спулер на матричный принтер
Оргиш Александр (FIDO: 2:454/3.24) пишет:
Печатаю через спулер на матричный принтер текст таким образом :
Var
pcbNeeded: DWORD;
FDevice: PChar;
FPort: PChar;
FDriver: PChar;
FPrinterHandle: THandle;
FDeviceMode: THandle;
FJob: PADDJOBINFO1;
Stream: TFileStream;
begin
GetMem(FDevice, 128);
GetMem(FDriver, 128);
GetMem(FPort, 128);
Printer.GetPrinter(FDevice, FDriver, FPort, FDeviceMode);
ifFDeviceMode = 0 thenPrinter.GetPrinter(FDevice, FDriver, FPort, FDeviceMode);
ifOpenPrinter(FDevice, FPrinterHandle, nil) then begin
GetMem(FJob,1024);
//Добавляем задание, получаем имя файла в директории windows\spoool\
AddJob(FPrinterHandle,1,FJob,1024,pcbNeeded);
Stream:=TFileStream.Create(FJob.Path,fmCreate);
// Дальше пишем текст (+ESC команды!!!!) прямо в Stream
// и не забываем переводить в DOS – кодировку
………
………
Stream.Free;
//Постановка задания в очередь – только теперь принтер начинает печатать
ScheduleJob(FPrinterHandle,FJob.JobID);
FreeMem(FJob);
ClosePrinter(FPrinterHandle);
end;
FreeMem(FDevice, 128);
FreeMem(FDriver, 128);
FreeMem(FPort, 128);
end;
С уважением, Оргиш Александр
Лучший способ печати формы
Данный документ содержит подробное описание способа печати содержимого формы: получение отдельных битов устройства при 256-цветной форме, и использования полученных битов для печати формы на принтере.
Кроме того, в данном коде осуществляется проверка палитры устройства (экран или принтер), и включается обработка палитры соответствующего устройства. Если устройством палитры является устройство экрана, принимаются дополнительные меры по заполнению палитры растрового изображения из системной палитры, избавляющие от некорректного заполнения палитры некоторыми видеодрайверами.
Примечание: Поскольку данный код делает снимок формы, форма должна располагаться на самом верху, поверх остальных форм, быть полность на экране, и быть видимой на момент ее "съемки".
unitPrntit;
interface
usesSysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
typeTForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
procedureButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
varForm1: TForm1;
implementation
{$R *.DFM}
usesPrinters;
procedureTForm1.Button1Click(Sender: TObject);
var
Читать дальше