Почему автокад не завершается

Автор Тема: Почему автокад не завершается  (Прочитано 14977 раз)

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

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Почему автокад не завершается
« Ответ #15 : 23-12-2020, 10:59:30 »
Так что, похоже, проблема решается только через Palette class.
Мне думается, что это неплохой вариант. В самом автокаде практически все немодальные инструменты реализованы через палитры. Это привычный для пользователя вид диалога, с ним удобно работать:
  • прикрепляется к сторонам окна,
  • комбинируется с другими палитрами,
  • есть автоматическое скрытие,
  • автоматически открывается при запуске автокада в том же состоянии, в котором была на момент закрытия.
Ну и нет таких проблем с блокировкой закрытия AutoCAD.
Я, например, всегда делаю палитру, если мне нужен немодальный диалог.
А где про это можно почитать?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Почему автокад не завершается
« Ответ #16 : 23-12-2020, 11:37:39 »
Борис_С,
Тестовый пример, на который я дал ссылку тоже не работает?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Почему автокад не завершается
« Ответ #17 : 23-12-2020, 12:55:38 »
Код - C# [Выбрать]
  1. // myCommands.cs
  2. using Autodesk.AutoCAD.ApplicationServices;
  3. using Autodesk.AutoCAD.DatabaseServices;
  4. using Autodesk.AutoCAD.EditorInput;
  5. using Autodesk.AutoCAD.Geometry;
  6. using Autodesk.AutoCAD.Runtime;
  7. using System;
  8.  
  9. // This line is not mandatory, but improves loading performances
  10. [assembly: CommandClass(typeof(ModelessDialog.MyCommands))]
  11.  
  12. namespace ModelessDialog
  13. {
  14.   public class MyCommands
  15.   {
  16.      // Modal Command with localized name
  17.     [CommandMethod("StartForm")]
  18.     public void StartForm()
  19.     {
  20.       Application.ShowModelessDialog(Application.MainWindow.Handle, MyPlugin.form);
  21.       Autodesk.AutoCAD.Internal.Utils.SetFocusToDwgView();
  22.     }
  23.   }
  24. }
  25.  

Код - C# [Выбрать]
  1. // MyForm.Designer.cs
  2. namespace ModelessDialog
  3. {
  4.   partial class MyForm
  5.   {
  6.     /// <summary>
  7.     /// Required designer variable.
  8.     /// </summary>
  9.     private System.ComponentModel.IContainer components = null;
  10.  
  11.     /// <summary>
  12.     /// Clean up any resources being used.
  13.     /// </summary>
  14.     /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
  15.     protected override void Dispose(bool disposing)
  16.     {
  17.       if (disposing && (components != null))
  18.       {
  19.         components.Dispose();
  20.       }
  21.       base.Dispose(disposing);
  22.     }
  23.  
  24.     #region Windows Form Designer generated code
  25.  
  26.     /// <summary>
  27.     /// Required method for Designer support - do not modify
  28.     /// the contents of this method with the code editor.
  29.     /// </summary>
  30.     private void InitializeComponent()
  31.     {
  32.       this.Exit = new System.Windows.Forms.Button();
  33.       this.SuspendLayout();
  34.       //
  35.       // Exit
  36.       //
  37.       this.Exit.Location = new System.Drawing.Point(148, 35);
  38.       this.Exit.Name = "Exit";
  39.       this.Exit.Size = new System.Drawing.Size(75, 23);
  40.       this.Exit.TabIndex = 0;
  41.       this.Exit.Text = "Exit";
  42.       this.Exit.UseVisualStyleBackColor = true;
  43.       //
  44.       // MyForm
  45.       //
  46.       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
  47.       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
  48.       this.CausesValidation = false;
  49.       this.ClientSize = new System.Drawing.Size(413, 75);
  50.       this.Controls.Add(this.Exit);
  51.       this.Name = "MyForm";
  52.       this.Text = "MyForm";
  53.       this.ResumeLayout(false);
  54.  
  55.     }
  56.  
  57.     #endregion
  58.  
  59.     private System.Windows.Forms.Button Exit;
  60.   }
  61. }

Код - C# [Выбрать]
  1. // MyForm.cs
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11.  
  12. namespace ModelessDialog
  13. {
  14.   public partial class MyForm : Form
  15.   {
  16.     public MyForm()
  17.     {
  18.       InitializeComponent();
  19.     }
  20.   }
  21. }

Код - C# [Выбрать]
  1. // myPlugin.cs
  2. using Autodesk.AutoCAD.ApplicationServices;
  3. using Autodesk.AutoCAD.Runtime;
  4.  
  5. // This line is not mandatory, but improves loading performances
  6. [assembly: ExtensionApplication(typeof(ModelessDialog.MyPlugin))]
  7.  
  8. namespace ModelessDialog
  9. {
  10.   public class MyPlugin : IExtensionApplication
  11.   {
  12.     public static MyForm form = null;
  13.     void IExtensionApplication.Initialize()
  14.     {
  15.       form = new MyForm();
  16.     }
  17.  
  18.     void IExtensionApplication.Terminate()
  19.     {
  20.       form.Close();
  21.     }
  22.   }
  23. }



Так нормально?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Почему автокад не завершается
« Ответ #18 : 23-12-2020, 20:53:44 »
В этом примере все работает. Но у меня на форме есть компонент ListView. Он заполняется после того, как форма показывается на экране.
Если сразу после этого нажать на крестик автокада, закрывается и форма, и автокад.
Но, если перевести фокус на одну из записей ListView, при нажатии на крестик, фокус уходит из ListView, и только при 2-ом нажатии
закрывается и форма, и автокад.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Почему автокад не завершается
« Ответ #19 : 23-12-2020, 20:57:36 »
Но, если перевести фокус на одну из записей ListView, при нажатии на крестик, фокус уходит из ListView, и только при 2-ом нажатии
закрывается и форма, и автокад.
Значит тебе самому придётся переводить фокус на AutoCAD при помощи Autodesk.AutoCAD.Internal.Utils.SetFocusToDwgView();
Ну или смирится с необходимостью дважды жать на AutoCAD'овский крестик.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Почему автокад не завершается
« Ответ #20 : 24-12-2020, 16:33:36 »
А как я выловлю событие Нажатие на крестик?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Почему автокад не завершается
« Ответ #21 : 24-12-2020, 16:38:50 »
А как я выловлю событие Нажатие на крестик?
Думаю, что это будет не просто, но возможно. Потребуются исследования на уровне Win32 API.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Почему автокад не завершается
« Ответ #22 : 24-12-2020, 17:01:37 »
Дмитрий Загорулькин пишет, что лучше работать с Palette Class. Может быть кто-нибудь выложит пример работы с этим классом или даст ссылку.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Почему автокад не завершается
« Ответ #23 : 24-12-2020, 19:28:27 »
Борис_С,
В ObjectARX SDK 2009 был пример: samples\dotNet\DockingPalette
Ссылка на ObjectARX SDK 2009: http://download.autodesk.com/esd/objectarx/2009/ObjectARX_2009_Win_64_and_32Bit.exe
Возможно придётся что-то в нём править чтобы он заработал в последних версия AutoCAD (как минимум версию .NET Framework)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Почему автокад не завершается
« Ответ #24 : 24-12-2020, 19:33:01 »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Почему автокад не завершается
« Ответ #25 : 24-12-2020, 19:49:41 »
Спасибо. Посмотрю.

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Re: Почему автокад не завершается
« Ответ #26 : 25-12-2020, 08:58:30 »
А что вообще нужно? Чтобы кастомное окно закрывалось вместе с AutoCAD?

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Почему автокад не завершается
« Ответ #27 : 25-12-2020, 12:07:36 »
Да

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Почему автокад не завершается
« Ответ #28 : 26-12-2020, 18:23:34 »
Может быть кто-нибудь выложит пример работы с этим классом или даст ссылку.
Вот тут выкладывал проект с примером WPF в палитре: https://adn-cis.org/forum/index.php?topic=3220.msg16098#msg16098
Там, наверное, уже некоторые вещи устарели, но, в целом, идея осталась такая же.

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Re: Почему автокад не завершается
« Ответ #29 : 27-12-2020, 21:11:57 »
Сейчас у себя проверил, у меня всё нормально закрывается. Но у меня хостится UserControl в WPF окне, вызывается всё это через "ShowModelessWindow()" и ставится фокус через "SetFocusToDwgView()"