![]() |
![]() |
![]() |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
To access the contents, click the chapter and section titles.
Visual Basic 6 Programming Blue Book: The Most Complete, Hands-On Resource for Writing Programs with Microsoft Visual Basic 6!
As for the Copy operation, well use the Windows Clipboard, of course, which is represented in Visual Basic by the Clipboard object. This object is automatically available to all Visual Basic programs; explicitly adding it to the project is not necessary. The Clipboard object has several methods, two of which we will use:
With these tools, implementing the Copy command is easy. The code is placed in the Edit|Copy menu commands Click event procedure. You can display this procedure either by selecting it from the lists at the top of the Code Editing window or by selecting the command from the menus when the form is displayed. Listing 11.4 shows the code for this procedure. It verifies only that text is selected in the Text Box, which it then copies to the Clipboard. Listing 11.4 The Edit|Copy command event procedure. Private Sub mnuEditCopy_Click() If any text is selected copy it to the Clipboard. If Text1.SelLength = 0 Then Beep Exit Sub End If Clipboard.SetText Text1.SelText End Sub Implementing the Cut command is similar. In fact, the only difference is that the selected text is deleted from the Text Box after being copied to the Clipboard. This is accomplished by setting the Text Boxs SelText property to an empty string. The code for the Edit|Cut commands Click event procedure is shown in Listing 11.5. Listing 11.5 The Edit|Cut command event procedure. Private Sub mnuEditCut_Click() If any text is selected, copy it to the Clipboard, then delete it. If Text1.SelLength = 0 Then Beep Exit Sub End If Clipboard.SetText Text1.SelText Text1.SelText = End Sub Implementing the Edit|Paste command is the simplest of all, requiring only a single line of code. Set the Text Boxs SelText property equal to the text returned by the Clipboards GetText methodthats it. Note that if text is selected in the Text Box when the Paste command is executed, the selected text is replaced by the pasted text, which is the standard Windows way. If no text is selected, then the pasted text is inserted at the insertion point. The code for this event procedure is shown in Listing 11.6. Listing 11.6 The Edit|Paste command event procedure. Private Sub mnuEditPaste_Click() Paste Clipboard text. Text1.SelText = Clipboard.GetText() End Sub You can run the Baby Editor now; youll be able to enter text and then cut and copy it to other locations (either within the editors own text or into another Windows application). True, we still have plenty to add, such as file support and font selection, but I think youll agree that we have a good deal of functionality with very little coding involved. Enabling And Disabling Menu ItemsThe editor, as it stands, has one fairly minor problem. If you open the Edit menu, youll see that both the Cut and Copy commands are enabled, even when no text is selected in the editor. Clearly, these commands are applicable only when text is selected. True, code in both the Edit|Cut and Edit|Copy command event procedures prevents anything from happening should either command be issued with no text selected, but our Baby Editor will appear more professional if the commands are enabled only when appropriate. Likewise, the Paste command should be enabled only when the Clipboard contains text to be pasted. How can we accomplish this? The enabling/disabling of the menu commands is easy, requiring only that we set the commands Enabled property to True or False. Determining whether to enable or disable these commands is equally as easy. We can look at the value of the SelLength property to determine if text is selected in the Text Box, and we can use the Clipboard objects GetText method to see if the Clipboard holds any text. Where will we carry out these actions? In other words, what event can we use? Obviously, we dont care whether these menu items are enabled or disabled when the menu is not displayed. What always happens before the menu is displayed? You click on the top-level menu item (in this case, Edit). Therefore, the Click event procedure for the top-level menu item is the right place for this code. Listing 11.7 shows the code for the mnuEdit_Click event procedure. Listing 11.7 The mnuEdit_Click event procedure. Private Sub mnuEdit_Click() Enable Paste command only if there is text in the Clipboard. Dim x As String x = Clipboard.GetText() If x = Then mnuEditPaste.Enabled = False Else mnuEditPaste.Enabled = True End If Enable Cut and Copy commands only if there is text selected. If Text1.SelLength <> 0 Then mnuEditCopy.Enabled = True mnuEditCut.Enabled = True Else mnuEditCopy.Enabled = False mnuEditCut.Enabled = False End If End Sub When you run the project after adding this event procedure, youll see that the Copy, Cut, and Paste commands are enabled only when appropriate. Remember that the Paste command will be enabled if theres anything in the Clipboard, whether or not it was placed there by this program. Preventing Data LossOne critical aspect of program design is preventing data loss. This means that the user should not be able to inadvertently exit the editor program, load another file, or start a new file if the current file contains changes that have not been saved to disk. The program should prompt the user to save the current file. Of course, the user can choose to exit without saving; the point here is to prevent accidents. Well implement data loss insurance by maintaining a flag named TextChanged that is True if the contents of the editors Text Box have changed since they were loaded or last saved. The obvious place to set this flag is in the Text Box controls Change event procedure, which is executed whenever the contents of the Text Box change. The flag will then be cleared when the file is saved. Whenever the user tries to load a file, start a new file, or quit when this flag is True, a warning message will be displayed (well see how this is done later). Theres a fly in this ointment, however. When a file is read from disk and loaded into the Text Box, the Change event procedure will be triggered and the TextChanged flag set, even though the text has not actually been changed. This will trigger false warnings if the user loads a file and then tries to exit without changing the file. The solution is to keep a second flag named JustLoaded that is True only when a file has just been loaded, but has not yet been modified. Then the Text1_Change event procedure is modified to set the TextChanged flag only if the JustLoaded flag is False. The code for this procedure, shown in Listing 11.8, executes whenever the contents of the Text Box change. Listing 11.8 The Text1_Change event procedure. Private Sub Text1_Change() If the Text Boxs contents change, set global variable TextChanged to True unless we have just loaded a file. If JustLoaded = True Then JustLoaded = False Else TextChanged = True End If End Sub
|
![]() |
Products | Contact Us | About Us | Privacy | Ad Info | Home
Use of this site is subject to certain Terms & Conditions, Copyright © 1996-2000 EarthWeb Inc. All rights reserved. Reproduction whole or in part in any form or medium without express written permission of EarthWeb is prohibited. Read EarthWeb's privacy statement. |