/* */

Thursday, December 17, 2009

[belajar-access] Resize Form

----- Original Message -----
From: "exz@nt" <exzantmilis@gmail.com>
To: <belajar-access@yahoogroups.com>
Sent: Thursday, December 17, 2009 9:00 AM
Subject: Re: [belajar-access] Resize Form


> Sy mo coba sedikit 'memaksakan' solusi :D
> bukan formnya yg dimodif, tetapi resolusi Monitornya
> misal :
> aplikasi yg dibuat idealnya di pake pada resolusi 800x600, tetapi
> resolusi pada komputer user menggunakan resolusi 1280x800
> maka pada saat Load Form, panggil dulu fungsi untuk mengetahui
> resolusi saat Load, misal resolusinya 1280x800
> Width = GetScrResW() 'hasilnya 1280
> Height = GetScrResH() 'hasilnya 800
> kemudian panggil fungsi untuk merubah resolusi menjadi 800x600 (sesuai
> kondisi idealnya)
> ChRes 800,600
> nanti ketika Unload Form, resolusi dibalikin lagi jd 1280x800 (kondisi
> awal pada saat Load Form)
> ChRes Width,Height
>
> module-nya sbb :
> --------------------------------------------------------------------------
----------------------------------------------------------------------------
---------------
> Option Compare Database
> Option Explicit
>
> Type RECT
> x1 As Long
> y1 As Long
> x2 As Long
> y2 As Long
> End Type
>

> ' NOTE: The following declare statements are case sensitive.
>
> Declare Function GetDesktopWindow Lib "User32" () As Long
> Declare Function GetWindowRect Lib "User32" _
> (ByVal hWnd As Long, rectangle As RECT) As Long
> '======================================================
> Private Declare Function ChangeDisplaySettings Lib "User32" Alias _
> "ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwFlags As Long) As Long
> Private Declare Function EnumDisplaySettings Lib "User32" Alias _
> "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As _
> Long, lpDevMode As Any) As Boolean
>
> Const DM_PELSWIDTH = &H80000
> Const DM_PELSHEIGHT = &H100000
> Const CCFORMNAME = 32
> Const CCDEVICENAME = 32
>
> Private Type DEVMODE
> dmDeviceName As String * CCDEVICENAME
> dmSpecVersion As Integer
> dmDriverVersion As Integer
> dmSize As Integer
> dmDriverExtra As Integer
>
> dmFields As Long
> dmOrientation As Integer
> dmPaperSize As Integer
> dmPaperLength As Integer
> dmPaperWidth As Integer
> dmScale As Integer
> dmCopies As Integer
> dmDefaultSource As Integer
> dmPrintQuality As Integer
> dmColor As Integer
> dmDuplex As Integer
> dmYResolution As Integer
> dmTTOption As Integer
> dmCollate As Integer
>
> dmFormName As String * CCFORMNAME
> dmUnusedPadding As Integer
> dmBitsPerPel As Integer
> dmPelsWidth As Long
> dmPelsHeight As Long
> dmDisplayFlags As Long
> dmDisplayFrequency As Long
> End Type
>
> Public Function ChRes(iWidth As Single, iHeight As Single)
> 'Change Screen Resolution
> 'ex Call : ChRes 1280,800
>
> Dim DevM As DEVMODE
> Dim a As Boolean
> Dim i As Long
> Dim b As Long
>
> i = 0
>
> 'Enumerate settings
> Do
> a = EnumDisplaySettings(0&, i&, DevM)
> i = i + 1
> Loop Until (a = False)
>
> 'Change settings
> DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
>
> DevM.dmPelsWidth = iWidth
> DevM.dmPelsHeight = iHeight
>
> b = ChangeDisplaySettings(DevM, 0)
>
> End Function
>
>
> '************************************************* ****************
> ' FUNCTION: GetScrRes()
> '
> ' PURPOSE:
> ' To determine the current screen size or resolution.
> '
> ' RETURN:
> ' The current screen resolution. Typically one of the following:
> ' 640 x 480
> ' 800 x 600
> ' 1024 x 768
> '
> '************************************************* ****************
> Function GetScrRes() As String
> 'Get Screen Resolution
>
> Dim R As RECT
> Dim hWnd As Long
> Dim RetVal As Long
>
> hWnd = GetDesktopWindow()
> RetVal = GetWindowRect(hWnd, R)
> GetScrRes = (R.x2 - R.x1) & "x" & (R.y2 - R.y1)
>
> End Function
>
> Function GetScrResW() As String
> 'Get Screen Resolution
>
> Dim R As RECT
> Dim hWnd As Long
> Dim RetVal As Long
>
> hWnd = GetDesktopWindow()
> RetVal = GetWindowRect(hWnd, R)
> GetScrResW = (R.x2 - R.x1)
>
> End Function
>
> Function GetScrResH() As String
> 'Get Screen Resolution
>
> Dim R As RECT
> Dim hWnd As Long
> Dim RetVal As Long
>
> hWnd = GetDesktopWindow()
> RetVal = GetWindowRect(hWnd, R)
> GetScrResH = (R.y2 - R.y1)
>
> End Function
>
>
> --------------------------------------------------------------------------
----------------------------------------------------------------------------
---------------
>
> salam,
> exz@nt
>
>
> On 12/16/09, tio.adjie@ptssb.co.id <tio.adjie@ptssb.co.id> wrote:
> > Dear Pakar Access, Pleaaase..
> >
> > ----- Forwarded by Tio Adi Bayu Adjie/SSB/PTTU on 12/16/2009 06:11 PM
> > -----
> >
> >
> > tio.adjie@ptssb.co.id
> > Sent by: belajar-access@yahoogroups.com
> > 12/15/2009 11:53 AM
> > Please respond to belajar-access
> >
> >
> > To: belajar-access@yahoogroups.com
> > cc:
> > Subject: [belajar-access] Resize Form
> >
> >
> >
> > Dear Para Pakar Access,
> >
> > Saya kesulitan untuk me-resize form ketika muncul di komputer client
kalau
> > berbeda resolusinya, atau sebab-sebab lain. Nah saya menyertakan isi
> > module Resize Form yang di ambil dari internet,
> > tapi saya tidak tahu bagaimana cara memanggilnya dari suatu form.
Tolong
> > pencerahannya bagaimana memanggil module tsb dari suatu form. Terima
kasih
> > sebelumya.
> > regards,
> > Tio
> >
> > Ini isi modulenya :
> >
'---------------------------------------------------------------------------
------------
> >
> > ' Module : modResizeForm
> > ' Author : Jamie Czernik BSc {jamie@jamiessoftware.tk}
> > ' Purpose : Resizes Microsoft Access forms to fit the current screen
> > resolution.
> > ' Use : Work on a back-up copy of your application first.
> > ' Change the constant DESIGN_HORZRES to the horizontal
screen
> > resolution
> > ' used when forms were designed. Change the constant
> > DESIGN_VERTRES to the
> > ' vertical screen resolution used when forms were designed.
> > ' Change DESIGN_PIXELS to the DPI used if required.
> > ' Call ResizeForm Me on the onLoad event for each form (even
> > sub forms).
> > ' Bugs: : Tab controls and Option Groups are very difficult to
handle
> > - see comments
> > ' throughout code for more information. Scaling forms up
works
> > much better
> > ' than trying to scale forms down. Scaling down will
probably
> > distrot fronts.
> > ' FIX:- Redesign forms to fit lowest resoltion and scale up
> > instead.
> > ' Continuous sub forms generate random crashes in Access
2002
> > & later - no fix.
> > ' Send bug reports to: jamie@jamiessoftware.tk for future
> > fixes.
> > ' (No immediate support is provided. *Please* check online
> > help, message board
> > ' and latest version at http://www.jamiessoftware.tk before
> > sending bug reports)
> > ' Test: Test your application at each possible screen resolution
> > after installing.
> > ' Please : Consider donating $5 or $10 if you find this code useful
by
> > visiting:-
> > ' http://jamiessoftware.tk/resizeform/rf_download.html
> > ' Credits : This modResizeForm module was created by Jamie Czernik
> > ' Contains improvement suggestions/updates from: Dr. Martin
> > Dumskyj,
> > ' Nathan Carroll, Wilfrid Underwood & Kyle Hughes.
> > ' Contains enhancements which fixed some problems in combo
> > boxes, list
> > ' boxes, and tab controls from: Myke Myers & Chris Garland.
> > ' Updated : April 2006.
> >
'---------------------------------------------------------------------------
------------
> >
> > Option Compare Database
> > Option Explicit
> > '-----------------------------MODULE CONSTANTS &
> > VARIABLES------------------------------
> > Private Const DESIGN_HORZRES As Long = 1024 '<- CHANGE THIS VALUE TO
THE
> > RESOLUTION
> > 'YOU DESIGNED YOUR FORMS
> > IN.
> > '(e.g. 800 X 600 -> 800)
> > Private Const DESIGN_VERTRES As Long = 768 '<- CHANGE THIS VALUE TO
THE
> > RESOLUTION
> > 'YOU DESIGNED YOUR FORMS
> > IN.
> > '(e.g. 800 X 600 -> 600)
> > Private Const DESIGN_PIXELS As Long = 96 '<- CHANGE THIS VALUE TO
> > THE DPI
> > 'SETTING YOU DESIGNED
YOUR
> > FORMS IN.
> > '(If in doubt do not
alter
> > the
> > 'DESIGN_PIXELS setting
as
> > most
> > 'systems use 96 dpi.)
> > Private Const WM_HORZRES As Long = 8
> > Private Const WM_VERTRES As Long = 10
> > Private Const WM_LOGPIXELSX As Long = 88
> > Private Const TITLEBAR_PIXELS As Long = 18
> > Private Const COMMANDBAR_PIXELS As Long = 26
> > Private Const COMMANDBAR_LEFT As Long = 0
> > Private Const COMMANDBAR_TOP As Long = 1
> > Private OrigWindow As tWindow 'Module level variable
> > holds the
> > 'original window
> > dimensions before
> > 'resize.
> >
> > Private Type tRect
> > left As Long
> > Top As Long
> > right As Long
> > bottom As Long
> > End Type
> >
> > Private Type tDisplay
> > Height As Long
> > Width As Long
> > DPI As Long
> > End Type
> >
> > Private Type tWindow
> > Height As Long
> > Width As Long
> > End Type
> >
> > Private Type tControl
> > NAME As String
> > Height As Long
> > Width As Long
> > Top As Long
> > left As Long
> > End Type
> > '-------------------------- END MODULE CONSTANTS &
> > VARIABLES----------------------------
> >
> > '------------------------------------API
> > DECLARATIONS-----------------------------------
> > Private Declare Function WM_apiGetDeviceCaps Lib "gdi32" Alias
> > "GetDeviceCaps" _
> > (ByVal hdc As Long, ByVal nIndex As Long) As Long
> >
> > Private Declare Function WM_apiGetDesktopWindow Lib "user32" Alias
> > "GetDesktopWindow" _
> > () As Long
> >
> > Private Declare Function WM_apiGetDC Lib "user32" Alias "GetDC" _
> > (ByVal hwnd As Long) As Long
> >
> > Private Declare Function WM_apiReleaseDC Lib "user32" Alias "ReleaseDC"
_
> > (ByVal hwnd As Long, ByVal hdc As Long) As Long
> >
> > Private Declare Function WM_apiGetWindowRect Lib "user32.dll" Alias
> > "GetWindowRect" _
> > (ByVal hwnd As Long, lpRect As tRect) As Long
> >
> > Private Declare Function WM_apiMoveWindow Lib "user32.dll" Alias
> > "MoveWindow" _
> > (ByVal hwnd As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As
> > Long, _
> > ByVal nHeight As Long, ByVal bRepaint As Long) As Long
> >
> > Private Declare Function WM_apiIsZoomed Lib "user32.dll" Alias
"IsZoomed"
> > _
> > (ByVal hwnd As Long) As Long
> > '--------------------------------- END API
> > DECLARATIONS----------------------------------
> >
> >
'---------------------------------------------------------------------------
------------
> >
> > ' Procedure : getScreenResolution
> > ' DateTime : 27/01/2003
> > ' Author : Jamie Czernik
> > ' Purpose : Function returns the current height, width and dpi.
> >
'---------------------------------------------------------------------------
------------
> >
> > Private Function getScreenResolution() As tDisplay
> >
> > Dim hDCcaps As Long
> > Dim lngRtn As Long
> >
> > On Error Resume Next
> >
> > 'API call get current resolution:-
> > hDCcaps = WM_apiGetDC(0) 'Get display context for desktop (hwnd =
0).
> > With getScreenResolution
> > .Height = WM_apiGetDeviceCaps(hDCcaps, WM_VERTRES)
> > .Width = WM_apiGetDeviceCaps(hDCcaps, WM_HORZRES)
> > .DPI = WM_apiGetDeviceCaps(hDCcaps, WM_LOGPIXELSX)
> > End With
> > lngRtn = WM_apiReleaseDC(0, hDCcaps) 'Release display context.
> >
> > End Function
> >
> >
'---------------------------------------------------------------------------
------------
> >
> > ' Procedure : getFactor
> > ' DateTime : 27/01/2003
> > ' Author : Jamie Czernik
> > ' Purpose : Function returns the value that the form's/control's
height,
> > width, top &
> > ' left should be multiplied by to fit the current screen
> > resolution.
> >
'---------------------------------------------------------------------------
------------
> >
> > Private Function getFactor(blnVert As Boolean) As Single
> >
> > Dim sngFactorP As Single
> >
> > On Error Resume Next
> >
> > If getScreenResolution.DPI <> 0 Then
> > sngFactorP = DESIGN_PIXELS / getScreenResolution.DPI
> > Else
> > sngFactorP = 1 'Error with dpi reported so assume 96 dpi.
> > End If
> > If blnVert Then 'return vertical resolution.
> > getFactor = (getScreenResolution.Height / DESIGN_VERTRES) *
> > sngFactorP
> > Else 'return horizontal resolution.
> > getFactor = (getScreenResolution.Width / DESIGN_HORZRES) *
> > sngFactorP
> > End If
> >
> > End Function
> >
> >
'---------------------------------------------------------------------------
------------
> >
> > ' Procedure : ReSizeForm
> > ' DateTime : 27/01/2003
> > ' Author : Jamie Czernik
> > ' Purpose : Routine should be called on a form's onOpen or onLoad
event.
> >
'---------------------------------------------------------------------------
------------
> >
> > Public Sub ReSizeForm(ByVal frm As Access.Form)
> >
> > Dim rectWindow As tRect
> > Dim lngWidth As Long
> > Dim lngHeight As Long
> > Dim sngVertFactor As Single
> > Dim sngHorzFactor As Single
> > Dim sngFontFactor As Single
> >
> > On Error Resume Next
> >
> > sngVertFactor = getFactor(True) 'Local function returns vertical
size
> > change.
> > sngHorzFactor = getFactor(False) 'Local function returns horizontal
> > size change.
> > 'Choose lowest factor for resizing fonts:-
> > sngFontFactor = VBA.IIf(sngHorzFactor < sngVertFactor,
sngHorzFactor,
> > sngVertFactor)
> > Resize sngVertFactor, sngHorzFactor, sngFontFactor, frm 'Local
> > procedure to resize form sections & controls.
> > If WM_apiIsZoomed(frm.hwnd) = 0 Then 'Don't change window settings
for
> > max'd form.
> > Access.DoCmd.RunCommand acCmdAppMaximize 'Maximize the Access
> > Window.
> > 'Store for dimensions in rectWindow:-
> > Call WM_apiGetWindowRect(frm.hwnd, rectWindow)
> > 'Calculate and store form height and width in local variables:-
> > With rectWindow
> > lngWidth = .right - .left
> > lngHeight = .bottom - .Top
> > End With
> > 'Resize the form window as required (don't resize this for sub
> > forms):-
> > If frm.Parent.NAME = VBA.vbNullString Then
> > Call WM_apiMoveWindow(frm.hwnd,
((getScreenResolution.Width -
> > _
> > (sngHorzFactor * lngWidth)) / 2) - getLeftOffset, _
> > ((getScreenResolution.Height - (sngVertFactor * lngHeight))
/
> > 2) - _
> > getTopOffset, lngWidth * sngHorzFactor, lngHeight *
> > sngVertFactor, 1)
> > End If
> > End If
> > Set frm = Nothing 'Free up resources.
> >
> > End Sub
> >
> >
'---------------------------------------------------------------------------
------------
> >
> > ' Procedure : Resize
> > ' DateTime : 27/01/2003
> > ' Author : Jamie Czernik
> > ' Purpose : Routine re-scales the form sections and controls.
> >
'---------------------------------------------------------------------------
------------
> >
> > Private Sub Resize(sngVertFactor As Single, sngHorzFactor As Single,
> > sngFontFactor As _
> > Single, ByVal frm As Access.Form)
> >
> > Dim ctl As Access.Control 'Form control variable.
> > Dim arrCtls() As tControl 'Array of Tab and Option Group
> > control properties.
> > Dim lngI As Long 'Loop counter.
> > Dim lngJ As Long 'Loop counter.
> > Dim lngWidth As Long 'Stores form's new width.
> > Dim lngHeaderHeight As Long 'Stores header's new height.
> > Dim lngDetailHeight As Long 'Stores detail's new height.
> > Dim lngFooterHeight As Long 'Stores footer's new height.
> > Dim blnHeaderVisible As Boolean 'True if form header visible before
> > resize.
> > Dim blnDetailVisible As Boolean 'True if form detail visible before
> > resize.
> > Dim blnFooterVisible As Boolean 'True if form footer visible before
> > resize.
> > Const FORM_MAX As Long = 31680 'Maximum possible form width &
> > section height.
> >
> > On Error Resume Next
> >
> > With frm
> > .Painting = False 'Turn off form painting.
> > 'Calculate form's new with and section heights and store in
local
> > variables
> > 'for later use:-
> > lngWidth = .Width * sngHorzFactor
> > lngHeaderHeight = .Section(Access.acHeader).Height *
sngVertFactor
> > lngDetailHeight = .Section(Access.acDetail).Height *
sngVertFactor
> > lngFooterHeight = .Section(Access.acFooter).Height *
sngVertFactor
> > 'Now maximize the form's width and height while controls are
being
> > resized:-
> > .Width = FORM_MAX
> > .Section(Access.acHeader).Height = FORM_MAX
> > .Section(Access.acDetail).Height = FORM_MAX
> > .Section(Access.acFooter).Height = FORM_MAX
> > 'Hiding form sections during resize prevents invalid page fault
> > after
> > 'resizing column widths for list boxes on forms with a
> > header/footer:-
> > blnHeaderVisible = .Section(Access.acHeader).Visible
> > blnDetailVisible = .Section(Access.acDetail).Visible
> > blnFooterVisible = .Section(Access.acFooter).Visible
> > .Section(Access.acHeader).Visible = False
> > .Section(Access.acDetail).Visible = False
> > .Section(Access.acFooter).Visible = False
> > End With
> > 'Resize array to hold 1 element:-
> > ReDim arrCtls(0)
> > 'Gather properties for Tabs and Option Groups to recify height/width
> > problems:-
> > For Each ctl In frm.Controls
> > If ((ctl.ControlType = Access.acTabCtl) Or _
> > (ctl.ControlType = Access.acOptionGroup)) Then
> > With arrCtls(lngI)
> > .NAME = ctl.NAME
> > .Height = ctl.Height
> > .Width = ctl.Width
> > .Top = ctl.Top
> > .left = ctl.left
> > End With
> > lngI = lngI + 1
> > ReDim Preserve arrCtls(lngI) 'Increase the size of the
array.
> > End If
> > Next ctl
> > 'Resize and locate each control:-
> > For Each ctl In frm.Controls
> > If ctl.ControlType <> Access.acPage Then 'Ignore pages in Tab
> > controls.
> > With ctl
> > .Height = .Height * sngVertFactor
> > .left = .left * sngHorzFactor
> > .Top = .Top * sngVertFactor
> > .Width = .Width * sngHorzFactor
> > .FontSize = .FontSize * sngFontFactor
> > 'Enhancement by Myke Myers
> > --------------------------------------->
> > 'Fix certain Combo Box, List Box and Tab control
> > properties:-
> > Select Case .ControlType
> > Case Access.acListBox
> > .ColumnWidths =
adjustColumnWidths(.ColumnWidths,
> > sngHorzFactor)
> > Case Access.acComboBox
> > .ColumnWidths =
adjustColumnWidths(.ColumnWidths,
> > sngHorzFactor)
> > .ListWidth = .ListWidth * sngHorzFactor
> > Case Access.acTabCtl
> > .TabFixedWidth = .TabFixedWidth * sngHorzFactor
> > .TabFixedHeight = .TabFixedHeight *
sngVertFactor
> > End Select
> > '------------------------------------> End enhancement
by
> > Myke Myers.
> > End With
> > End If
> > Next ctl
> > '********************************************************
> > '* Note if scaling form up: If Tab controls or Option *
> > '* Groups are too near the bottom or right side of the *
> > '* form they WILL distort due to the way that Access *
> > '* keeps the child controls within the control frame. *
> > '* Try moving these controls left or up if possible. *
> > '* The opposite is true for scaling down so in this *
> > '* case try moving these controls right or down. *
> > '********************************************************
> > 'Now try to rectify Tabs and Option Groups height/widths:-
> > For lngJ = 0 To lngI
> > With frm.Controls.Item(arrCtls(lngJ).NAME)
> > .left = arrCtls(lngJ).left * sngHorzFactor
> > .Top = arrCtls(lngJ).Top * sngVertFactor
> > .Height = arrCtls(lngJ).Height * sngVertFactor
> > .Width = arrCtls(lngJ).Width * sngHorzFactor
> > End With
> > Next lngJ
> > 'Now resize height for each section and form width using stored
> > values:-
> > With frm
> > .Width = lngWidth
> > .Section(Access.acHeader).Height = lngHeaderHeight
> > .Section(Access.acDetail).Height = lngDetailHeight
> > .Section(Access.acFooter).Height = lngFooterHeight
> > 'Now unhide form sections:-
> > .Section(Access.acHeader).Visible = blnHeaderVisible
> > .Section(Access.acDetail).Visible = blnDetailVisible
> > .Section(Access.acFooter).Visible = blnFooterVisible
> > .Painting = True 'Turn form painting on.
> > End With
> > Erase arrCtls 'Destory array.
> > Set ctl = Nothing 'Free up resources.
> >
> > End Sub
> >
> >
'---------------------------------------------------------------------------
------------
> >
> > ' Procedure : getTopOffset
> > ' DateTime : 27/01/2003
> > ' Author : Jamie Czernik
> > ' Purpose : Function returns the total size in pixels of menu/toolbars
> > at the top of
> > ' the Access window allowing the form to be positioned in
the
> > centre of the
> > ' screen.
> >
'---------------------------------------------------------------------------
------------
> >
> > Private Function getTopOffset() As Long
> >
> > Dim cmdBar As Object
> > Dim lngI As Long
> >
> > On Error GoTo err
> >
> > For Each cmdBar In Application.CommandBars
> > If ((cmdBar.Visible = True) And (cmdBar.Position =
> > COMMANDBAR_TOP)) Then
> > lngI = lngI + 1
> > End If
> > Next cmdBar
> > getTopOffset = (TITLEBAR_PIXELS + (lngI * COMMANDBAR_PIXELS))
> >
> > exit_fun:
> > Exit Function
> >
> > err:
> > 'Assume only 1 visible command bar plus the title bar:
> > getTopOffset = TITLEBAR_PIXELS + COMMANDBAR_PIXELS
> > Resume exit_fun
> >
> > End Function
> >
> >
'---------------------------------------------------------------------------
------------
> >
> > ' Procedure : getLeftOffset
> > ' DateTime : 27/01/2003
> > ' Author : Jamie Czernik
> > ' Purpose : Function returns the total size in pixels of menu/toolbars
> > at the left of
> > ' the Access window allowing the form to be positioned in
the
> > centre of the
> > ' screen.
> >
'---------------------------------------------------------------------------
------------
> >
> > Private Function getLeftOffset() As Long
> >
> > Dim cmdBar As Object
> > Dim lngI As Long
> >
> > On Error GoTo err
> >
> > For Each cmdBar In Application.CommandBars
> > If ((cmdBar.Visible = True) And (cmdBar.Position =
> > COMMANDBAR_LEFT)) Then
> > lngI = lngI + 1
> > End If
> > Next cmdBar
> > getLeftOffset = (lngI * COMMANDBAR_PIXELS)
> >
> > exit_fun:
> > Exit Function
> >
> > err:
> > 'Assume no visible command bars:-
> > getLeftOffset = 0
> > Resume exit_fun
> >
> > End Function
> >
> >
'---------------------------------------------------------------------------
------------
> >
> > ' Procedure : adjustColumnWidths
> > ' DateTime : 27/01/2003
> > ' Author : Myke Myers [Split() replacement for Access 97 by Jamie
> > Czernik]
> > ' Purpose : Adjusts column widths for list boxes and combo boxes.
> > ' Called By : modResize/Resize().
> > ' Event Modification Information:
> > ' 1. Chris Garland 02/07/2006
> > ' The event was modified to check if there is any column size entry,
and
> > if not, the
> > ' property is left blank on the control.
> >
'---------------------------------------------------------------------------
------------
> >
> > Private Function adjustColumnWidths(strColumnWidths As String, sngFactor
> > As Single) As String
> > On Error GoTo Err_adjustColumnWidths
> >
> > Dim astrColumnWidths() As String 'Array to hold the
> > individual column widths
> > Dim strTemp As String 'Holds the recombined
> > columnwidths string
> > Dim lngI As Long 'For Loop counter
> > Dim lngJ As Long 'Columnwidths counter
> >
> > 'Get the column widths:-
> > 'THIS CODE BY JAMIE
> > CZERNIK------------------------------------------->
> > 'Replace the Split() function as not available in Access 97:
> > 'Sets the array to one entry.
> > ReDim astrColumnWidths(0)
> > 'Loops through each character in the Column Widths String passed in
by
> > the calling code.
> > For lngI = 1 To VBA.Len(strColumnWidths)
> > 'Looks for each semicolon, which is what separates the
individual
> > Column Widths.
> > Select Case VBA.Mid(strColumnWidths, lngI, 1)
> > 'If a semicolon is not found, the character is added to the
> > any characters
> > ' already in the columnwidths entry in the array. If it is
> > found, the
> > ' Columnwidths Counter is incremented by one and the array
is
> > increased by
> > ' one while retaining entered data so that the next
> > columnwidth can be entered.
> > Case Is <> ";"
> > astrColumnWidths(lngJ) = astrColumnWidths(lngJ) &
VBA.Mid(
> > _
> > strColumnWidths, lngI, 1)
> > Case ";"
> > lngJ = lngJ + 1
> > ReDim Preserve astrColumnWidths(lngJ) 'Resize the array.
> > End Select
> > Next lngI
> > 'Resets the loop counter to 0.
> > lngI = 0
> > '--------------------------------------------> END CODE BY JAMIE
> > CZERNIK.
> > 'Access 2000/2002 users can uncomment the line below and remove the
> > split() code
> > 'replacement above.
> > 'astrColumnWidths = Split(strColumnWidths, ";")'Available in Access
> > 2000/2002 only
> > strTemp = VBA.vbNullString 'Sets the temp variable to a null string
> > 'Loops through the all the columnwidths in the array, converting
them
> > to the new sizes
> > ' (using the Width Size Conversion Factor that was passed-in), and
> > recombining them
> > ' into a single string to pass back to the calling code. (If there
is
> > no Column Width,
> > ' the value is left blank.)
> > Do Until lngI > UBound(astrColumnWidths)
> > If Not IsNull(astrColumnWidths(lngI)) And astrColumnWidths(lngI)
> > <> "" Then
> > strTemp = strTemp & CSng(astrColumnWidths(lngI)) * sngFactor
&
> > ";"
> > End If
> > lngI = lngI + 1
> > Loop
> > 'Returns the combined columnwidths string to the calling code.
> > adjustColumnWidths = strTemp
> > Erase astrColumnWidths 'Destroy array.
> >
> > Exit_adjustColumnWidths:
> > On Error Resume Next
> > Exit Function
> >
> > Err_adjustColumnWidths:
> > Erase astrColumnWidths 'Destroy array.
> > Resume Exit_adjustColumnWidths
> >
> > End Function
> >
> >
'---------------------------------------------------------------------------
------------
> >
> > ' Procedure : getOrigWindow
> > ' DateTime : 27/01/2003
> > ' Author : Jamie Czernik
> > ' Purpose : Routine stores the original window dimensions before
> > resizing call it
> > ' when form loads. (before calling ResizeForm Me!).
> > ' Call it: Form_Load()
> > ' [More info in "Important Points" - point 5 - in help
file.]
> >
'---------------------------------------------------------------------------
------------
> >
> > Public Sub getOrigWindow(frm As Access.Form)
> >
> > On Error Resume Next
> >
> > OrigWindow.Height = frm.WindowHeight
> > OrigWindow.Width = frm.WindowWidth
> >
> > End Sub
> >
> >
'---------------------------------------------------------------------------
------------
> >
> > ' Procedure : RestoreWindow
> > ' DateTime : 27/01/2003
> > ' Author : Jamie Czernik
> > ' Purpose : Routine restores the original window dimensions call it
when
> > form closes.
> > ' Call it: Form_Close()
> > ' [More info in "Important Points" - point 5 - in help
file.]
> >
'---------------------------------------------------------------------------
------------
> >
> > Public Sub RestoreWindow()
> >
> > On Error Resume Next
> >
> > Access.DoCmd.MoveSize , , OrigWindow.Width, OrigWindow.Height
> > Access.DoCmd.Save
> >
> > End Sub

No comments:

Post a Comment