Beispiel #1
0
BOOL ctl_rfloat_finish( ctl_elt *elt, HANDLE inst, HWND dlg, void *ptr )
/**********************************************************************/
/* end an float field */

{
    float               value;
    char                str[100];
    BOOL                any_max;

    if( !ctl_float_finish( elt, inst, dlg, ptr ) ) {
        return( FALSE );
    }

    value = _value_float( ptr, elt );

    any_max = elt->info.rfloat.max >= elt->info.rfloat.min;
    if( value < elt->info.rfloat.min || ( any_max &&
                                        value > elt->info.rfloat.max ) ) {
        SetFocus( GetDlgItem( dlg, elt->control ) );
        if( any_max ) {
            sprintf( str, "Value must be in the range %.2f to %.2f",
                            elt->info.rfloat.min, elt->info.rfloat.max );
        } else {
            sprintf( str, "Value must be greater than or equal to %.2f",
                                                    elt->info.rfloat.min );
        }

        MessageBox( dlg, str, NULL, MB_APPLMODAL | MB_ICONHAND | MB_OK );

        return( FALSE );
    }

    return( TRUE );
}
Beispiel #2
0
static bool ctl_rfloat_finish( ctl_elt *elt, WPI_INST inst, HWND dlg,
                               void *ptr, finish_type ___f )
/****************************** ************************************/
/* end an float field */
{
    float               value;
    char                str[100];
    bool                any_max;

    if( !ctl_float_finish( elt, inst, dlg, ptr, ___f ) ) {
        return( false );
    }

    value = _value_float( ptr, elt );

    any_max = ( elt->info.rfloat.max >= elt->info.rfloat.min );
    if( value < elt->info.rfloat.min || (any_max && value > elt->info.rfloat.max) ) {
        SetFocus( GetDlgItem( dlg, elt->control ) );
        if( any_max ) {
            sprintf( str, "Value must be in the range %.2f to %.2f",
                     elt->info.rfloat.min, elt->info.rfloat.max );
        } else {
            sprintf( str, "Value must be greater than or equal to %.2f",
                     elt->info.rfloat.min );
        }

        MessageBox( dlg, str, NULL, MB_APPLMODAL | MB_ICONHAND | MB_OK );

        return( false );
    }

    return( true );
}
Beispiel #3
0
static BOOL ctl_float_start( ctl_elt *elt, WPI_INST inst, HWND dlg,
                             void *ptr, BOOL ___b )
/*****************************************************************/
/* start a float field */
{
    char                buf[50];
    char                *str;
    int                 dec;
    float               value;

    inst = inst;

    value = _value_float( ptr, elt );
    sprintf( buf, "%f", value );
    for( str = buf + strlen( buf ) - 1; *str == '0'; --str );
    for( dec = 0; *str != '.'; --str, ++dec );
    if( dec < 2 ) {
        dec = 2;
    }

    sprintf( buf, "%-.*f", dec, value );

    SetDlgItemText( dlg, elt->control, buf );

    return( TRUE );
}
Beispiel #4
0
static bool ctl_float_finish( ctl_elt *elt, WPI_INST inst, HWND dlg,
                              void *ptr, finish_type ___f )
/******************************************************************/
/* end a float field */
{
    char                str[50];
    float               value;

    ___f=___f;
    inst = inst;

    GetDlgItemText( dlg, elt->control, str, 50 );
    str[49] = '\0';

    if( 1 == sscanf( str, "%f", &value ) ) {
        _value_float( ptr, elt ) = value;
    } else {
        SetFocus( GetDlgItem( dlg, elt->control ) );
        MessageBox( dlg, "Invalid value: please re-enter it", NULL,
                    MB_APPLMODAL | MB_ICONHAND | MB_OK );
        return( false );
    }

    return( true );
}