"Plattner, Dankwart" <[email protected]> wrote:
> I'm wondering whether one can use macros in S8-dialog windows. What
> I want to do is to manipulate the string shown by a dialog control
> (preferably, a text control, but it could also be an edit control)
> depending on the choice the user made in a radio control group or a
> FILE control. Obviously that's not possible within the dialog,
> because one cannot use string functions there. Therefore I transfer
> the value associated with the radio/file controls to an ado-file,
> where the string is manipulated. But how to make the dialog
> understand the macros generated by the ado? I tried the
> EDIT-control, but it accepts global macros only as a one-time
> default. Any suggestions would be greatly appreciated!
I have to admit I am a bit mystified as to what you are actually
trying to do here. It sounds as complicated as anything
I've written into the dialogs, and I wrote a lot!
I'll take a stab at this anyhow.
It seems to me you want to change text on a control based on
the state of a radio button or a file control. I programmed
both of these things into a "sample dialog" which I will
include below. You can change text via a trip through some
ado code too -- this is how you can access macros. I programmed
this into the checkbox on the dialog
I named my dialog dlgtest.dlg, and my ado program dlgtest.ado.
If you save these out as dlgtest.dlg and dlgtest.ado in your
adopath, you can invoke the dialog with -db dlgtest-. Play
with it and have a look at the code. I tried to include
one or two helpful comments to explain what was going on.
Please also note that whatever control is changed last governs
the label for tx_label.
--- begin dlgtest.dlg --------------------------------------------
/*
dlgtest - fiddle around with label changing
VERSION 1.0.0 24mar2003
*/
VERSION 8.0
POSITION . . 400 300
OK ok1, label("OK")
CANCEL can1, label("Cancel")
SUBMIT sub1, label("Submit")
HELP hlp1, view("help dialog")
RESET res1
DIALOG main, label("dlgtest - fiddle with label changing") /*
*/ tabtitle("Main")
BEGIN
/*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+*/
TEXT tx_file 10 10 380 ., /*
*/label("Choose a file:")
FILE fi_file @ +20 @ ., /*
*/label("Browse...") error("Saved graph") /*
*/filter("Stata Graphs (*.gph)|*.gph|All Files (*.*)|*.*")/*
*/ defext(gph) onchange("script file_chg")
/* Since rb_one is on when the dialog starts up, it governs the
* initialization behavior of tx_label.
*/
RADIO rb_one @ +40 @ ., /*
*/label("Radio button one") first onclickon(program one_on)
RADIO rb_two @ +20 @ ., /*
*/label("Radio button two") last onclickon(program two_on)
CHECKBOX ck_ado @ +40 @ ., /*
*/label("Change via ado code to:") onclickon(program ado_on)
TEXT tx_ado @ +20 @ ., /*
*/label(`""Whatever text you want " followed by the filename"')
TEXT tx_ado2 @ +20 @ ., /*
*/label("in the file chooser above.")
TEXT tx_label @ +40 @ ., /*
*/label("Change my label!")
END
PROGRAM ado_on
BEGIN
put "dlgtest "
put `""Whatever text you want ""'
put main.fi_file
stata
END
PROGRAM one_on
BEGIN
call gaction main.tx_label.setlabel "Change me."
END
PROGRAM two_on
BEGIN
call gaction main.tx_label.setlabel "Label according to Radio button two."
END
SCRIPT file_chg
BEGIN
main.fi_file.withvalue main.tx_label.setlabel `"Label is file @"'
END
/* A public service announcement since this is just a test */
PROGRAM command
BEGIN
put "Enjoy your commute, ride your bike to work!"
END
---end dlgtest.dlg -----------------------------------------------
---begin dlgtest.ado ---------------------------------------------
program define dlgtest
version 8
args string1 filename
local newlabel "`string1' `filename'"
/* this next uses the class system to set the label */
.dlgtest_dlg.main.tx_label.setlabel `"`newlabel'"'
/* the dlgtest_dlg names and defines the object
-- dlgtest which is a dialog.
main is the name of the tab in dialog dlgtest
tx_label is the control in the main tab
setlabel is what I want to do to tx_label
*/
end
---end dlgtest.ado -----------------------------------------------
Hope that helps!
--Jean Marie with a bunch of help from --Alan
[email protected] [email protected]
*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/