home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #30 / NN_1992_30.iso / spool / comp / lang / tcl / 2114 < prev    next >
Encoding:
Text File  |  1992-12-15  |  2.7 KB  |  84 lines

  1. Newsgroups: bnr.lang.tcl,comp.lang.tcl
  2. Path: sparky!uunet!cs.utexas.edu!torn!nott!bnrgate!bcars6a8!bnr.ca!norm
  3. From: norm@bnr.ca (Norm MacNeil)
  4. Subject: toplevel message widgets problem
  5. Message-ID: <1992Dec15.233825.18609@bcars6a8.bnr.ca>
  6. Sender: usenet@bcars6a8.bnr.ca (Use Net)
  7. Nntp-Posting-Host: bcarh1ff
  8. Reply-To: norm@bnr.ca
  9. Organization: Bell-Northern Research Ltd.
  10. Date: Tue, 15 Dec 1992 23:38:25 GMT
  11. Lines: 71
  12.  
  13. I wanted to be able to put up a "dialog" box with a message (like "Processing -
  14. Please wait...") and then allow the program to continue on until such time as
  15. the internal processing was complete at which time the message box would
  16. disappear.  So I wrote a little procedure...
  17.  
  18. proc MsgCntl {Op Msg} {
  19.   if {$Op == "END"} {
  20.     catch {destroy .MsgCntl}
  21.   } else {
  22.   # Update any existing windows before continuing...
  23.     update
  24.  
  25.   # Determine the size and placement of the window
  26.     global .
  27.  
  28.     set WinHeight 175
  29.     set WinWidth  350
  30.  
  31.   # Center the box in the existing "." window
  32.     set WinX [expr {([winfo width  .]/2)-($WinWidth/2)+[winfo x .]}]
  33.     set WinY [expr {([winfo height .]/2)-($WinHeight/2)+[winfo y .]}]
  34.  
  35.   # Create the toplevel window
  36.     toplevel .MsgCntl -class MsgCntl
  37.     wm geometry .MsgCntl ${WinWidth}x${WinHeight}+${WinX}+${WinY}
  38.     wm title .MsgCntl "Message"
  39.     wm iconname .MsgCntl "Msg"
  40.  
  41.   # Create a dummy frame
  42.     frame .MsgCntl.top -borderwidth 3 -relief raised
  43.  
  44.   # Create the message widget
  45.     message .MsgCntl.top.msg -justify center
  46.     .MsgCntl.top.msg configure -text [join $Msg]
  47.     pack append .MsgCntl.top .MsgCntl.top.msg {top expand fill}
  48.     pack append .MsgCntl .MsgCntl.top {top expand fill}
  49.  
  50.   # Now show the message window
  51.     update
  52.  
  53.   # Now bind all actions to this window
  54.     focus .MsgCntl
  55.     bind .MsgCntl <Visibility> {grab .MsgCntl; focus .MsgCntl}
  56.     grab .MsgCntl
  57.   }
  58.  
  59. }
  60.  
  61.  
  62. So in the program, it would be used like...
  63.  
  64. MsgCntl BEGIN "Processing - please wait..."
  65. #life happens here
  66. MsgCntl END ""
  67.  
  68. Anyway, sometimes the text appears in the message window and sometimes it
  69. doesn't.  The above code is littled hacked up from the number of iterations of
  70. trying to get this to work.  One test, I got the message windows to display the
  71. text, exited from the program, and restarted it, and this time the text did NOT
  72. appear so I know it's not from code-fiddling.
  73.  
  74. What gives on the apparent inconsistency in displaying the text?
  75.  
  76. Thanks much in advance,
  77.   Norm.
  78. -- 
  79. +-----------------------------------------------------------------------+
  80.  Norm MacNeil                     Phone: (613) 763-7497
  81.  Data Systems                     Fax:   (613) 765-2854
  82.  Bell-Northern Research Ltd.      EMail: norm@bnr.ca (INTERNET)
  83.  #include <disclaimer.std>       "Roller bladers do it in-line!"
  84.