Know-how, előadás, programozás a vba-n

Eseménykövetés

Három eseménytípus létezik: az alkalmazás szintje, a dokumentum szintje és az objektum szintje. Az első típus eseményei a dokumentum megnyitásához, mentéséhez, bezárásához és nyomtatásához, az alkalmazások be- és kirakodásához, a rendszerváltozók megváltoztatásához kapcsolódnak. A második típus eseményei hozzá vannak rendelve az objektumok hozzáadásához, törléséhez, módosításához, a menü aktiválásához. a rajzablak méretének megváltoztatásával, regenerálással, megnyitással, zárással, rajznyomtatással stb. Az objektum szintű események csak akkor fordulnak elő, ha az objektum megváltozott.

Eseménykezelők írása

Alkalmazás szintű eseménykezelők

Az eseményadatok nem jelennek meg automatikusan a VBA betöltésekor. ezért kézzel kell megoldani őket. Ezután a következő események állnak rendelkezésre:

  • AppActivate - közvetlenül megjelenik az alkalmazás főablakának aktiválása előtt;
  • AppDeactivate - közvetlenül megjelenik az alkalmazás főablakának kikapcsolása előtt;
  • ARXLoaded - az ARX-alkalmazás betöltésekor jelentkezik;
  • ARXUnLoaded - ARX-alkalmazás kirakodásakor jelentkezik;
  • BeginCommand - megjelenik a parancs elindításakor, de még nem fejeződött be;
  • BeginFileDrop - akkor fordul elő, amikor a fájl "leesett" az alkalmazás főablakába;
  • BeginLISP - akkor fordul elő, amikor az AutoCAD megkapja a LISP kifejezés végrehajtására irányuló kérelmet;
  • BeginModal - közvetlenül megjelenik a modális ablak megjelenése előtt;
  • BeginOpen - azonnal megjelenik, miután az AutoCAD megkapja a fájl megnyitásának kérését;
  • BeginPlot - azonnal megjelenik, miután az AutoCAD megkapta a nyomtatási kérelmet;
  • BeginQuit - közvetlenül a munkamenet befejezése előtt következik be;
  • BeginSave - azonnal megtörténik, miután az AutoCAD megkapta a mentési kérelmet;
  • EndCommand - azonnal végrehajtódik, amikor a parancs befejeződik;
  • EndLISP - azonnal megjelenik, amikor a LISP kifejezést értékelik;
  • EndModal - a modális párbeszédpanel bezárása után azonnal megjelenik;
  • EndOpen - közvetlenül a rajz megnyitása után következik be;
  • EndPlot - a nyomtatóra történő küldés befejezése után azonnal megjelenik;
  • EndSave - a mentés befejezése után azonnal megtörténik;
  • LISPCancelled - a LISP kifejezés törlése esetén jelentkezik;
  • NewDrawing - közvetlenül a rajz létrehozása előtt keletkezik;
  • SysVarChanged - akkor fordul elő, amikor a rendszer változó értéke megváltozik;
  • WindowChanged - akkor jelenik meg, amikor az alkalmazásablak megváltozik;
  • WindowMovedOrResized - akkor fordul elő, amikor áthelyezi vagy átméretezi az alkalmazásablakot.

Az alkalmazásszintű események engedélyezése

Mielőtt elkezdené használni az alkalmazásszintű eseményeket, létre kell hoznia egy új osztálymodult, és deklarálnia kell egy AcadApplication típusú objektumot a WithEvents kulcsszó használatával. Az eljárás a következő:

  1. A VBA IDE-ben helyezzen be egy osztálymodult
  2. Válasszon ki egy új osztálymodult a projektablakban
  3. Módosítsa a nevet az EventClassModule-ban
  4. Az osztály kódablakában adjon hozzá egy sort:

Miután az új objektumot eseményekkel jelentették be, az az osztálymodul objektumainak listájában jelenik meg, és kiválaszthatja az újonnan létrehozott objektum eseményfolyamatait a legördülő listából. Az eljárás megkezdése előtt azonban a bejelentett objektumot az Alkalmazásobjektumhoz kell csatlakoztatnia. ezt a kódot a fő modulablakban végezzük:

Az InitializeEvents eljárás végrehajtása után az osztálymodul App objektuma az Alkalmazásobjektumra mutat. Példa a rendszerindítási folyamat lehallgatására, amikor a fájlt a Drag-and-Drop módszerrel húzták az AutoCAD ablakba. kimeneti üzenet ablak a fájlnévvel

Dokumentum szintű események kezelése

Dokumentumszintű események folyamatosan előfordulnak az AutoCAD működése közben. Ez azt jelenti, hogy a VBA-projekt betöltésekor automatikusan rendelkezésre állnak. de nem áll rendelkezésre például a VB esetében. Ez azt jelenti, hogy más ActiveX automatizálási alkalmazásokhoz kézzel kell megoldani őket. A következő események állnak rendelkezésre:

  • Aktiválás - akkor történik, amikor a dokumentum aktív;
  • BeginClose - a dokumentum bezárása előtt történik;
  • BeginCommand - a parancs indítása után azonnal megtörténik, de mielőtt befejeződik;
  • BeginDoubleClick - akkor történik, amikor az egér duplán kattint;
  • BeginLISP - azonnal megjelenik, miután az AutoCAD megkapta a LISP kifejezés kiszámításának kérését;
  • BeginPlot - azonnal megjelenik, miután az AutoCAD megkapja a dokumentum kinyomtatására vonatkozó kérelmet;
  • BeginRightClick - a jobb egérgombbal a dokumentum ablakában megjelenik;
  • BeginSave - azonnal megtörténik, miután az AutoCAD megkapja a dokumentum mentését;
  • BeginShortcutMenuCommand - a "right click" egér után történik, de mielőtt a pop-up menü megjelenik a parancsmódban;
  • BeginShortcutMenuDefault - a "jobb egérgombbal", de amíg az előugró menü megjelenik az alapértelmezett üzemmódban;
  • BeginShortcutMenuEdit - a "right-click" egér után, de mielőtt a felugró menü megjelenik a szerkesztési módban;
  • BeginShortcutMenuGrip - a "jobb egérgombbal", mielőtt a felugró menü megjelenik a "fogantyú" üzemmódban;
  • BeginShortcutMenuOsnap - a jobb egérgombbal, de mielőtt az előugró menü megjelenik az objektumnapló módban;
  • Deaktiválás - a dokumentumablak kikapcsolása esetén jelentkezik;
  • EndCommand - a parancs befejezése után azonnal megjelenik;
  • EndLISP - akkor jelentkezik, amikor a LISP kifejezést értékelik;
  • EndPlot - a dokumentum nyomtatása után jelenik meg;
  • EndSave - a dokumentum mentésekor lép fel;
  • EndShortcutMenu - megjelenik a felbukkanó menü megjelenése után;
  • LayoutSwitched - a másik elrendezésre való váltás után következik be;
  • LISPCancelled - akkor történik, amikor a LISP kifejezés számítása megszakad;
  • ObjectAdded - akkor jelenik meg, amikor egy objektum hozzáadódik;
  • ObjectErased - akkor történik, amikor egy objektumot töröl;
  • ObjectModified - akkor történik meg, amikor az objektum megváltozik;
  • SelectionChanged - akkor jelenik meg, ha a választás megváltozott;
  • WindowChanged - a dokumentumablak megváltoztatásakor jelentkezik;
  • WindowMovedOrResized - a dokumentumablak átméretezése vagy áthelyezése után azonnal megjelenik.

Példa a dokumentumszintű eseménykezelők kódolására

Ehhez egyszerűen válassza ki az AutocadDocument objektumot a VBA IDE kódablak legördülő menüjéből. A rendelkezésre álló események az eljárás ablakában jelennek meg, miután bármelyiket kiválasztotta, az esemény eljárás keretbe illesztésre kerül. Ezek az eljárások csak az aktív dokumentummal foglalkoznak. Példa egy előugró menü frissítésére, amikor a BeginShortcutMenuDefault és az EndShortcutMenu események egy elem hozzáadásával jelentkeznek. A módosítás nem érinti a menüfájlokat.

Objektumszintű események kezelése

Az objektum szintű események nem állnak rendelkezésre a VBA letöltés idején. Miután elérhetővé válnak, elérhetővé válik a Módosított esemény. A következő példa létrehoz egy vonalláncot egy eseménykezelővel, amely az új területet mutatja, amikor a vonallánc megváltozik.

Kapcsolódó cikkek