Работа с палитрами

Автор Тема: Работа с палитрами  (Прочитано 8454 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Volody1983Автор темы

  • ADN OPEN
  • **
  • Сообщений: 52
  • Карма: 0
Работа с палитрами
« : 02-03-2016, 08:57:32 »
Добрый день!
Создаю палитру с таким кодом:
Код - vb.net [Выбрать]
  1. Imports System
  2. Imports System.Net
  3. Imports System.Runtime
  4.  
  5. Imports System.Drawing
  6. Imports Autodesk.AutoCAD.Runtime
  7. Imports Autodesk.AutoCAD.ApplicationServices
  8. Imports Autodesk.AutoCAD.DatabaseServices
  9. Imports Autodesk.AutoCAD.Geometry
  10. Imports Autodesk.AutoCAD.EditorInput
  11. Imports Autodesk.AutoCAD.Windows
  12. Imports Win = Autodesk.AutoCAD.Windows
  13.  
  14. <Assembly: CommandClass(GetType(Autodesk.AutoCAD.Sb.Plugin.MyCommands))>
  15.  
  16. Namespace Autodesk.AutoCAD.Sb.Plugin
  17.     Public Class MyCommands
  18.         Private Shared palette_set As Win.PaletteSet = Nothing
  19.         Private Shared _UserControl1 As UserControl1 = Nothing
  20.  
  21.         <CommandMethod("Test", CommandFlags.Session)> _
  22.             Public Sub MyPalleteTest()
  23.             If palette_set Is Nothing Then
  24.                 palette_set = New Win.PaletteSet("Пример")
  25.                 _UserControl1 = New UserControl1
  26.                 palette_set.Add("Пример", _UserControl1)
  27.                 palette_set.KeepFocus = True
  28.                 palette_set.Visible = True
  29.                 palette_set.Style = Win.PaletteSetStyles.ShowCloseButton Or Win.PaletteSetStyles.ShowPropertiesMenu Or Win.PaletteSetStyles.ShowAutoHideButton
  30.                 palette_set.DockEnabled = Win.DockSides.Left Or Win.DockSides.Right
  31.                 palette_set.Size = New Size(700, 600)
  32.                 palette_set.TitleBarLocation = Win.PaletteSetTitleBarLocation.Right
  33.                 palette_set.Dock = Win.DockSides.Right
  34.                 palette_set.Opacity = 100
  35.                 palette_set.RecalculateDockSiteLayout()
  36.             Else
  37.                 palette_set.KeepFocus = True
  38.                 palette_set.Visible = True
  39.             End If
  40.         End Sub
  41.     End Class
  42.  
  43. End Namespace
В качестве UserControl1  выступает UserControl winform с одной Label. Созданная палитра замечательно появляется. Но проблема возникает, когда я поставлю галку в палитре "Автоматически убирать с экрана", палитра отказывается автоматически убираться. При этом на родных палитрах это свойство замечательно работает. Метод Utils.SetFocusToDwgView() в событие MouseLeave не влияет на результат. Подскажите пути решение если кто сталкивался с проблемой.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Работа с палитрами
« Ответ #1 : 02-03-2016, 11:45:25 »
У меня с этим проблем нет. Посмотрел разницу в кодах. Отличия:
- DockEnabled = None + Left + Right
- Style = ShowPropertiesMenu + ShowAutoHideButton + ShowCloseButton + Snappable
- KeepFocus не задаю
- TitleBarLocation не задаю
- Dock не задаю
- Opacity не задаю
- Вместо Size задаю MinimumSize

Я выделил жирным, на что у меня больше всего подозрений.

Оффлайн Volody1983Автор темы

  • ADN OPEN
  • **
  • Сообщений: 52
  • Карма: 0
Re: Работа с палитрами
« Ответ #2 : 02-03-2016, 13:19:31 »
Дмитрий Загорулькин,
Да Дмитрий проблема была в KeepFocus.  Он заставляет палитру держать фокус. В документации ObjectARX о KeepFocus написано следующее: Возвращает или задает, будет ли  палитра держать фокус ввода, даже когда AutoCAD запрашивает фокус.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Работа с палитрами
« Ответ #3 : 02-03-2016, 13:34:40 »
Дополнительная информация:
Кроме того, при работе с палитрами AutoCAD имеет значение порядок, в котором некоторым свойствам присваиваются значения (демонстрировалось на форуме).

Оффлайн Volody1983Автор темы

  • ADN OPEN
  • **
  • Сообщений: 52
  • Карма: 0
Re: Работа с палитрами
« Ответ #4 : 02-03-2016, 14:04:27 »
Андрей Бушман,
Я на основе указанной ссылки и создавал код для работы с палитрами. Если задававать привязку палитре например palette_set.Dock = Win.DockSides.Right, то надо ее размер указывать перед заданием palette_set.Dock, иначе размер не воспринимается палитрой. Т.е. 24 строчку представленного по ссылке кода надо перенести на 31. По крайней мере у меня после вышеуказанных изменений пристыкованная палитра стала воспринимать задаваемый размер.

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Re: Работа с палитрами
« Ответ #5 : 04-04-2020, 11:34:41 »
Решения в теме так и нет? Одновременно включить KeepFocus и Auto Hide никак нельзя? Т.е. что бы палитра складывалась только когда ни в одном ее Control в самом деле нет фокуса ввода.