Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Отмена последнего действия в ComboBox Добавлено: 16.02.12 09:01  

Автор вопроса:  П.С. | Web-сайт: psbatishev.narod.ru | ICQ: 225019134 
Добрый день!

Есть проблема с отменой последних действий в VB6: многие контролы умеют отменять последнее действие, и когда нажимаешь Ctrl+Z, то отменяют, но нужно ведь еще кнопку в панель инструментов вывести с синей стрелкой "Отмена". Как это сделать, если метода нет?

Прочитал в статье про посылку сообщений окну и текстовому полю с помощью Win32 API: http://www.vbnet.ru/articles/showarticle.aspx?id=76 - работает для текстовых полей, но на форме есть еще в перемежку и ComboBox. Они не поддерживают посылку сообщения EM_UNDO - прочитал это в справочнике, но ничего другого не нашел. Подозреваю, что можно сделать путем посылки кода нажатой клавиши в буфер клавиатуры, но в Windows 7 эта возможность не работает вообще и выдает ошибку. Может тогда послать код с помощью Win API, но не знаю как это сделать?

Помогите разрешить задачу, пожалуйста.

Ответить

  Ответы Всего ответов: 2  

Номер ответа: 1
Автор ответа:
 Ким Чен Ир



Вопросов: 0
Ответов: 140
 Профиль | | #1 Добавлено: 16.02.12 13:29
Ну, классический комбо состоит из трех окон и посылать EM_UNDO надо бы не в combobox.hwnd, а в его дочернее окно EDIT.
Его хендл можно выяснить например с помощью GetComboBoxInfo.

Ответить

Номер ответа: 2
Автор ответа:
 П.С.



ICQ: 225019134 

Вопросов: 36
Ответов: 41
 Web-сайт: psbatishev.narod.ru
 Профиль | | #2
Добавлено: 16.02.12 17:41
Спасибо большое за совет и "наводку"! Для полноты темы выкладываю код:


  1. Private Declare Function GetComboBoxInfo Lib "user32" _
  2.   (ByVal hwndCombo As Long, _
  3.    CBInfo As COMBOBOXINFO) As Long
  4.  
  5. Private Type RECT
  6.    Left As Long
  7.    Top As Long
  8.    Right As Long
  9.    Bottom As Long
  10. End Type
  11.  
  12. Private Type COMBOBOXINFO
  13.    cbSize As Long
  14.    rcItem As RECT
  15.    rcButton As RECT
  16.    stateButton  As Long
  17.    hwndCombo  As Long
  18.    hwndEdit  As Long
  19.    hwndList As Long
  20. End Type
  21.  
  22. Private Function GetComboEditHandle(ctl As ComboBox) As Long
  23.  
  24.    Dim CBI As COMBOBOXINFO
  25.  
  26.    CBI.cbSize = Len(CBI)
  27.    
  28.    Call GetComboBoxInfo(ctl.hWnd, CBI)
  29.    
  30.    GetComboEditHandle = CBI.hwndEdit
  31.    
  32. End Function
  33.  
  34. Private Sub Command1_Click()
  35.     Debug.Print GetComboEditHandle(Combo1)
  36. End Sub

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам