Как сделать калькулятор в Delphi?

Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.

Как Delphi реализует многоплатформенную разработку?

Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...

Как узнать края печати в Win16 и Win32

Советы » Принтеры и Печать » Как узнать края печати в Win16 и Win32

В Win16, для этого используется API функция Escape() с константой GETPRINTINGOFFSET. В Win32, используется API функция GetDeviceCaps() с константами PHYSICALOFFSETX и PHYSICALOFFSETY. Однако, нет гарантии, что данная последовательность кодов поддерживается принтером, поэтому для проверки желательно всегда вызывать функцию Escape с константой QUERYESCSUPPORT.

Следующий пример возвращает отступы печати как в WIN16, так и в WIN32, учитывая тот факт, что не все принтеры поддерживают код GETPRINTINGOFFSET (в WIN16). Если дело обстоит так, то смещение печати вычисляется приближённо, получая размер страницы, вычитая физическую разрешающую способность устройства, и деля пополам.

Пример:

uses

Printers; procedure

TForm1.Button1Click(Sender: TObject); var

EscapeCode: integer; Margin: TPoint; begin

if

PrintDialog1.Execute then

begin

{$IFDEF WIN32} Margin.x := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX); Margin.y := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY); {$ELSE} EscapeCode := GETPRINTINGOFFSET; if

Escape(Printer.Handle, QUERYESCSUPPORT, sizeof(EscapeCode), @EscapeCode, nil

) <> 0 then

if

Escape(Printer.Handle, GETPRINTINGOFFSET, 0, nil

, @Margin) < 1 then

begin

EscapeCode := GETPHYSPAGESIZE; if

Escape(Printer.Handle, QUERYESCSUPPORT, sizeof(EscapeCode), @EscapeCode, nil

) <> 0 then

if

Escape(Printer.Handle, GETPHYSPAGESIZE, 0, nil

, @Margin) > 0 then

begin

Margin.x := (Margin.x - GetDeviceCaps(Printer.Handle, HorzRes)) div

2; Margin.y := (Margin.y - GetDeviceCaps(Printer.Handle, VertRes)) div

2; end

else

begin

Margin.x := 0; Margin.y := 0; end

; end

; {$ENDIF} Memo1.Lines.Add(IntToStr(Margin.x)); Memo1.Lines.Add(IntToStr(Margin.y)); end

; end

;

Другое по теме:

Категории

Статьи

Советы

Copyright © 2024 - All Rights Reserved - www.delphirus.com