version 3
MESSAGE (message)
| Parameter | Type | Description | |
| message | String | Message to display |
Description
The MESSAGE command is usually used to inform the user of some activity. It displays message on the screen in a special message window that opens and closes each time you call MESSAGE, unless you work with a window you previously opened using Open window (see the following details). The message is temporary and is erased as soon as a form is displayed or the method stops executing. If another MESSAGE is executed, the old message is erased.
If a window is opened with Open window, all subsequent calls to MESSAGE display the messages in that window. The window behaves like a terminal:
Successive messages do not erase previous messages when displayed in the window. Instead, they are concatenated onto existing messages.
If a message is wider than the window, 4th Dimension automatically performs text wrap.
If a message has more lines than the window, 4th Dimension automatically scrolls the message window.
To control line breaks, include carriage returns Char(13) into your message.
To display the text at a particular place in the window, call GOTO XY.
To erase the contents of the window, call ERASE WINDOW .
The window is only an output window and does not redraw when other windows overlap it.
4th Dimension uses the Message Font and Message Font Size properties to display messages. You can change these settings in the Preferences dialog box:
You can choose the font and the font size (within limits) at your convenience. However, if you combine the use of MESSAGE and GOTO XY, it is a good idea to choose a fixed width font, such as Terminal on Windows or Monaco on Macintosh.
Examples
1. The following example processes a selection of records and calls MESSAGE to inform the user about the progress of the operation:
For($vlRecord;1;Records in selection([anyTable]))
MESSAGE ("Processing record #"+String($vlRecord))
` Do Something with the record
NEXT RECORD([anyTable])
End for
The following window appears and disappears at each MESSAGE call:
2. In order to avoid this "blinking" window, you can display the messages in a window opened using Open window, as in this example:
Open window(50;50;500;250;5;"Operation in Progress")
For($vlRecord;1;Records in selection([anyTable]))
MESSAGE ("Processing record #"+String($vlRecord))
` Do Something with the record
NEXT RECORD([anyTable])
End for
CLOSE WINDOW
This provides the following result (shown here on Macintosh):
3. Adding a carriage return makes a better presentation:
Open window(50;50;500;250;5;"Operation in Progress")
For($vlRecord;1;Records in selection([anyTable]))
MESSAGE ("Processing record #"+String($vlRecord)+Char(13))
` Do Something with the record
NEXT RECORD([anyTable])
End for
CLOSE WINDOW
This provides the following result (shown here on Macintosh):
4. Using GOTO XY and writing some additional lines:
Open window(50;50;500;250;5;"Operation in Progress")
$vlNbRecords:=Records in selection([anyTable])
$vhStartTime:=Current time
For($vlRecord;1;$vlNbRecords)
GOTO XY(5;2)
MESSAGE ("Processing record #"+String($vlRecord)+Char(13))
` Do Something with the record
NEXT RECORD([anyTable])
GOTO XY(5;5)
$vlRemaining:=(($vlNbRecords/$vlRecord)-1)*(Current time-$vhStartTime)
MESSAGE ("Estimated remaining time: "+Time string($vlRemaining))
End for
CLOSE WINDOW
This provides the following result (shown here on Windows):
See Also
CLOSE WINDOW, ERASE WINDOW, GOTO XY, Open window.