dcsimg
Page 63 of 63 FirstFirst ... 135360616263
Results 2,481 to 2,507 of 2507

Thread: CommonControls (Replacement of the MS common controls)

  1. #2481
    Addicted Member
    Join Date
    Jul 2017
    Posts
    197

    Re: CommonControls (Replacement of the MS common controls)

    Excuse me , but I couldn`t find a description for the method in comments in activex version or even in mountainman`s documentation . Where can I find it ?

    And for commandbuttonw , my bad . I have forgotten to set it at first .

    Edit :
    I found it in object browser . Thanks krool .
    Last edited by Hosam AL Dein; Jan 12th, 2020 at 01:02 PM.

  2. #2482

    Thread Starter
    Frenzied Member
    Join Date
    Jun 2012
    Posts
    1,362

    Re: CommonControls (Replacement of the MS common controls)

    Quote Originally Posted by OldClock View Post
    If so, it would be good to rename that function to InitVisualStyleFixes to make things more clear.
    I will make things more clear and followed your suggestion. Therefore VisualStyles.bas got updated.

    * InitVisualStyles -> InitVisualStylesFixes
    * SetupVisualStyles -> SetupVisualStylesFixes

    Info:
    I really thought about the renaming. Rather to rename as 'VisualStylesFixes' or as you suggested 'VisualStyleFixes'.
    However, looking at this as a single noun phrase rather than "two words in plural" brought me to the conclusion to 'VisualStylesFixes', because a 'fix' is a relationship between multiple components.
    Thus, the singular form is "visual styles fix". (There is never just 1 single visual style affected, thus this always refer to plural visual styles)
    And as there are different kind of fixes the plural is "visual styles fixes".
    Last edited by Krool; Jan 12th, 2020 at 02:37 PM.

  3. #2483
    Addicted Member
    Join Date
    Jul 2016
    Posts
    129

    Re: CommonControls (Replacement of the MS common controls)

    Krool, Great!

    Now a different topic - migration.

    In my effort to migrate my large project to use VBCCR, I got the idea of simply replacing every occurrence of standard MS widgets with VBCCR ones using sed (tested in Linux using sed-4.5).

    The script is:
    Code:
    sed -i -E \
        -e "s/(Begin[[:blank:]]+)MSComCtl2.DTPicker([[:blank:]]+)/\1VBCCR16.DTPicker\2/" \
        -e "s/(Begin[[:blank:]]+)MSComCtl2.MonthView([[:blank:]]+)/\1VBCCR16.MonthView\2/" \
        -e "/[[:blank:]]+StartOfWeek[[:blank:]]+=[[:blank:]]+[[:digit:]]+/d" \
        -e "s/(Begin[[:blank:]]+)MSComCtl2.UpDown([[:blank:]]+)/\1VBCCR16.UpDown\2/" \
        -e "s/(Begin[[:blank:]]+)MSComctlLib.ListView([[:blank:]]+)/\1VBCCR16.ListView\2/" \
        -e "s/(Begin[[:blank:]]+)MSComctlLib.ProgressBar([[:blank:]]+)/\1VBCCR16.ProgressBar\2/" \
        -e "s/(Begin[[:blank:]]+)MSComctlLib.Slider([[:blank:]]+)/\1VBCCR16.Slider\2/" \
        -e "s/(Begin[[:blank:]]+)MSComctlLib.TreeView([[:blank:]]+)/\1VBCCR16.TreeView\2/" \
        -e "s/(Begin[[:blank:]]+)RichTextLib.RichTextBox([[:blank:]]+)/\1VBCCR16.RichTextBox\2/" \
        -e "s/(Begin[[:blank:]]+)VB.CheckBox([[:blank:]]+)/\1VBCCR16.CheckBoxW\2/" \
        -e "s/(Begin[[:blank:]]+)VB.ComboBox([[:blank:]]+)/\1VBCCR16.ComboBoxW\2/" \
        -e "s/(Begin[[:blank:]]+)VB.CommandButton([[:blank:]]+)/\1VBCCR16.CommandButtonW\2/" \
        -e "s/(Begin[[:blank:]]+)VB.Frame([[:blank:]]+)/\1VBCCR16.FrameW\2/" \
        -e "s/(Begin[[:blank:]]+)VB.Label([[:blank:]]+)/\1VBCCR16.LabelW\2/" \
        -e "s/(Begin[[:blank:]]+)VB.ListBox([[:blank:]]+)/\1VBCCR16.ListBoxW\2/" \
        -e "s/(Begin[[:blank:]]+)VB.OptionButton([[:blank:]]+)/\1VBCCR16.OptionButtonW\2/" \
        -e "s/(Begin[[:blank:]]+)VB.TextBox([[:blank:]]+)/\1VBCCR16.TextBoxW\2/" \
        foo.frm
    Test-project:
    test_repo.zip

    This seems to work well in the test-project. To prove it:
    1. Open the mscc.vbp in the attached project, then open Form1 in the VB6 IDE.
    Name:  screenshot_20200113_183647.jpg
Views: 219
Size:  18.5 KB
    2. Run the script on mscc.frm. All it does is to replace the MS widgets with the VBCCR ones, e.g.:
    Code:
    -   Begin VB.OptionButton Option1
    +   Begin VBCCR16.OptionButtonW Option1
    3. Open mscc.vbp in the VB6 IDE, open Form1. Still works well, and all the widgets are now VBCCR, great.
    Name:  screenshot_20200113_190019.jpg
Views: 220
Size:  18.6 KB

    However, when I do the same to my real project, then when I open the project in the VB6 IDE and try to open the form I get this error:
    Run-time error '713':
    Class not registered.
    Name:  screenshot_20200113_190329.png
Views: 219
Size:  4.7 KB

    When I try opening the form again, I now get this error:
    Run-time error '429':
    ActiveX component can't create object
    Name:  screenshot_20200113_190431.png
Views: 219
Size:  5.3 KB

    Any idea what this means, or where to look, or how to get VB6 to tell me which class is not registered?

  4. #2484

    Thread Starter
    Frenzied Member
    Join Date
    Jun 2012
    Posts
    1,362

    Re: CommonControls (Replacement of the MS common controls)

    Quote Originally Posted by OldClock View Post
    Any idea what this means, or where to look, or how to get VB6 to tell me which class is not registered?
    There are quite some other "naming swaps" needed.
    Example: 'MSComctlLib.Node' -> 'VBCCR16.TvwNode'
    and so on..

  5. #2485
    Addicted Member
    Join Date
    Jul 2016
    Posts
    129

    Re: CommonControls (Replacement of the MS common controls)

    Those would cause problems at compile time, but not while just attempting to open a form, no?

  6. #2486

    Thread Starter
    Frenzied Member
    Join Date
    Jun 2012
    Posts
    1,362

    Re: CommonControls (Replacement of the MS common controls)

    Quote Originally Posted by OldClock View Post
    Those would cause problems at compile time, but not while just attempting to open a form, no?
    Which compile time errors? Then you know the spot which is causing the error and you can fix it.

  7. #2487
    Addicted Member
    Join Date
    Jul 2016
    Posts
    129

    Re: CommonControls (Replacement of the MS common controls)

    Quote Originally Posted by Krool View Post
    Which compile time errors? Then you know the spot which is causing the error and you can fix it.
    Having MSComctlLib.Node in the code would cause errors at compile-time, but that is not the problem. The problem I'm experiencing is an error when trying to open a form in the IDE, and as far as I know the form has no MSComctlLib.Node (I searched through the form code).

  8. #2488

    Thread Starter
    Frenzied Member
    Join Date
    Jun 2012
    Posts
    1,362

    Re: CommonControls (Replacement of the MS common controls)

    Quote Originally Posted by OldClock View Post
    Having MSComctlLib.Node in the code would cause errors at compile-time, but that is not the problem. The problem I'm experiencing is an error when trying to open a form in the IDE, and as far as I know the form has no MSComctlLib.Node (I searched through the form code).
    The .frx file is the problem in this case.
    You can only delete it and supply then the lost information again in the properties.

  9. #2489
    Addicted Member
    Join Date
    Jul 2016
    Posts
    129

    Re: CommonControls (Replacement of the MS common controls)

    Ah that's a pity - would have been so easy otherwise.

  10. #2490
    Addicted Member
    Join Date
    Jul 2016
    Posts
    129

    Re: CommonControls (Replacement of the MS common controls)

    I managed to pull it off, and documented the process in the "How I migrated my project to VBCCR" thread:
    http://www.vbforums.com/showthread.p...45#post5444945

  11. #2491

    Thread Starter
    Frenzied Member
    Join Date
    Jun 2012
    Posts
    1,362

    Re: CommonControls (Replacement of the MS common controls)

    Quote Originally Posted by OldClock View Post
    I managed to pull it off, and documented the process in the "How I migrated my project to VBCCR" thread:
    http://www.vbforums.com/showthread.p...45#post5444945
    Good one.

    Update released. The migration problem for 'PasswordChar' got fixed. So you can update your script accordingly that the removal is not necessary anymore.

  12. #2492
    Addicted Member
    Join Date
    Jul 2016
    Posts
    129

    Re: CommonControls (Replacement of the MS common controls)

    Thanks, script updated - PasswordChar line removed.

  13. #2493
    New Member
    Join Date
    Jan 2020
    Posts
    3

    Re: CommonControls (Replacement of the MS common controls)

    Krool, thank you for these controls, they saved my app.
    I have a problem with the status bar control, the "Spring" autosize parameter seems to not work like the standard control.
    When all the panels of the bar have the "Spring" parameter and you resize the container window, in the standard controls they resize proportionally, but in your control all but the last panel remain of the design-time size, while the last one fills all the new space.
    What can I do to reproduce the standard control behavior?
    Attached a sample project.
    StatusBar.zip

  14. #2494
    Addicted Member
    Join Date
    Jul 2016
    Posts
    129

    Re: CommonControls (Replacement of the MS common controls)

    kr00l is centering text in textboxes broken in 1.6.58? I can't get it centered...
    Name:  screenshot_20200115_182624.jpg
Views: 171
Size:  32.1 KB
    textbox_not_centering.zip

  15. #2495

    Thread Starter
    Frenzied Member
    Join Date
    Jun 2012
    Posts
    1,362

    Re: CommonControls (Replacement of the MS common controls)

    Quote Originally Posted by sbri View Post
    I have a problem with the status bar control, the "Spring" autosize parameter seems to not work like the standard control.
    When all the panels of the bar have the "Spring" parameter and you resize the container window, in the standard controls they resize proportionally, but in your control all but the last panel remain of the design-time size, while the last one fills all the new space.
    What can I do to reproduce the standard control behavior?
    Fixed. Thanks!! (Update released)

    Quote Originally Posted by OldClock View Post
    kr00l is centering text in textboxes broken in 1.6.58? I can't get it centered...
    I can't reproduce. For me it's centering and no problem in your demo...

  16. #2496
    New Member
    Join Date
    Jan 2020
    Posts
    3

    Re: CommonControls (Replacement of the MS common controls)

    Quote Originally Posted by Krool View Post
    Fixed. Thanks!! (Update released)
    Thank you for the fix!

  17. #2497
    New Member
    Join Date
    Jan 2020
    Posts
    3

    Re: CommonControls (Replacement of the MS common controls)

    (duplicate please delete)

  18. #2498
    Addicted Member
    Join Date
    Jul 2016
    Posts
    129

    Re: CommonControls (Replacement of the MS common controls)

    Hi kr00l

    In relation to http://www.vbforums.com/showthread.p...=1#post5446145

    My MainForm.frm is very large. Editing it in the VB6 IDE was slow when using Microsoft Windows Common Controls(-2) 6.0, but now with VBCCR16 (currently on 1.06.0058 OCX) it has become unusably slow (>20 seconds to open the MainForm for editing in the IDE). I suspect my program is larger than most, so it's no surprise that these issues appear.

    Sometimes a crash occurs while opening the main form in the IDE or in the compiled program. The first time I run the compiled EXE after booting Windows (XP SP3 in VBox), the login screen shows correctly, and when I log it and the program tries to show the MainForm it crashes with a VBCCR window appearing with the error message
    Run-time error '0'
    The login screen should look like this:
    Name:  screenshot_20200120_184029.png
Views: 109
Size:  16.3 KB

    When it crashes, it becomes like this, with those diagonal lines and horrible kerning:
    Name:  screenshot_20200120_183722.png
Views: 110
Size:  123.1 KB

    The error signature:
    AppName: cannonfodder.exe AppVer: 3.0.0.5 ModName: msvbvm60.dll
    ModVer: 6.0.98.2 Offset: 00063f5a
    If I re-run the EXE and re-login, the MainForm shows correctly.

    These crashes do not result from the program's code, as it has been stable for a long time, and only appeared after switching to VBCCR. I suppose they come from a combination of factors: the main form containing a huge number of controls (2500 in total), perhaps more than VB6 was designed for; imperfections in VBCCR; and bugs in Windows.

    Sometimes the same sort of crash happens from within the IDE, with the diagonal lines and bad kerning, but there the error signature says:
    AppName: vb6.exe AppVer: 6.0.97.82 ModName: unknown
    ModVer: 0.0.0.0 Offset: 1110a460
    Is this a known issue, and is there anything I can do to mitigate it?

    Unfortunately I am not allowed to upload the code.

    I also ran into this error:
    Run-time error '7':
    Out of memory
    Name:  screenshot_20200120_182932.png
Views: 104
Size:  3.5 KB

    It turns out this has nothing to do with memory, and appears only if the OCX file is not placed alongside my program's executable (I use side-by-side loading via the manifest file embedded in the resource file). It would be better if the error message actually said that the OCX file is missing.

    Kind regards

  19. #2499

    Thread Starter
    Frenzied Member
    Join Date
    Jun 2012
    Posts
    1,362

    Re: CommonControls (Replacement of the MS common controls)

    OldClock,

    The run time error '0' we had already a few times in this thread.
    Its an incompatibility of 32 bit icons loaded at design time on in Vista+ (ok so far) but then later crashes when you attempt to use them in Win XP. (MS issue)

  20. #2500
    Junior Member
    Join Date
    Apr 2019
    Posts
    19

    Re: CommonControls (Replacement of the MS common controls)

    Hi Krool,

    Thank you for your effort to keep this project alive and up-to-date, it's a huge commitment, also huge time-consumer. Appreciate it.

    Today I decided to replace some of components in my application with a ListView control. Since dark theme is widely used nowadays, my app also support it. However, when I added Groups to my listview, the result wasn't very beautiful as you can see below:

    Name:  lvGroupColorUntoched.JPG
Views: 99
Size:  18.0 KB

    Initially, I tried to set fore color of the Group text as follows:

    Code:
    Friend Property Let FGroupForeColor(ByVal Value As OLE_COLOR)
    Dim groupMetrics As LVGROUPMETRICS
    
    groupMetrics.cbSize = Len(groupMetrics)
    groupMetrics.Mask = LVGMF_TEXTCOLOR
    groupMetrics.crHeader = Value
    
    If ListViewHandle <> 0 Then
        SendMessage ListViewHandle, LVM_SETGROUPMETRICS, 0, ByVal VarPtr(groupMetrics)
        Me.Refresh
    End If
    End Property
    Unfortunately, LVGMF_TEXTCOLOR is not implemented (really) and the result was...none.

    Most of the Google results state that changing color of group text is not possible (like this). However, I found that article in MSDN forum:

    https://social.msdn.microsoft.com/Fo...orum=vbgeneral

    and after some time, I had this:

    Name:  lvGroupColor.png
Views: 95
Size:  8.4 KB

    After adding centered blank header title:
    Name:  Header.png
Views: 99
Size:  3.9 KB

    The code is quite ugly but it works somehow, just to prove that it is completely possible to draw a custom Group header:

    Code:
           Case NM_CUSTOMDRAW
                            Dim FontHandle As Long, Bold As Boolean, ForeColor As OLE_COLOR
                            Dim NMLVCD     As NMLVCUSTOMDRAW
    
                            CopyMemory NMLVCD, ByVal lParam, LenB(NMLVCD)
    
                            Select Case NMLVCD.NMCD.dwDrawStage
                                Case CDDS_PREPAINT
                                    WindowProcUserControl = CDRF_NOTIFYITEMDRAW
    
                                    If NMLVCD.dwItemType = LVCDI_GROUP Then
                                        Dim rectHeader As RECT: rectHeader.Top = LVGGR_HEADER
                                        Dim nItem      As Long: nItem = NMLVCD.NMCD.dwItemSpec
                                        Dim nRet       As Long: nRet = SendMessage(ListViewHandle, LVM_GETGROUPRECT, nItem, rectHeader)
                                        
                                        Dim hPen       As Long: hPen = CreatePen(0, 1, vbRed)
                                        Dim OldhPen    As Long: OldhPen = SelectObject(NMLVCD.NMCD.hDC, hPen)
                                        Dim hBrush     As Long: hBrush = CreateSolidBrush(&H80FF&)
                                        Dim OldhBrush  As Long: OldhBrush = SelectObject(NMLVCD.NMCD.hDC, hBrush)
                                                                            
                                        Rectangle NMLVCD.NMCD.hDC, rectHeader.Left, rectHeader.Top, rectHeader.Right, rectHeader.Bottom
                                        Call SetTextColor(NMLVCD.NMCD.hDC, vbGreen)
                                        Call DrawText(NMLVCD.NMCD.hDC, "TEST1-2-3", Len("TEST1-2-3"), rectHeader, DT_SINGLELINE Or DT_CENTER Or DT_VCENTER)
                                        
                                        DeleteObject hPen: DeleteObject hBrush
                                    End If
    
                                    Exit Function

    I believe that many people will appreciate a custom Group Header. My knowledge is not enough to make it bullet-proof, I just copy-paste. For example, now adding a footer doesn't work - IDE crash.

    Dark theme really doesn't look good with blue group header

    Thank you.

    Edit: the code above doesn't break Group.Footer, in my case the Footer works only when SubsetLink is set, otherwise, the IDE crashes. It's the same with Standard EXE Version sample.

    Code:
            With .Groups.Add(, , "Header Title")
                '.SubsetLink = "Subset Link?"
                .Footer = "Footer Title"
                .FooterAlignment = LvwGroupFooterAlignmentCenter
            End With
    Attached Images Attached Images  
    Last edited by npac4o; Jan 21st, 2020 at 04:17 AM. Reason: Attaching pictures to the post

  21. #2501
    Junior Member
    Join Date
    Apr 2019
    Posts
    19

    Re: CommonControls (Replacement of the MS common controls)

    Code:
    If NMLVCD.dwItemType = LVCDI_GROUP Then
        Dim rectHeader As RECT: rectHeader.Top = LVGGR_HEADER
        Dim nItem      As Long: nItem = NMLVCD.NMCD.dwItemSpec
        Dim nRet       As Long: nRet = SendMessage(ListViewHandle, LVM_GETGROUPRECT, nItem, rectHeader)
        
        Dim hPen       As Long: hPen = CreatePen(5, 1, vb3DFace)
        Dim OldhPen    As Long: OldhPen = SelectObject(NMLVCD.NMCD.hDC, hPen)
        Dim hBrush     As Long: hBrush = CreateSolidBrush(&H80FF&)
        Dim OldhBrush  As Long: OldhBrush = SelectObject(NMLVCD.NMCD.hDC, hBrush)
                                            
        Dim lvg As LVGROUP: With lvg
            .cbSize = Len(lvg)
            .Mask = LVGF_STATE Or LVGF_GROUPID Or LVGF_HEADER
        End With
    
        nRet = SendMessage(ListViewHandle, LVM_GETGROUPINFO, nItem, lvg)
        Dim sText As String: sText = GetStringFromPointer(lvg.pszHeader)
                                            
        Call Rectangle(NMLVCD.NMCD.hDC, rectHeader.Left, rectHeader.Top, rectHeader.Right, rectHeader.Bottom)
        Call SetTextColor(NMLVCD.NMCD.hDC, vbGreen)
        Call DrawText(NMLVCD.NMCD.hDC, sText, Len(sText), rectHeader, DT_SINGLELINE Or DT_CENTER Or DT_VCENTER Or DT_NOCLIP)
        
        DeleteObject hPen: DeleteObject hBrush
        WindowProcUserControl = CDRF_SKIPDEFAULT
    Else
        WindowProcUserControl = CDRF_NOTIFYITEMDRAW
    End If
    Name:  CustomHeader.PNG
Views: 87
Size:  3.6 KB

    It's a fun to experiment
    Last edited by npac4o; Jan 21st, 2020 at 07:25 AM.

  22. #2502
    Junior Member dseaman's Avatar
    Join Date
    Oct 2004
    Location
    Natal, Brazil
    Posts
    28

    Re: CommonControls (Replacement of the MS common controls)

    Now that LabelW is Windowless, does it no longer support OLEDragDrop?

  23. #2503
    Junior Member dseaman's Avatar
    Join Date
    Oct 2004
    Location
    Natal, Brazil
    Posts
    28

    Re: CommonControls (Replacement of the MS common controls)

    Quote Originally Posted by dseaman View Post
    Now that LabelW is Windowless, does it no longer support OLEDragDrop?
    My bad. It was not Automatic. I can set Caption via Private Sub LabelW1_OLEDragDrop Event.

  24. #2504
    Junior Member dseaman's Avatar
    Join Date
    Oct 2004
    Location
    Natal, Brazil
    Posts
    28

    Re: CommonControls (Replacement of the MS common controls)

    Duplicate post.
    Last edited by dseaman; Jan 23rd, 2020 at 12:29 AM.

  25. #2505

    Thread Starter
    Frenzied Member
    Join Date
    Jun 2012
    Posts
    1,362

    Re: CommonControls (Replacement of the MS common controls)

    Quote Originally Posted by dseaman View Post
    My bad. It was not Automatic. I can set Caption via Private Sub LabelW1_OLEDragDrop Event.
    Glad you figured it out. But, LabelW was from the beginning windowless. Just for the records..

  26. #2506
    Member
    Join Date
    Oct 2016
    Posts
    35

    Re: CommonControls (Replacement of the MS common controls)

    Hi!
    I am looking at the Checkbox ownerdraw event, could you please give a description of the paramaters

    OwnerDraw(ByVal Action As Long, ByVal State As Long, ByVal hDC As Long, ByVal Left As Long, ByVal Top As Long, ByVal Right As Long, ByVal Bottom As Long)

    thanks

  27. #2507

    Thread Starter
    Frenzied Member
    Join Date
    Jun 2012
    Posts
    1,362

    Re: CommonControls (Replacement of the MS common controls)

    Quote Originally Posted by npac4o View Post
    the code above doesn't break Group.Footer, in my case the Footer works only when SubsetLink is set, otherwise, the IDE crashes. It's the same with Standard EXE Version sample.

    Code:
            With .Groups.Add(, , "Header Title")
                '.SubsetLink = "Subset Link?"
                .Footer = "Footer Title"
                .FooterAlignment = LvwGroupFooterAlignmentCenter
            End With
    Interesting. However, it applies only when the ListView1.GroupSubsetCount is > 0. (feature is enabled)

    I don't know how to solve it, seems like a comctl32.dll bug.

    But, you can workaround it by going way 1 or way 2:

    Way1:
    Code:
    With .Groups.Add(, , "Header Title")
    .SubsetLink = "" ' StrPtr <> 0
    .Footer = "Footer Title"
    .FooterAlignment = LvwGroupFooterAlignmentCenter
    End With
    Way2: (can be done of course already at design time. A new ListView has GroupSubsetCount = 0 by default)
    Code:
    ListView1.GroupSubsetCount = 0
    Quote Originally Posted by Semke View Post
    Hi!
    I am looking at the Checkbox ownerdraw event, could you please give a description of the paramaters

    OwnerDraw(ByVal Action As Long, ByVal State As Long, ByVal hDC As Long, ByVal Left As Long, ByVal Top As Long, ByVal Right As Long, ByVal Bottom As Long)
    Certain members of the DRAWITEMSTRUCT are passed to the OwnerDraw event.

    Code:
    typedef struct tagDRAWITEMSTRUCT {
      UINT      CtlType;
      UINT      CtlID;
      UINT      itemID;
      UINT      itemAction;
      UINT      itemState;
      HWND      hwndItem;
      HDC       hDC;
      RECT      rcItem;
      ULONG_PTR itemData;
    } DRAWITEMSTRUCT, *PDRAWITEMSTRUCT, *LPDRAWITEMSTRUCT;
    itemAction -> Action
    itemState -> State
    hDC -> hDC
    rcItem -> Left, Top, Right, Bottom

    You may find plenty of examples on the net about subclassing a checkbox and handling WM_DRAWITEM.
    So just look at those snippets and implement them accordingly into the OwnerDraw event.
    Last edited by Krool; Jan 22nd, 2020 at 04:55 PM.

Page 63 of 63 FirstFirst ... 135360616263

Posting Permissions

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



Featured


Click Here to Expand Forum to Full Width