• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Thao tác Cut, Copy, Paste và Undo

Các mẹo vặt linh tinh khác, không thuộc nhóm nào
Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4764
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 519 time

Thao tác Cut, Copy, Paste và Undo

Gửi bàigửi bởi truongphu » T.Ba 13/05/2008 2:07 pm

Thủ thuật: Thao tác Cut, Copy, Paste và Undo
Tác giả: truongphu
Mô tả: Thao tác Cut, Copy, Paste và Undo trên control chuẩn. dành cho các bạn chưa biết


Tôi phải nói lại là trên Control chuẩn. MS controls 2.0 đã hổ trợ lệnh Copy

Mã: Chọn hết

  1. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  2. Private Sub Command1_Click() 'cut
  3. Clipboard.SetText (Text1)
  4. Text1 = ""
  5. End Sub
  6. Private Sub Command2_Click() 'copy
  7. Clipboard.SetText (Text1)
  8. End Sub
  9. Private Sub Command3_Click() 'paste
  10. Text1.SelText = Clipboard.GetText(1)
  11. End Sub
  12. Private Sub Command4_Click() 'undo
  13. Call SendMessage(Text1.hwnd, &H304, 0&, 0&)
  14. End Sub


o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Heaven
Thành viên chính thức
Thành viên chính thức
Bài viết: 15
Ngày tham gia: T.Hai 24/11/2008 5:34 pm

Re: Thao tác Cut, Copy, Paste và Undo

Gửi bàigửi bởi Heaven » T.Hai 01/06/2009 5:50 pm

Cái text1 là cái gì thế bác? (Nếu là một biến string thì cho cháu hỏi cháu muốn copy/cut/paste một đoạn được bôi đen trong textbox thì làm thế nào ạ?)

Uzumaki Naruto
Thành viên danh dự
Thành viên danh dự
Bài viết: 839
Ngày tham gia: T.Hai 30/04/2007 9:55 pm
Đến từ: Sài Gòn
Has thanked: 7 time
Been thanked: 83 time

Re: Thao tác Cut, Copy, Paste và Undo

Gửi bàigửi bởi Uzumaki Naruto » T.Hai 01/06/2009 8:27 pm

Cái Text1 là một cái TextBox đó
Thuộc tính của TextBox giúp bạn làm được điều đó là SelText, thuộc tính này trả về chuỗi trong Textbox đang được bôi đen
Copy/Cut/Patse thì thay vì bạn sử dụng Text1 thì bạn dùng Text1.SelText
Còn Undo thì mình chưa nghĩ ra :D Mình nghĩ ra là dùng một cái Label hoặc Text khác để lưu cái chuỗi đã bôi đen (Text1.SelText) sau đó dùng SendMessage như chú Phú với tham số là Text2.Text (TextBox lưu chuỗi bôi đen)
Cause you're my special thing
I'm flying without wings

Heaven
Thành viên chính thức
Thành viên chính thức
Bài viết: 15
Ngày tham gia: T.Hai 24/11/2008 5:34 pm

Re: Thao tác Cut, Copy, Paste và Undo

Gửi bàigửi bởi Heaven » T.Hai 01/06/2009 9:48 pm

Uhm cám ơn bạn chắc tại mình dùng Unicode Control của DQHung nên SelText toàn trả về giá trị trống. Phải thay bằng điểu khiển textbox mặc định của VB.

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4764
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 519 time

Re: Thao tác Cut, Copy, Paste và Undo

Gửi bàigửi bởi truongphu » T.Bảy 25/07/2009 9:09 am

gửi bởi clarkkent


Module

Mã: Chọn hết

  1. '// View Types
  2. Public Enum ERECViewModes
  3.     ercDefault = 0
  4.     ercWordWrap = 1
  5.     ercWYSIWYG = 2
  6. End Enum
  7. '// Undo Types
  8. Public Enum ERECUndoTypeConstants
  9.     ercUID_UNKNOWN = 0
  10.     ercUID_TYPING = 1
  11.     ercUID_DELETE = 2
  12.     ercUID_DRAGDROP = 3
  13.     ercUID_CUT = 4
  14.     ercUID_PASTE = 5
  15. End Enum
  16. '// Text Modes
  17. Public Enum TextMode
  18.     TM_PLAINTEXT = 1
  19.     TM_RICHTEXT = 2 ' /* default behavior */
  20.     TM_SINGLELEVELUNDO = 4
  21.     TM_MULTILEVELUNDO = 8 ' /* default behavior */
  22.     TM_SINGLECODEPAGE = 16
  23.     TM_MULTICODEPAGE = 32 ' /* default behavior */
  24. End Enum
  25.  
  26. Public Const WM_COPY = &H301
  27. Public Const WM_CUT = &H300
  28. Public Const WM_PASTE = &H302
  29.  
  30. Public Const WM_USER = &H400
  31. Public Const EM_SETTEXTMODE = (WM_USER + 89)
  32. Public Const EM_UNDO = &HC7
  33. Public Const EM_REDO = (WM_USER + 84)
  34. Public Const EM_CANPASTE = (WM_USER + 50)
  35. Public Const EM_CANUNDO = &HC6&
  36. Public Const EM_CANREDO = (WM_USER + 85)
  37. Public Const EM_GETUNDONAME = (WM_USER + 86)
  38. Public Const EM_GETREDONAME = (WM_USER + 87)
  39.  
  40. Public Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  41. Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Any) As Long
  42.  


Form: RichtextBox1, Command1, Command2

Mã: Chọn hết

  1. Public Property Get UndoType() As ERECUndoTypeConstants
  2.     UndoType = SendMessageLong(RichTextBox1.hwnd, EM_GETUNDONAME, 0, 0)
  3. End Property
  4. Public Property Get RedoType() As ERECUndoTypeConstants
  5.     RedoType = SendMessageLong(RichTextBox1.hwnd, EM_GETREDONAME, 0, 0)
  6. End Property
  7. Public Property Get CanPaste() As Boolean
  8.    CanPaste = SendMessageLong(RichTextBox1.hwnd, EM_CANPASTE, 0, 0)
  9. End Property
  10. Public Property Get CanCopy() As Boolean
  11.    If RichTextBox1.SelLength > 0 Then
  12.       CanCopy = True
  13.    End If
  14. End Property
  15. Public Property Get CanUndo() As Boolean
  16.     CanUndo = SendMessageLong(RichTextBox1.hwnd, EM_CANUNDO, 0, 0)
  17. End Property
  18. Public Property Get CanRedo() As Boolean
  19.     CanRedo = SendMessageLong(RichTextBox1.hwnd, EM_CANREDO, 0, 0)
  20. End Property
  21.  
  22. '///////////////////////////////////////////////////////
  23. '// Methods
  24. Public Sub Undo()
  25.     SendMessageLong RichTextBox1.hwnd, EM_UNDO, 0, 0
  26. End Sub
  27. Public Sub Redo()
  28.     SendMessageLong RichTextBox1.hwnd, EM_REDO, 0, 0
  29. End Sub
  30. Public Sub Cut()
  31.    SendMessageLong RichTextBox1.hwnd, WM_CUT, 0, 0
  32. End Sub
  33. Public Sub Copy()
  34.    SendMessageLong RichTextBox1.hwnd, WM_COPY, 0, 0
  35. End Sub
  36. Public Sub Paste()
  37.    SendMessageLong RichTextBox1.hwnd, WM_PASTE, 0, 0
  38. End Sub
  39. Public Sub Clear()
  40.    RichTextBox1.SelText = Empty
  41. End Sub
  42.  
  43. Private Sub Command1_Click() 'undo
  44. If CanUndo Then Undo
  45. End Sub
  46.  
  47. Private Sub Command2_Click() 'redo
  48. If CanRedo Then Redo
  49. End Sub
  50.  
  51. Private Sub Form_Load()
  52. Dim lStyle As Long
  53. '// required to 'reveal' multiple undo
  54. '// set rich text box style
  55. lStyle = TM_RICHTEXT Or TM_MULTILEVELUNDO Or TM_MULTICODEPAGE
  56. SendMessageLong RichTextBox1.hwnd, EM_SETTEXTMODE, lStyle, 0
  57. End Sub


download/file.php?id=6463
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh


Quay về “[VB] Mẹo vặt khác”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.3 khách