?
Solved

Masked Edit Box

Posted on 2001-07-23
4
Medium Priority
?
233 Views
Last Modified: 2012-05-04
Hi.  
Does anybody know why the MaskEdBox control in VB 6 SP 5 doesn't seem to be locale aware?  I have it
in my app with the format property = $##,0.00;($#,##0.00).  I also use code to set formats such as

label1.caption = formatcurrency(rate.text)

The code works fine - when I change my regional settings and reboot the machine the label reflects the
local currency, date/time, etc formats.  However, the maskedbox control always gives the "$" symbol
rather than the regional currency symbol.  Does anybody know if this is a known issue and/or if there
is a workaround?

Worst case I suppose I could pull the maskedbox controls out and format the textboxes through code.
 Seems strange the folks in Redmond would miss this one...
0
Comment
Question by:jmerritt
4 Comments
 
LVL 18

Expert Comment

by:deighton
ID: 6308371
Private Sub Command1_Click()
MaskEdBox1.Mask = getmask
End Sub

'in a bas module

Option Explicit

Public Type CURRENCYFMT
    NumDigits As Long
    LeadingZero As Long
    Grouping As Long
    lpDecimalSep As String
    lpThousandSep As String
    NegativeOrder As Long
    PositiveOrder As Long
    lpCurrencySymbol As String
End Type
Public Declare Function GetCurrencyFormat Lib "kernel32.dll" Alias "GetCurrencyFormatA" _
    (ByVal Locale As Long, ByVal dwFlags As Long, ByVal lpValue As String, lpFormat _
    As Any, ByVal lpCurrencyStr As String, ByVal cchCurrency As Long) As Long
Const LOCALE_USER_DEFAULT = &H800
Const LOCALE_SYSTEM_DEFAULT = &H400


Function getmask() As String
Dim cft As CURRENCYFMT     ' custom formatting settings
Dim formatted As String  ' receives the formatted number strings
Dim strlen As Long       ' the length of the formatted string
Dim c As Long

' Display the value formatted according to the current locale.
formatted = Space(256)
strlen = GetCurrencyFormat(LOCALE_SYSTEM_DEFAULT, 0, "1234567.89", ByVal CLng(0), _
    formatted, Len(formatted))
formatted = Left(formatted, strlen)
For c = 1 To Len(formatted)
    getmask = getmask & IIf(IsNumeric(Mid(formatted, c, 1)), "#", Mid(formatted, c, 1))
Next

Debug.Print "User locale format: "; formatted

End Function
0
 
LVL 15

Expert Comment

by:lyonst
ID: 6308373
Hi,

Have you checked your Autoexec.bat or Config.sys files as these values can also be ste there any may overide your regional settings ?

Cheers,

T.
0
 
LVL 49

Expert Comment

by:DanRollins
ID: 7156370
Hi jmerritt,
It appears that you have forgotten this question. I will ask Community Support to close it unless you finalize it within 7 days. I will ask a Community Support Moderator to:

    Refund points and save as a 0-pt PAQ.
    *** deighton's code is good, but not on point.

jmerritt, Please DO NOT accept this comment as an answer.
EXPERTS: Post a comment if you are certain that an expert deserves credit.  Explain why.
==========
DanRollins -- EE database cleanup volunteer
0
 
LVL 1

Accepted Solution

by:
Computer101 earned 0 total points
ID: 7182232
Placed in PAQ

Computer101
E-E Moderator
0

Featured Post

[Webinar On Demand] Database Backup and Recovery

Does your company store data on premises, off site, in the cloud, or a combination of these? If you answered “yes”, you need a data backup recovery plan that fits each and every platform. Watch now as as Percona teaches us how to build agile data backup recovery plan.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article describes some techniques which will make your VBA or Visual Basic Classic code easier to understand and maintain, whether by you, your replacement, or another Experts-Exchange expert.
You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…
Suggested Courses
Course of the Month12 days, 18 hours left to enroll

580 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question