Чтение онлайн

ЖАНРЫ

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

 HasBeenLoaded:=True;

 SetPort(FPort);

end;

constructor TComm.Create(AOwner:TComponent);

begin

 inherited Create(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;

destructor TComm.Destroy;

begin

 DeallocatehWnd(FWindowHandle);

 if hComm>=0 then CloseComm(hComm);

 inherited Destroy;

end;

procedure TComm.Write(Data:PChar;Len:Word);

begin

 if hComm<0 then exit;

 if WriteComm(hComm,Data,Len)<0 then Error:=True;

 GetCommEventMask(hComm,Integer($FFFF));

end;

procedure TComm.Read(Data:PChar;Len:Word);

begin

 if hComm<0 then exit;

 if ReadComm(hComm,Data,Len)<0 then Error:=True;

 GetCommEventMask(hComm,Integer($FFFF));

end;

function TComm.IsError:Boolean

begin

 IsError:=Error;

 Error:=False;

end;

procedure Register;

begin

 RegisterComponents('Additional',[TComm]);

end;

end.

Принтер 

Печать

табуляторов с помощью TextOut

Delphi 2 

Я пытаюсь напечатать некий текст с помощью 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);

 if FDeviceMode = 0 then Printer.GetPrinter(FDevice, FDriver, FPort, FDeviceMode);

 if OpenPrinter(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-цветной форме, и использования полученных битов для печати формы на принтере.

Кроме того, в данном коде осуществляется проверка палитры устройства (экран или принтер), и включается обработка палитры соответствующего устройства. Если устройством палитры является устройство экрана, принимаются дополнительные меры по заполнению палитры растрового изображения из системной палитры, избавляющие от некорректного заполнения палитры некоторыми видеодрайверами.

Поделиться с друзьями: