Results 1 to 5 of 5

Thread: Cash Register Printer Programming

  1. #1

    Thread Starter
    Frenzied Member
    Join Date
    Aug 2000
    Posts
    1,539

    Cash Register Printer Programming

    I have never programmed for a point of sale printer..
    i have made a program now all i need is to actually print to these printers (same printers as found at convenient stores)


    1. do these printers follow a standard protocal? (if i programm for one will i have to program for different brand names or do they ship with drivers for windows)

    2. what else should i watch out for..

    any details or info you guys could give would be appreciated it

    thanks.

  2. #2
    Frenzied Member
    Join Date
    Jul 2002
    Posts
    1,370
    Most of those printers are NOT supported by 32 bit drivers.
    You can sometimes print to them via winspool or more often directly using the MSComm control. They are largely dot matrix
    printers, some use heat technology. It's like print to an Epson MX-80, if that rings a bell. They all understand ascii 12 for formfeed, ascii 10 & 13 for linefeed/carriage return.

    What we did for printers like this was to simply send straight ascii out the LPT or COM port using the escape api and winspool.

    You may have noticed that when you add a printer windows asks if you want to print in DOS mode. If you enable DOS printing, you can use winspool (via the Escape api) or MSComm.

    By the way, a lot of POS software is 16 bit Windows, ie, DOS.

  3. #3
    Hyperactive Member hassa046's Avatar
    Join Date
    May 2001
    Location
    Venlo, The Netherlands
    Posts
    336

    Re: Cash Register Printer Programming

    Quote Originally Posted by kovan
    I have never programmed for a point of sale printer..
    i have made a program now all i need is to actually print to these printers (same printers as found at convenient stores)


    1. do these printers follow a standard protocal? (if i programm for one will i have to program for different brand names or do they ship with drivers for windows)

    2. what else should i watch out for..

    any details or info you guys could give would be appreciated it

    thanks.
    I'm using an Epson Receipt printer en use the following code:

    VB Code:
    1. 'Module modPrint
    2. Option Explicit
    3.  
    4. Public Const PAGE_READONLY = &H2
    5. Public Const SECTION_MAP_READ = &H4
    6. Public Const FILE_MAP_READ = SECTION_MAP_READ
    7. Public Const SIZE_BMIH = 40     'sizeof(BITMAPINFOHEADER)
    8. Public Const SIZE_BMIFH = 14    'sizeof(BITMAPFILEHEADER)
    9. Public Const OFF_BMOFFSET = 10    'offset to bmOffset
    10. Public Const GENERIC_READ = &H80000000
    11. Public Const FILE_SHARE_READ = &H1
    12. Public Const OPEN_EXISTING = 3
    13. Public Const FILE_ATTRIBUTE_NORMAL = &H80
    14. Public Const DIB_RGB_COLORS = 0 '  color table in RGBs
    15. Public Const SRCCOPY = &HCC0020 ' (DWORD) dest = source
    16. Public Const PIXELS = 3
    17. Public Const TWIPS = 1
    18. Public Const WHITE = &HFFFFFF
    19. Public Const NVIMAGE1_HEIGHT = 80
    20. Public Const NVIMAGE2_HEIGHT = 80
    21. Public Const NVIMAGE3_HEIGHT = 80
    22. Public Const VER_PLATFORM_WIN32_NT = 2
    23.  
    24. 'Constants for DEVMODE
    25. Public Const CCHDEVICENAME = 32
    26. Public Const CCHFORMNAME = 32
    27. Public Const NULLPTR = 0&
    28. Public Const DM_COLOR = &H800&
    29.  
    30. 'Constants for PaperSource Setting
    31. Public Const DM_MODIFY = 8
    32. Public Const DM_IN_BUFFER = DM_MODIFY
    33. Public Const DM_COPY = 2
    34. Public Const DM_OUT_BUFFER = DM_COPY
    35. Public Const DM_DEFAULTSOURCE = &H200
    36.  
    37. 'Constants for DeviceCapabilities Getting
    38. Public Const DC_BINS = 6
    39. Public Const DC_BINNAMES = 12
    40. Public Const DMBIN_USER = 256               '  device specific bins start here
    41.  
    42. 'Constants for Create Font
    43. Public Const LOGPIXELSY = 90
    44. Public Const FW_NORMAL = 400
    45. Public Const FW_DONTCARE = 0
    46. Public Const DEFAULT_CHARSET = 1
    47. Public Const OUT_DEFAULT_PRECIS = 0
    48. Public Const CLIP_DEFAULT_PRECIS = 0
    49. Public Const DEFAULT_QUALITY = 0
    50. Public Const VERTRES = 10
    51.  
    52. 'OS Version
    53. Public iIsNT As Integer
    54. Public Const VER_ISNT = 2
    55.  
    56. 'Public Papameter
    57. Public Const ENTR_TM_DRIVER = "EPSON TM"
    58. Public Const ENTR_BA_DRIVER = "EPSON BA"
    59. Public Const ENTR_EU_DRIVER = "EPSON EU"
    60. Public Const ENTR_DM_DRIVER = "EPSON DM"
    61. Public Const ENTR_RP_DRIVER = "EPSON RP"
    62.  
    63. 'Font Lists
    64. Public Const LF_FACESIZE = 32
    65. Public Const LF_FULLFACESIZE = 64
    66.  
    67. ' ntmFlags field flag
    68. Public Const NTM_REGULAR = &H40&
    69. Public Const NTM_BOLD = &H20&
    70. Public Const NTM_ITALIC = &H1&
    71.  
    72. '  tmPitchAndFamily flag
    73. Public Const TMPF_FIXED_PITCH = &H1
    74. Public Const TMPF_VECTOR = &H2
    75. Public Const TMPF_DEVICE = &H8
    76. Public Const TMPF_TRUETYPE = &H4
    77.  
    78. Public Const ELF_VERSION = 0
    79. Public Const ELF_CULTURE_LATIN = 0
    80.  
    81. '  EnumFonts mask
    82. Public Const RASTER_FONTTYPE = &H1
    83. Public Const DEVICE_FONTTYPE = &H2
    84. Public Const TRUETYPE_FONTTYPE = &H4
    85.  
    86. '  RegOpenKeyEx
    87. Public Const HKEY_LOCAL_MACHINE = &H80000002
    88. Public Const KEY_QUERY_VALUE = &H1
    89.  
    90. '  RegQueryValueEx
    91. Public Const REG_SZ = 1                         ' Unicode nul terminated string
    92. Public Const READ_CONTROL = &H20000
    93. Public Const STANDARD_RIGHTS_READ = (READ_CONTROL)
    94. Public Const KEY_ENUMERATE_SUB_KEYS = &H8
    95. Public Const KEY_NOTIFY = &H10
    96. Public Const SYNCHRONIZE = &H100000
    97. Public Const STANDARD_RIGHTS_ALL = &H1F0000
    98. Public Const KEY_SET_VALUE = &H2
    99. Public Const KEY_CREATE_SUB_KEY = &H4
    100. Public Const KEY_CREATE_LINK = &H20
    101. Public Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or _
    102.                 KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or _
    103.                 KEY_CREATE_LINK) And (Not SYNCHRONIZE))
    104.  
    105. Public Const EX_CONTROL_FONT = "controlA"
    106. Public Const EX_CONTROL_FILE = "\TMCTRLA.ini"
    107.  
    108. Public Type lstPrnFontTbl
    109.     Name As String
    110.     Size As Integer
    111. End Type
    112.  
    113. Public lstPrnFont(253) As lstPrnFontTbl
    114. Public FontColorFlag As Integer
    115. Public TimerOverFlag As Integer
    116. Public TitlePrint As Boolean
    117. Public SelDriver As String
    118. Public fntTitleName As String
    119.  
    120. 'used with OpenPrinter command
    121. Public Type DOC_INFO_1
    122.         pDocName As String
    123.         pOutputFile As String
    124.         pDatatype As String
    125. End Type
    126.  
    127. Type TEXTMETRIC
    128.         tmHeight As Long
    129.         tmAscent As Long
    130.         tmDescent As Long
    131.         tmInternalLeading As Long
    132.         tmExternalLeading As Long
    133.         tmAveCharWidth As Long
    134.         tmMaxCharWidth As Long
    135.         tmWeight As Long
    136.         tmOverhang As Long
    137.         tmDigitizedAspectX As Long
    138.         tmDigitizedAspectY As Long
    139.         tmFirstChar As Byte
    140.         tmLastChar As Byte
    141.         tmDefaultChar As Byte
    142.         tmBreakChar As Byte
    143.         tmItalic As Byte
    144.         tmUnderlined As Byte
    145.         tmStruckOut As Byte
    146.         tmPitchAndFamily As Byte
    147.         tmCharSet As Byte
    148. End Type
    149.  
    150. Type BITMAPINFOHEADER '40 bytes
    151.         biSize As Long
    152.         biWidth As Long
    153.         biHeight As Long
    154.         biPlanes As Integer
    155.         biBitCount As Integer
    156.         biCompression As Long
    157.         biSizeImage As Long
    158.         biXPelsPerMeter As Long
    159.         biYPelsPerMeter As Long
    160.         biClrUsed As Long
    161.         biClrImportant As Long
    162. End Type
    163.  
    164. Type RGBQUAD
    165.         rgbBlue As Byte
    166.         rgbGreen As Byte
    167.         rgbRed As Byte
    168.         rgbReserved As Byte
    169. End Type
    170.  
    171. Type BITMAPINFO
    172.         bmiHeader As BITMAPINFOHEADER
    173.         bmiColors(2) As RGBQUAD
    174. End Type
    175.  
    176. Type DOCINFO
    177.         cbSize As Long
    178.         lpszDocName As String
    179.         lpszOutput As String
    180. End Type
    181.  
    182. Public Type OSVERSIONINFO
    183.         dwOSVersionInfoSize As Long
    184.         dwMajorVersion As Long
    185.         dwMinorVersion As Long
    186.         dwBuildNumber As Long
    187.         dwPlatformId As Long
    188.         szCSDVersion As String * 128      '  Maintenance string for PSS usage
    189. End Type
    190.  
    191. Public Type DEVMODE
    192.         dmDeviceName(1 To CCHDEVICENAME) As Byte
    193.         dmSpecVersion As Integer
    194.         dmDriverVersion As Integer
    195.         dmSize As Integer
    196.         dmDriverExtra As Integer
    197.         dmFields As Long
    198.         dmOrientation As Integer
    199.         dmPaperSize As Integer
    200.         dmPaperLength As Integer
    201.         dmPaperWidth As Integer
    202.         dmScale As Integer
    203.         dmCopies As Integer
    204.         dmDefaultSource As Integer
    205.         dmPrintQuality As Integer
    206.         dmColor As Integer
    207.         dmDuplex As Integer
    208.         dmYResolution As Integer
    209.         dmTTOption As Integer
    210.         dmCollate As Integer
    211.         dmFormName(1 To CCHFORMNAME) As Byte
    212.         dmUnusedPadding As Integer
    213.         dmBitsPerPel As Integer
    214.         dmPelsWidth As Long
    215.         dmPelsHeight As Long
    216.         dmDisplayFlags As Long
    217.         dmDisplayFrequency As Long
    218. End Type
    219.  
    220. Type LOGFONT
    221.         lfHeight As Long
    222.         lfWidth As Long
    223.         lfEscapement As Long
    224.         lfOrientation As Long
    225.         lfWeight As Long
    226.         lfItalic As Byte
    227.         lfUnderline As Byte
    228.         lfStrikeOut As Byte
    229.         lfCharSet As Byte
    230.         lfOutPrecision As Byte
    231.         lfClipPrecision As Byte
    232.         lfQuality As Byte
    233.         lfPitchAndFamily As Byte
    234.         lfFaceName(LF_FACESIZE) As Byte
    235. End Type
    236.  
    237. Type NEWTEXTMETRIC
    238.         tmHeight As Long
    239.         tmAscent As Long
    240.         tmDescent As Long
    241.         tmInternalLeading As Long
    242.         tmExternalLeading As Long
    243.         tmAveCharWidth As Long
    244.         tmMaxCharWidth As Long
    245.         tmWeight As Long
    246.         tmOverhang As Long
    247.         tmDigitizedAspectX As Long
    248.         tmDigitizedAspectY As Long
    249.         tmFirstChar As Byte
    250.         tmLastChar As Byte
    251.         tmDefaultChar As Byte
    252.         tmBreakChar As Byte
    253.         tmItalic As Byte
    254.         tmUnderlined As Byte
    255.         tmStruckOut As Byte
    256.         tmPitchAndFamily As Byte
    257.         tmCharSet As Byte
    258.         ntmFlags As Long
    259.         ntmSizeEM As Long
    260.         ntmCellHeight As Long
    261.         ntmAveWidth As Long
    262. End Type
    263.  
    264. Public Type wPRINTER_INFO_2
    265.         pServerName As Long
    266.         pPrinterName As Long
    267.         pShareName As Long
    268.         pPortName As Long
    269.         pDriverName As Long
    270.         pComment As Long
    271.         pLocation As Long
    272.         pDevMode As Long
    273.         pSepFile As Long
    274.         pPrintProcessor As Long
    275.         pDatatype As Long
    276.         pParameters As Long
    277.         pSecurityDescriptor As Long
    278.         Attributes As Long
    279.         Priority As Long
    280.         DefaultPriority As Long
    281.         StartTime As Long
    282.         UntilTime As Long
    283.         Status As Long
    284.         cJobs As Long
    285.         AveragePPM As Long
    286. End Type
    Better to regret things you did, than those you didn't
    International Intelligence

  4. #4
    Hyperactive Member hassa046's Avatar
    Join Date
    May 2001
    Location
    Venlo, The Netherlands
    Posts
    336

    Re: Cash Register Printer Programming

    VB Code:
    1. Public Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
    2. Public Declare Function EndDocPrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
    3. Public Declare Function EndPagePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
    4. Public Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, ByVal pDefault As Long) As Long
    5. Public Declare Function StartDocPrinter Lib "winspool.drv" Alias "StartDocPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, pDocInfo As DOC_INFO_1) As Long
    6. Public Declare Function StartPagePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
    7. Public Declare Function WritePrinter Lib "winspool.drv" (ByVal hPrinter As Long, pBuf As Any, ByVal cdBuf As Long, pcWritten As Long) As Long
    8. Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    9. Public Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
    10. Public Declare Function CreateFileMapping Lib "kernel32" Alias "CreateFileMappingA" (ByVal hFile As Long, lpFileMappigAttributes As Any, ByVal flProtect As Long, ByVal dwMaximumSizeHigh As Long, ByVal dwMaximumSizeLow As Long, ByVal lpName As String) As Long
    11. Public Declare Function MapViewOfFile Lib "kernel32" (ByVal hFileMappingObject As Long, ByVal dwDesiredAccess As Long, ByVal dwFileOffsetHigh As Long, ByVal dwFileOffsetLow As Long, ByVal dwNumberOfBytesToMap As Long) As Long
    12. Public Declare Function StartDoc Lib "gdi32" Alias "StartDocA" (ByVal hdc As Long, lpdi As DOCINFO) As Long
    13. Public Declare Function StartPage Lib "gdi32" (ByVal hdc As Long) As Long
    14. Public Declare Function EndPage Lib "gdi32" (ByVal hdc As Long) As Long
    15. Public Declare Function EndDoc Lib "gdi32" (ByVal hdc As Long) As Long
    16. Public Declare Function StretchDIBits Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal y As Long, ByVal dx As Long, ByVal dy As Long, ByVal SrcX As Long, ByVal SrcY As Long, ByVal wSrcWidth As Long, ByVal wSrcHeight As Long, ByVal lpBits As Long, lpBitsInfo As Any, ByVal wUsage As Long, ByVal dwRop As Long) As Long
    17. Public Declare Function UnmapViewOfFile Lib "kernel32" (lpBaseAddress As Any) As Long
    18. Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    19. Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
    20. Public Declare Function GetTextMetrics Lib "gdi32" Alias "GetTextMetricsA" (ByVal hdc As Long, lpMetrics As TEXTMETRIC) As Long
    21. Public Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long
    22. Public Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal X As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
    23. Public Declare Function DocumentProperties Lib "winspool.drv" Alias "DocumentPropertiesA" (ByVal hWnd As Long, ByVal hPrinter As Long, ByVal pDeviceName As String, pDevModeOutput As Any, pDevModeInput As Any, ByVal fMode As Long) As Long
    24. Public Declare Function ResetDC Lib "gdi32" Alias "ResetDCA" (ByVal hdc As Long, lpInitData As Any) As Long
    25. Public Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As Long, ByVal lpInitData As Long) As Long
    26. Public Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
    27. Public Declare Function DeviceCapabilities Lib "winspool.drv" Alias "DeviceCapabilitiesA" (ByVal lpDeviceName As String, ByVal lpPort As String, ByVal iIndex As Long, lpOutput As Any, ByVal dev As Long) As Long
    28. Public Declare Function CreateFont Lib "gdi32" Alias "CreateFontA" (ByVal H As Long, ByVal W As Long, ByVal E As Long, ByVal O As Long, ByVal W As Long, ByVal i As Long, ByVal u As Long, ByVal S As Long, ByVal C As Long, ByVal OP As Long, ByVal CP As Long, ByVal Q As Long, ByVal PAF As Long, ByVal F As String) As Long
    29. Public Declare Function MulDiv Lib "kernel32" (ByVal nNumber As Long, ByVal nNumerator As Long, ByVal nDenominator As Long) As Long
    30. Public Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
    31. Public Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
    32. Declare Function EnumFontFamilies Lib "gdi32" Alias "EnumFontFamiliesA" (ByVal hdc As Long, ByVal lpszFamily As String, ByVal lpEnumFontFamProc As Long, LParam As Any) As Long
    33. Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, lpReturnedString As Byte, ByVal nSize As Long, ByVal lpFileName As String) As Long
    34. Declare Function GetPrintProcessorDirectory Lib "winspool.drv" Alias "GetPrintProcessorDirectoryA" (ByVal pName As String, ByVal pEnvironment As String, ByVal Level As Long, pPrintProcessorInfo As Byte, ByVal cdBuf As Long, pcbNeeded As Long) As Long
    35. Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
    36. Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
    37. Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long
    38.     ' Note that if you declare the lpData parameter as String, you must pass it By Value.
    39. Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
    40. Public Declare Function GetPrinter Lib "winspool.drv" Alias "GetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, ByRef pPrinter As Byte, ByVal cbBuf As Long, pcbNeeded As Long) As Long
    41. Public Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef hpvDest As Any, ByRef hpvSource As Any, ByVal cbCopy As Long)
    42. Public Declare Function StringLen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Long) As Long
    43. Public Declare Function StringCpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As Long) As Long
    44.    
    45. 'Printer Font Table
    46. Public lstPrnFontTbl() As String
    47. Public lstDMDFontTbl() As String
    48. Public Function EnumGetFontCount(lpNLF As LOGFONT, lpNTM As NEWTEXTMETRIC, ByVal FontType As Long, LParam As Integer) As Long
    49.     LParam = LParam + 1
    50.     EnumGetFontCount = 1
    51. End Function
    52.  
    53. Public Function EnumGetFontName(lpNLF As LOGFONT, lpNTM As NEWTEXTMETRIC, ByVal FontType As Long, LParam As Integer) As Long
    54.     Dim FaceName As String
    55.    
    56.     FaceName = StrConv(lpNLF.lfFaceName, vbUnicode)
    57.     lstPrnFontTbl(LParam) = Left$(FaceName, InStr(FaceName, vbNullChar) - 1)
    58.    
    59.     LParam = LParam + 1
    60.     EnumGetFontName = 1
    61. End Function
    62.  
    63. Public Function EnumGetDMDFontName(lpNLF As LOGFONT, lpNTM As NEWTEXTMETRIC, ByVal FontType As Long, LParam As Integer) As Long
    64.     Dim FaceName As String
    65.    
    66.     FaceName = StrConv(lpNLF.lfFaceName, vbUnicode)
    67.     lstDMDFontTbl(LParam) = Left$(FaceName, InStr(FaceName, vbNullChar) - 1)
    68.    
    69.     LParam = LParam + 1
    70.     EnumGetDMDFontName = 1
    71. End Function
    72.  
    73.  
    74. 'Class or form
    75. Private Sub PrintBon()
    76.     Dim oPrinter As Printer
    77.    
    78.     For Each oPrinter In Printers
    79.         If oPrinter.DeviceName = "KASSAPRINTER" Then 'The name of your POS printer.
    80.             Set Printer = oPrinter
    81.             GoTo GoPrint
    82.             Exit Sub
    83.         End If
    84.     Next
    85.    
    86.     Exit Sub
    87.  
    88. GoPrint:
    89.    
    90.     Printer.Print
    91.     Printer.CurrentY = 0
    92.     Printer.ScaleMode = PIXELS
    93.    
    94.     Screen.MousePointer = 11
    95.     Printer.Font.Name = "FontA11"
    96.     Printer.Font.Size = 10
    97.    
    98.     Printer.Print "================================="
    99.     Printer.Print "This is a Test.!"
    100.     Printer.Print "================================="
    101.    
    102.     Printer.EndDoc
    103. End Sub
    Better to regret things you did, than those you didn't
    International Intelligence

  5. #5
    Lively Member
    Join Date
    Sep 2007
    Posts
    71

    Re: Cash Register Printer Programming

    thank you hassa046

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width