Difference between revisions of "ReNamer:Pascal Script:Dialogs"
m (Text replacement - "<source>" to "<syntaxhighlight lang="pascal">") |
|||
(11 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
+ | {{Up|ReNamer:Pascal Script}} | ||
+ | |||
==Interactive dialogs or How to let user decide== | ==Interactive dialogs or How to let user decide== | ||
Sometimes we need to ask the user for data or inform him about something. In that case we need an interactive dialog. | Sometimes we need to ask the user for data or inform him about something. In that case we need an interactive dialog. | ||
− | The simplest one is | + | ====Informative dialogs==== |
− | + | The simplest one is '''WideShowMessage'''(const Msg: String) procedure that takes a string and displays it as a small popup window with OK button. | |
− | |||
− | |||
− | |||
− | + | <syntaxhighlight lang="pascal"> | |
+ | WideShowMessage('That''s a message for you!'); | ||
+ | </syntaxhighlight> | ||
− | + | If you know that the string will contain only ANSI characters you may use '''ShowMessage'''(const Msg: WideString) procedure instead. | |
− | + | ====Asking user for data==== | |
+ | There are several dialogs to ask user for data: | ||
− | + | {| class="wikitable" | |
+ | |- | ||
+ | |function '''DialogYesNo'''(const Msg: String): Boolean; | ||
+ | |- | ||
+ | |function '''InputBox'''(const ACaption, APrompt: String; var Value: String): Boolean; | ||
+ | |- | ||
+ | |function '''InputQuery'''(const ACaption, APrompt: String; var Value: String): Boolean; | ||
+ | |- | ||
+ | |function '''WideInputBox'''(const ACaption, APrompt: String; var Value: String): Boolean; | ||
+ | |- | ||
+ | |function '''WideInputQuery'''(const ACaption, APrompt: String; var Value: String): Boolean; | ||
+ | |} | ||
− | ' | + | Let's take a look on some of them. |
− | |||
− | + | '''DialogYesNo''' function takes a message string and lets user to choose between YES and NO buttons to click. It returns True if YES was choosen and False otherwise. | |
− | < | + | <syntaxhighlight lang="pascal"> |
begin | begin | ||
+ | if DialogYesNo('This filename "'+FileName+'" looks bad.'+#13+ | ||
+ | 'I would prefer to name that file "Very Important File.txt". '+#13#13+'Do you agree?') then | ||
+ | FileName := 'Very Important File.txt'; | ||
+ | end. | ||
+ | </syntaxhighlight> | ||
− | + | The code above shows two important things about string constants. First is that you need to use '''#13''' (or '''#10''' or '''#13#10''') to break the line. And second that you need to escape every <nowiki>'</nowiki> by doubling it (<nowiki>''</nowiki>). So if you want to start a string constant with <nowiki>'</nowiki> you will need three of them <nowiki>'''</nowiki> ! | |
− | |||
− | |||
− | |||
− | |||
− | + | '''WideInputQuery''' is the most powerful dialog. It takes two string constants (a caption of the popup window and a prompt, in which you can explain what kind of data you are expecting from the user). The third parameter is a WideString variable Value that will return user text input back to you. The current content of the Value variable is displayed in the input text box as the default value. | |
+ | Apart from that the InputQuery function will return True if OK button was pressed and False otherwise. | ||
− | + | <syntaxhighlight lang="pascal"> | |
− | |||
− | < | ||
var | var | ||
− | Value: | + | Value: WideString; |
− | |||
begin | begin | ||
− | Value:='Meaningless filename.txt'; | + | Value := 'Meaningless filename.txt'; |
− | + | if WideInputQuery('Incorrect filename', | |
− | + | 'I am not able to produce any meaningful filename!'+ | |
− | FileName:=Value; | + | ' Would you mind giving it manually?', Value) then FileName := Value; |
end. | end. | ||
− | </ | + | </syntaxhighlight> |
+ | |||
+ | [[Category:ReNamer]] | ||
+ | [[Category:Pascal Script]] |
Latest revision as of 15:03, 8 February 2017
Interactive dialogs or How to let user decide
Sometimes we need to ask the user for data or inform him about something. In that case we need an interactive dialog.
Informative dialogs
The simplest one is WideShowMessage(const Msg: String) procedure that takes a string and displays it as a small popup window with OK button.
WideShowMessage('That''s a message for you!');
If you know that the string will contain only ANSI characters you may use ShowMessage(const Msg: WideString) procedure instead.
Asking user for data
There are several dialogs to ask user for data:
function DialogYesNo(const Msg: String): Boolean; |
function InputBox(const ACaption, APrompt: String; var Value: String): Boolean; |
function InputQuery(const ACaption, APrompt: String; var Value: String): Boolean; |
function WideInputBox(const ACaption, APrompt: String; var Value: String): Boolean; |
function WideInputQuery(const ACaption, APrompt: String; var Value: String): Boolean; |
Let's take a look on some of them.
DialogYesNo function takes a message string and lets user to choose between YES and NO buttons to click. It returns True if YES was choosen and False otherwise.
begin
if DialogYesNo('This filename "'+FileName+'" looks bad.'+#13+
'I would prefer to name that file "Very Important File.txt". '+#13#13+'Do you agree?') then
FileName := 'Very Important File.txt';
end.
The code above shows two important things about string constants. First is that you need to use #13 (or #10 or #13#10) to break the line. And second that you need to escape every ' by doubling it (''). So if you want to start a string constant with ' you will need three of them ''' !
WideInputQuery is the most powerful dialog. It takes two string constants (a caption of the popup window and a prompt, in which you can explain what kind of data you are expecting from the user). The third parameter is a WideString variable Value that will return user text input back to you. The current content of the Value variable is displayed in the input text box as the default value.
Apart from that the InputQuery function will return True if OK button was pressed and False otherwise.
var
Value: WideString;
begin
Value := 'Meaningless filename.txt';
if WideInputQuery('Incorrect filename',
'I am not able to produce any meaningful filename!'+
' Would you mind giving it manually?', Value) then FileName := Value;
end.