Thursday, April 30, 2009

[Delphi] Changing Printer Paper Size


var
Device, Driver, Port: array[0..80] of Char;
DevMode: THandle;
pDevmode: PDeviceMode;
...
...
// Get printer device name etc.
Printer.GetPrinter(Device, Driver, Port, DevMode);
// force reload of DEVMODE
Printer.SetPrinter(Device, Driver, Port, 0) ;
// get DEVMODE handle
Printer.GetPrinter(Device, Driver, Port, DevMode);
If Devmode <> 0 Then Begin
// lock it to get pointer to DEVMODE record
pDevMode := GlobalLock( Devmode );
If pDevmode <> Nil Then
try
With pDevmode^ Do Begin
// modify paper size
DEBUG('Old dmPapersize = ' + IntToStr(dmPapersize) );

if Unit2.ActiveAccount.clPaperSize = 0 then // Letter
dmPaperSize := DMPAPER_LETTER
else
dmPapersize := DMPAPER_A4;

DEBUG('New dmPapersize = ' + IntToStr(dmPapersize) );
// tell printer driver that dmPapersize field contains
// data it needs to inspect.
dmFields := dmFields or DM_PAPERSIZE;
End;
finally
// unlock devmode handle.
GlobalUnlock( Devmode );
end;
End; { If }

source: http://www.efg2.com/Lab/Library/UseNet/2000/0314.txt

Tuesday, April 7, 2009

[Delphi] I always forgot, the Exception

var
number1, number0 : Integer;
begin
try
number0 := 0;
number1 := 1;
number1 := number1 div number0;
ShowMessage('1 / 0 = '+IntToStr(number1));
except
on E : Exception do
begin
ShowMessage('Exception class name = '+E.ClassName);
ShowMessage('Exception message = '+E.Message);
end;
end;
end;

Monday, April 6, 2009

[Delphi] Using Ampersands inside Delphi

How can I make a Window control's text property contain an ampersand character?

Use two ampersand characters. The Windows default text handling for controls interprets a single Ampersand character as meaning the next character is a hot key. Example: Button .Caption := 'This && That';

Source: http://www.delphi32.com/info_facts/faq/faq_184.asp