var
    aDevice,aDriver,aPort: array [0..255] of Char;
    DevhWnd: THandle;
    DevMode: PDevMode;
    int1,intleft,inttop:Integer;
    str1:string;
begin
try
    Printer.Refresh;
    Printer.GetPrinter(aDevice, aDriver, aPort, DevhWnd);
    if DevhWnd = 0 then
    begin
        Printer.PrinterIndex := Printer.PrinterIndex;
        Printer.GetPrinter(aDevice, aDriver, aPort, DevhWnd);
    end;
    if DevhWnd = 0 then
    begin
        Result:=false;
        exit;
    end
    else
    begin
        DevMode := GlobalLock(DevhWnd);
        if DevMode <> nil then
        begin
            DevMode^.dmFields := DevMode^.dmFields or DM_PaperWidth or DM_PaperLength or DM_PaperSize;
            case pgsize of
            1:  begin
                    DevMode^.dmPaperSize := DMPaper_User;
                    DevMode^.dmPaperLength := 1400;
                    DevMode^.dmPaperWidth := 970;
                end;
            2:  begin
                    DevMode^.dmPaperSize := DMPaper_User;
                    DevMode^.dmPaperLength := 1430;
                    DevMode^.dmPaperWidth := 1910;
                end;
            3:  begin
                    DevMode^.dmPaperSize := DMPaper_User;
                    DevMode^.dmPaperLength := 2050;
                    DevMode^.dmPaperWidth := 1690;
                end;
            4:  begin
                    DevMode^.dmPaperSize := DMPaper_User;
                    DevMode^.dmPaperLength := 1436;
                    DevMode^.dmPaperWidth := 1910;
                end;
            else
                DevMode^.dmPaperSize := DMPaper_A4;
                DevMode^.dmPaperLength := 1000;
                DevMode^.dmPaperWidth := 1000;
            end;
            ResetDC(Printer.Handle,DevMode^);
            GlobalUnlock(DevhWnd);
        end
        else
            begin
                Result:=false;
                exit;
            end;
    end;
except
    Result:=false;
end;
end;