WJG (07/Apr/06) In spite of the title, this is not about the joys of wakky-bakky -sorry :-) However, it does gives some sort of elevated joy to those of us who clutter up our GUIs with lots of palettes and floating stuff. Rather than having the window temporarily iconized to the task bar we can 'roll them up'. To achieve this simply intercept the WM_DELETE_WINDOW event on the floating palette and then resize the window. A checkbutton allows the user to determine wether or not to display the palette but this could also be achieved under menu control.

 #---------------
 # rollup.tcl
 #---------------
 # Created by William J Giddings
 # 7/Apr/2006
 #---------------
 #
 # Function:
 # Provide MS Windows palette with a roll-up behaviour.
 #
 # Notes:
 # If the palette is created as withdrawn it will never appear.
 # So, the work-around has been to create the palette as a normal
 # toplevel window and then to modify its transient setting on display/hiding.
 # Version of Tcl/Tk used for development = 8.4.12
 #---------------


 #---------------
 # determine wether or not to roll-up or roll-down
 # called when the close-button is picked
 #---------------
 proc palette:state {w} {
   if {[set ${w}::state]} {
     # roll-up
     set ${w}::height [winfo height $w]
     wm geometry $w [winfo width $w]x0
     set ${w}::state 0
     wm resizable $w 0 0
   } else {
     # roll-down
     wm geometry $w [winfo width $w]x[set ${w}::height]  
     set ${w}::state 1
     wm resizable $w 1 1   
   }
 }

 #---------------
 # determine wether or not to display the palette
 # called by the toolbar button
 #---------------
 proc palette:show {w b} {
   if {[set ${w}::show]} {
     # show it
     wm deiconify $w 
     wm transient $w [winfo toplevel $b]
   } else {
     # hide it
     wm transient $w
     wm withdraw $w
   }
 }

 #---------------
 # create button and palette
 #---------------
 proc palette {b w txt} {

   # namespace to hold palette info
   namespace eval $w {
     set state 1
     set show 0
   }

   # button to toggle the display of the palette
   checkbutton $b \
     -indicatoron 0 \
     -text $txt \
     -borderwidth 1 \
     -overrelief raised \
     -relief flat \
     -command "palette:show $w $b" \
     -variable ${w}::show

   # build the basic palette and configure
   toplevel $w
   wm withdraw $w
   # this is a problem, allow here then for some 
   # reason the palette will never appear!
   #wm transient $w [winfo toplevel $b]
   wm protocol $w WM_DELETE_WINDOW "palette:state $w" 

   return $b
 }

 # a simple example
 # create palette and button
 pack [palette .pb1 .p1 Palette-1] -side left  -anchor nw
 pack [palette .pb2 .p2 Palette-2] -side left  -anchor nw