15/03/2019
Как управлять статусом показа диалогового окна размера текста OLE
При вставке OLE объекта в чертеж AutoCAD может появляться или не появляться диалоговое окно установки размера текста OLE:
Управляется статус показа этого окна в команде НАСТРОЙКА (_OPTIONS):
А как можно управлять этим статусом из программы на ObjectARX? Это можно делать двумя способами – используя COM/ActiveX модель AutoCAD используя свойство Application.Preferences.System.DisplayOLEScale Но это несколько громоздко в случае если arx-приложение вообще не использует COM. Есть и второй способ использующий функцию acedSetEnv:
Код - C++: [Выделить]
- //-----------------------------------------------------------------------------
- //----- acrxEntryPoint.cpp
- //-----------------------------------------------------------------------------
- #include "StdAfx.h"
- #include "resource.h"
- //-----------------------------------------------------------------------------
- #define szRDS _RXST("")
- //-----------------------------------------------------------------------------
- //----- ObjectARX EntryPoint
- class CShowOleScaleDialogApp : public AcRxArxApp {
- public:
- CShowOleScaleDialogApp() : AcRxArxApp() {}
- virtual AcRx::AppRetCode On_kInitAppMsg(void *pkt) {
- AcRx::AppRetCode retCode = AcRxArxApp::On_kInitAppMsg(pkt);
- return (retCode);
- }
- virtual AcRx::AppRetCode On_kUnloadAppMsg(void *pkt) {
- AcRx::AppRetCode retCode = AcRxArxApp::On_kUnloadAppMsg(pkt);
- return (retCode);
- }
- virtual void RegisterServerComponents() { }
- // Включаем показ диалогового окна размера текста OLE
- // Enable ShowOleScaleDialog
- static void RivilisShowOleScaleDialog() {
- acedSetEnv(ACRX_T("ShowOleScaleDialog"), ACRX_T("1"));
- }
- // Выключаем показ диалогового окна размера текста OLE
- // Disable ShowOleScaleDialog
- static void RivilisHideOleScaleDialog() {
- acedSetEnv(ACRX_T("ShowOleScaleDialog"), ACRX_T("0"));
- }
- // Показываем статус показа диалогового окна размера текста OLE
- // Show status of ShowOleScaleDialog
- static void RivilisGetShowOleScaleDialogStatus() {
- ACHAR status[2] = ACRX_T("1");
- acedGetEnv(ACRX_T("ShowOleScaleDialog"),status,2);
- acutPrintf(
- ACRX_T("\nShowOleScaleDialog = %s"),
- AcString(status).compare(ACRX_T("1")) == 0?
- ACRX_T("Да") : ACRX_T("Нет")
- );
- }
- };
- //-----------------------------------------------------------------------------
- IMPLEMENT_ARX_ENTRYPOINT(CShowOleScaleDialogApp)
- ACED_ARXCOMMAND_ENTRY_AUTO(CShowOleScaleDialogApp, Rivilis, ShowOleScaleDialog, ShowOleScaleDialog, ACRX_CMD_MODAL, NULL)
- ACED_ARXCOMMAND_ENTRY_AUTO(CShowOleScaleDialogApp, Rivilis, HideOleScaleDialog, HideOleScaleDialog, ACRX_CMD_MODAL, NULL)
- ACED_ARXCOMMAND_ENTRY_AUTO(CShowOleScaleDialogApp, Rivilis, GetShowOleScaleDialogStatus, GetShowOleScaleDialogStatus, ACRX_CMD_MODAL, NULL)
Видео:
Автор: Александр Ривилис
Отредактировано 15.03.2019 в 23:21:30
Обсуждение: http://adn-cis.org/forum/index.php?topic=9154.0
Опубликовано 15.03.2019Отредактировано 15.03.2019 в 23:21:30