On Mon, Sep 5, 2016 at 3:03 PM, Robby Findler <ro...@eecs.northwestern.edu> wrote:
> I haven't seen buttons in spreadsheet cells in excel, but maybe I'm > taking your words too literally? > Ah, sorry, I phrased that poorly. I'm thinking of things like the header on a column, which you can click to make it sort that column. > Have you considered using canvas% objects instead of buttons? They > should give you the flexibility you're after. > I hadn't. Thanks, that's a good idea. I've been playing with it yesterday and today and having better success, although still not total. Dave > > Robby > > On Mon, Sep 5, 2016 at 4:23 PM, David Storrs <david.sto...@gmail.com> > wrote: > > How do I find the actual minimum size of a GUI control (e.g. a button) > > without the space around it? > > > > > > I'm on OSX 10.11. I'm working on a spreadsheet application, and my > current > > plan is to have each cell be represented as a separate text control.[1] > I > > need to have these controls be in contact with one another the way they > are > > in Excel or any other spreadsheet. (That is, there is no empty space > > between the controls.) By default Racket wants to put significant space > > between controls and I've been unable to figure out how to stop this in a > > clean, cross-platform way. > > > > Here's what I've tried: > > > > (define frame (new frame% [label "Example"])) > > (define panel (new horizontal-panel% [parent frame])) > > (define left-btn (new button% [parent panel] [label "Left"])) > > (define right-btn (new button% [parent panel] [label "Right"])) > > (define (shrinkwrap c) > > (send c horiz-margin 0) > > (send c vert-margin 0)) > > (void (map shrinkwrap (list left-btn right-btn panel))) > > (for ((c (list panel frame))) > > (send c spacing 0)) > > ;; These won't work because get-min-graphical-size is 84 and will > trump > > the requested size > > (send left-btn min-width 70) > > (send right-btn min-width 70) > > > > (send frame show #t) > > > > This shows the frame with two buttons arranged horizontally. There is > > significant space around each button and between the two buttons. I want > > there to be no space between them. > > > > > > Both the left and right buttons have minimum graphical sizes of (84,32), > as > > shown by: > > (begin > > (define-values (w h) (send left-btn get-graphical-min-size)) > > (displayln > > (format "left button min w/h: ~a,~a" w h))) > > ;; Same for right-btn > > > > A quick test shows that I can get the behavior I need by overriding > > place-children: > > > > (define squishable-panel% > > (class horizontal-panel% > > (define/override (place-children info w h) > > (displayln "Called place-children") > > '((0 0 70 20) (70 0 70 20))) > > (super-new))) > > (define panel (new squishable-panel% [parent frame])) > > ;; ...all other declarations stay the same... > > > > The problem is that I got the above numbers by experimentation. > > get-graphical-min-size returns the size *with* the spacing that I'm > trying > > to get rid of, which defeats the purpose. (Also, why?? That's not the > size > > of the button, it's the size of the button plus some extra space.) I > don't > > see a clean way to go from the GMS to the actual minimum size when > dealing > > with cross-platform size differences and the fact that Windows is > > pixel-based and OSX is drawing-unit-based. > > > > Any suggestions? > > > > > > Dave > > > > [1] I may need to do some optimizations later instead of representing > empty > > cells as controls, but that's for later. > > > > -- > > You received this message because you are subscribed to the Google Groups > > "Racket Users" group. > > To unsubscribe from this group and stop receiving emails from it, send an > > email to racket-users+unsubscr...@googlegroups.com. > > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to racket-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.