BBS: Inland Empire Archive Date: 10-26-92 (10:26) Number: 343 From: MICHAEL MALLEY Refer#: NONE To: ALL Recvd: NO Subj: VB/DOS Bugs/Fixes 2/ Conf: (2) Quik_Bas
>>> Continued from previous message <F4>, <Alt>+<Up>, and <Alt>+<Down> are the keystrokes needed to close and open the list manually. The secret is checking for them in the KeyUp event. The keys are passed to the control prior to a KeyDown event, the control absorbs these keystrokes because they have special meanings, and no KeyDown event ever occurs. However, a KeyUp event *DOES* occur for these key strokes. In each of the command button's click events, include List1.REFRESH as the first line, or Dummy = DOEVENTS() (I'll explain this one later). This allows for <Alt>+<Hotkey> selection of a command button. This solution will cover all but the following combinations of events: The user opens the list Clicks and holds an item with the mouse. With the mouse button still down, selects another item with the arrow keys on the keyboard Finally release the mouse button. Or: The user selects an item with the keyboard. The user closes the list by clicking the combo box's down arrow. I realize that these two scenarios are really far fetched, as I can't think of any reason that anyone would want to do these steps; I really tried, but I'll be darned if I could figure out a way to trap these two [Grin]. 5. Displaying a form that has not been previously loaded will cause bleed through if a combo box's list is about to be shown. Explanation: Let's assume that you are doing some type of data verification in the LostFocus event of an object with a Text property. The user types some illegal text in a text box, and takes the mouse and clicks on the down arrow of a combo box. During the the verification routines, you display a message with MSGBOX. If MSGBOX and the area of the screen where the combo box's list will be displayed overlap, then the underlying screen will show through the overlapped portion. I have had a variation on this, where the list is displayed, but MSGBOX's form can be moved behind the list! Solution: There are two possibilities here. One is to wait and do data verification prior to saving whatever work was done. The other is to write your own code and form for dealing with the user. When your program is run, load the form as part of your start up code. This is preferred anyway since you can manipulate the form's colors and placement. 6. Displaying a modal form while another modal form is displayed decreases available memory. Explanation: Showing a modal from from another modal form takes memory from the far heap in direct proportion to the number of controls on the secondary form. The problem is that when the the second form is unloaded, the memory is never returned to the far heap. Eventually the program will crash. This holds true for all modal forms, even MSGBOX. Solution: If you have a small program, you can simply never unload your forms, just hide them. For a larger program this is not viable. In the secondary modal forms, when the event that triggers the closing process occurs, hide the forms. In the primary form's Unload event, unload every form that *may* have been loaded. Attempting to unload a form that has not been loaded causes no runtime errors, it is just ignored. As in #5 above, if you want to be able to use MSGBOX's functionality, you will have to write your own since MSGBOX unloads its own form. 7. Asking for help on a Type structure in the help window locks up the system. Explanation: When you place the cursor on a variable in the code window, and press <F1>, the IDE shows you the variable's range, its type, and each procedure and module that it occurs in. When the variable is of a user type, placing the cursor on the type name and pressing <F1> gives you the type structure. As far as I can tell, this is a toss up error that occurs when a certain memory boundry is passed. Solution: If your filling up memory, don't press <F1> on the type name, or save your work before you do. Sorry, no magic cures for this one. 8. Editing a form in the Forms Designer (FD) and returning to the IDE does not save changes made to Text properties and the default option button. Explanation: When you return to the IDE after making such a change, the text property and the default option button remains the same as it was before you changed them. Solution: Prior to editing the form, save the form as binary. You will need to do this in the IDE as FD has no options to save as binary or text. Make the changes in FD. Go back to the IDE, and save again as text. You will want your code to be saved as text anyway because if you remove references to a variable in your code, descriptions for the variable are kept in the source file, resulting in longer load time, and less available memory. 9. Event order is not the same when the user presses a hot-key for a command button. Explanation: When the user selects a command button by clicking it with the mouse, event execution is as such: Current object's LostFocus Command button's GotFocus Command button's Click If the user presses the <Alt> + <Hotletter> combination, the event execution is: Command button's Click Current object's LostFocus Command button's GotFocus Solution: Make the first line for each click event: Dummy = DOEVENTS() This will make the system process the LostFocus and GotFocus events. >>> Continued to next message * SLMR 2.1a * Help me! Someone turned reality back on. --- Maximus 2.00 * Origin: The Line Source BBS, Maximus [CBCS] (717)236-1375) (1:270/116)
Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET