I don't like the way the ui_get_date() function works in v6/7 because it (a) requires the user to type the separator characters (a step backward from previous versions) and (b) that function has never allowed for more than one line of prompt text.
Below is an xdialog solution. (Unfortunately it will lose its formatting when posted here. If you want a really good formatter to fix it, try the AIMS Script Formatter - it's free.)
I've also attached a couple sample screenshots.
Below is an xdialog solution. (Unfortunately it will lose its formatting when posted here. If you want a really good formatter to fix it, try the AIMS Script Formatter - it's free.)
I've also attached a couple sample screenshots.
Code:
'Date Created: 14-Feb-2005 03:17:08 PM 'Last Updated: 19-Oct-2006 02:38:05 PM 'Created By : Cal 'Updated By : Cal 'SAMPLES - Can be unremmed to test function here but should be remmed before using the function from other scripts. ' 'in_text = <<%list% 'This is some very long text that I want to display on the form and it will hopefully need to be word wrapped. ' 'Then i want to display something else that will also take up multiple lines when it is displayed when it is displayed. '%list% 'ui_msg_box( "", dtoc( AIMS_Get_date("ENTER NEW COMPLETION DATE", in_text, date()) )) ' 'in_text = "This is the result with short text." 'ui_msg_box( "", dtoc( AIMS_Get_date( "ENTER NEW COMPLETION DATE", in_text, date()) )) '****NOTE**** Do not create a new line in a crlf string unless you want to force a new line in the display. FUNCTION AIMS_Get_date as D ( Title_in as C, Prompt_in="" as C, Deflt_dt as A ) 'Set date val. DIM dt1 as D ON ERROR goto Is_char dt1 = Deflt_dt GOTO Start_calcs Is_char: dt1 = ctod( deflt_dt ) Start_calcs: '-------------------------------------------------------------------- 'Determine width of display box. '-------------------------------------------------------------------- 'Set title width. (assume all caps) wsizet = len( trim( title_in ) ) * 2 wsize = wsizet 'Set base line count. ln_cnt = line_count( prompt_in ) 'Set a line count based on lines plus divide long lines into 90 char chunks. text_lines = 0 blank_lines = 0 max_line = 0 FOR qx = 1 to ln_cnt this_line = word( prompt_in, qx, crlf() ) line_len = len(trim( this_line )) IF line_len + 5 > wsize wsize = line_len + 5 END IF IF line_len > 90 wsize = 90 text_lines = text_lines + ceiling( len(trim( this_line ))/90 ) max_line = 90 ELSEIF this_line = "" blank_lines = blank_lines + 1 ELSE text_lines = text_lines + 1 IF line_len > max_line max_line = line_len END IF END IF NEXT IF ln_cnt = 0 'No prompt so just make it long enough to handle the title. wsize = len( trim( prompt_in ) ) * 1.15 'Add a bit because different fonts react differently. END IF 'Try to make sure the whole title shows up. IF wsizet > wsize 'only happen if wsizet > 90 wsize = wsizet END IF IF (text_lines + blank_lines) > ln_cnt ln_cnt = text_lines + blank_lines END IF '-------------------------------------------------------------------- ' Display it. '-------------------------------------------------------------------- dlg_text = <<%dlg% {can_exit=ESC} {ysize=.3}{units=F}{sp}; {region} {frame=1,5} {text=twidth,tlines:Prompt_in};{sp}; [%DATE;P=popup.calendar(dtoc(dt1));I=popup.calendar%.17,1dt1!dt1_*];{lf}; {endregion} {sp}{sp}{sp} {region} {sp};{sp}; <*12OK>; <12Cancel> {endregion}; %dlg% dlg_text = stritran( dlg_text, "tlines", ltrim( str( ln_cnt ) ) ) dlg_text = stritran( dlg_text, "twidth", ltrim( str( wsize ) ) ) DIM dlg_result as C dlg_result = ui_dlg_box( Title_in, dlg_text, <<%code% IF a_dlg_button = "ESC" a_dlg_button = "" END IF IF left( a_dlg_button, 4 ) = "dt1_" IF a_dlg_button = "dt1_killfocus" dt1 = ctod( dtoc( dt1 ) ) END IF a_dlg_button = "" END IF %code% ) IF dlg_result <> "OK" AIMS_Get_date = {} ELSE AIMS_Get_date = dt1 END IF END FUNCTION 'AIMS_Get_date
Comment