Announcement

Collapse
No announcement yet.

Option and TAB Conflict?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Jeff Blakeney
    replied
    Gary, you are doubling up on the code blocks. In your last post, you can clearly see that there are two boxes both preceded by the word "Code:". The reason the second one didn't have a second scroll bar is that the line was too short. If you put in:

    [ CODE ]
    [ CODE ]
    This is a really long test line to make the code window have a scroll bar at the bottom for testing purposes.
    [ /CODE ]
    [ /CODE ]

    you will get:

    Code:
    [CODE]
    This is a really long test line to make the code window have a scroll bar at the bottom for testing purposes.
    [/CODE]

    As to the original topic of this thread. I'm thinking that in your original code, something probably has a %WS_GROUP style by default and without that style added to the option button, it thinks it is part of the currently defined group and Windows is possibly treating the other controls as option buttons and trying to clear their state which could lead to your program going off into space.

    Someone mentioned that this doesn't happen with SDK code but I'm not sure the DDT and SDK equivalents have the same default styles. Someone would have to check on that to be sure they were both doing the same thing.

    Leave a comment:


  • Gary Beene
    replied
    Interesting Chris ... so we're still left to wonder why it freezes in a DDT dialog, and why only with a TAB control.

    MCM, I don't know how I did that double-scroll thing. All I ever do is cut/paste and hit the code button. Does double [code] do that?

    Code:
    [code]is this double scrolled
    [/code]

    ?Nope - that didn't double scroll - but I'll watch and try to catch how it happened the next time it pops up.

    Mike - did you mean the All 21 snippet? If so, I'm pretty sure I can make it work without a PBR. Let me know if that's what you wanted.

    Rodney - I always hate it when Help says something like "there's no point in ..." doing something. It makes me try to think up reasons to do it!

    Leave a comment:


  • Chris Boss
    replied
    While the WS_GROUP style solves the problem, the behavior is not typical of Windows.

    If I create two radio controls and a tab control and forget to use WS_GROUP using SDK style code, it does not lock up the app, when using a custom dialog class (forwards messages to actual dialog engine).

    Leave a comment:


  • Michael Mattias
    replied
    What I noticed in your first post was ...
    Code:
    Dialog New Pixels, 0, ...TO hDl
    ... with no "g" at the end of what was supposed to be "hDlg"

    But I just copied it to make this post, and when pasted the "g" is there!

    No, really! I still cannot see the 'g' in the first post!

    [ADDED]
    Hmm, I get a myself. There's a second scrollbar WITHIN the internal code block and you need to hit that one to see the 'g'.

    How did you do that? Did you use "code block within code block?" Don't do that.

    MCM
    Last edited by Michael Mattias; 17 Sep 2009, 08:06 AM.

    Leave a comment:


  • Rodney Hicks
    replied
    From the CONTROL ADD OPTION documentation.
    Option buttons are used for presenting a list of choices, only one of which may be selected. So, there is no point in having just a single option button.
    If more than one CONTROL ADD OPTION statement had been used as the help file indicates it might have been more apparent that something more was needed. You know, something to make them function the way option buttons were meant to, like blanking any other OPTION buttons of the %WS_GROUPing.

    Leave a comment:


  • Mike Doty
    replied
    It would be great to see this work with PBFORMS and without the required .PBR.
    Glad you figured out the %WS_GROUP thing. I need to read on that, again.

    Starting with templates/skeletons/wizards can greatly speed up development.
    This is one reason I like the structure of PBForms.
    Last edited by Mike Doty; 17 Sep 2009, 09:09 AM.

    Leave a comment:


  • Gary Beene
    replied
    Thanks for the help guys.

    And you're right, in this example it takes BOTH %WS_Group additions to work correctly.

    But, in general I understood that the inclusion of %WS_Group has to do with whether a group of option controls will work correctly (navigation and focus issues) - not with whether an app will freeze without them.

    For example, here's another example with non-TAB controls - no %WS_Group - and it works fine. I tested all of the other common controls and only the TAB control results in the freeze. That's still a mystery!

    Code:
    #Compile Exe
    #Dim All
    Global hDlg As Dword
    Function PBMain() As Long
      Dialog New Pixels, 0, "Option Test",300,300,300,200, %WS_SysMenu, 0 To hDlg
      Control Add Option, hDlg, 197,"Click Me!", 50,50,100,20
      Control Add Label, hDlg, 198,"Click Me!", 50,80,100,20
      Dialog Show Modal hDlg Call DlgProc
    End Function
    
    CallBack Function DlgProc() As Long
      If Cb.Msg = %WM_Command  Then
      End If
    End Function
    But thanks for the reminder, and for the specific fix. Since it wasn't required with other controls I didn't give it a try.

    Leave a comment:


  • Dave Biggs
    replied
    In Cary's test code there are no more controls after the option button so the %WS_GROUP style is added to the first control in the dialog (actually next in the Tab order if you like) as explained in the help file..

    PB Help -> Control Add Option:
    In addition, the first OPTION control in a group should have the style %WS_GROUP (to mark the beginning of a group of buttons) and %WS_TABSTOP.
    The remainder of the OPTION controls in the group should not have %WS_GROUP or %WS_TABSTOP styles.
    However, the very next non-OPTION control to appear in the tab order after the group should be given the %WS_GROUP and %WS_TABSTOP styles (the latter may depend on the type of control it is).
    If there are no other controls after the group, add %WS_GROUP to the first control in the dialog.
    This ensures that keyboard navigation with the arrow keys will operate within the group of OPTION controls, and that the TAB and SHIFT+TAB keys will switch focus between whole groups of controls (instead of individual controls as is common when each group member has the %WS_TABSTOP style).

    Leave a comment:


  • Charles Dietz
    replied
    Dave, I was just about to post my reply when I saw yours. I thought the AddTab call had to be moved after the options in order to end the group. I guess the tab control is added last even though the AddTab call is first... a little confusing, any thoughts? Also, I used two options to more clearly illustrate the problem.

    Code:
    #DIM ALL
    #INCLUDE "Win32API.inc"
    GLOBAL hDlg AS DWORD
    
    FUNCTION PBMAIN() AS LONG
       DIALOG NEW PIXELS, 0, "Test Code",200,200,600,500, %WS_OverlappedWindow TO hDlg
       CONTROL ADD OPTION, hDlg, 150, "Pick Me!", 20,260, 100,20, %WS_GROUP
       CONTROL ADD OPTION, hDlg, 151, "Not Me!", 20,290, 100,20
       AddTab
       DIALOG SHOW MODAL hDlg
    END FUNCTION                           
    
    SUB AddTab
      LOCAL hPage1 AS DWORD
      CONTROL ADD TAB, hDlg, 540, "", 400,370,150,75, %WS_GROUP
      TAB INSERT PAGE hDlg, 540, 1, 0, "Page1" TO hPage1
      CONTROL ADD LABEL, hPage1, 550, "Label1", 20,20,60,20
    END SUB

    Leave a comment:


  • Dave Biggs
    replied
    Gary,

    The problem is that you have used an Option control without applying %WS_GROUP.

    This doesn't lock up..
    Code:
    #Compile Exe
    #Dim All
    #Include "Win32API.inc"
    Global hDlg As Dword
    Function PBMain() As Long
       Dialog New Pixels, 0, "Test Code",300,300,600,500, %WS_OverlappedWindow To hDlg
       AddTAB
       Control Add Option, hDlg, 150, "Pick Me!", 20,290, 100,20 ,%WS_GROUP
       Dialog Show Modal hDlg
    End Function
     
    Sub AddTab
      Local hPage1 As Dword, hPage2 As Dword
      Control Add Tab, hDlg, 540, "", 400,370,150,75 , %WS_GROUP
        Tab Insert Page hDlg, 540, 1,0,"Page1" To hPage1
            Control Add Label, hPage1, 550, "Label1", 20,20,60,20
    End Sub
    See http://www.powerbasic.com/support/pb...5&postcount=40

    Leave a comment:


  • Gary Beene
    replied
    Ok Michael,

    I've not yet slapped my head because I still haven't figured out your hint.

    Another hint, please.

    Leave a comment:


  • Michael Mattias
    replied
    Actually it IS obvious, but only if you scrollbar all the way to the right on the DIALOG NEW statement.

    I think you'll want to give yourself a great big for this one.

    Leave a comment:


  • Gary Beene
    started a topic Option and TAB Conflict?

    Option and TAB Conflict?

    This very simple code freezes when I click on the option control. Is it obvious why?

    Code:
    [CODE]#Compile Exe
    #Dim All
    #Include "Win32API.inc"
    Global hDlg As Dword
    Function PBMain() As Long
       Dialog New Pixels, 0, "Test Code",300,300,600,500, %WS_OverlappedWindow To hDlg
       AddTAB
       Control Add Option, hDlg, 150, "Pick Me!", 20,290, 100,20
       Dialog Show Modal hDlg
    End Function
    
    Sub AddTab
      Local hPage1 As Dword, hPage2 As Dword
      Control Add Tab, hDlg, 540, "", 400,370,150,75
        Tab Insert Page hDlg, 540, 1,0,"Page1" To hPage1
            Control Add Label, hPage1, 550, "Label1", 20,20,60,20
    End Sub
    [/CODE]
Working...
X