Vítejte !   Přihlášení | Registrace
Hlavní menu
CATIA fórum.cz
Novinky
Seriál CATIA
Obecně o CAD
Novinky ze světa DS
Makra pro CATIA V5
Diskuse
Základy Catia
Ke stažení
Doporučujeme
Pracovní příležitosti
Reklama a kampaně
O fóru
Nápověda

Programujeme v .NET - 3.díl: Seznam CATIA oken v roletovém menu

Publikováno: 15. prosince 2013 | Zobrazeno: 5147x
Omezený seznam oken v CATIA
V dnešním dílu seriálu si ukážeme, jak se dá v makru jednoduše vytvořit rozbalovací menu, ve kterém bude seznam oken s otevřenými dokumenty v CATIA. Určitě se ptáte, proč vytvářet něco, co v CATIA už je. Ano, máte pravdu, v hlavním menu CATIA skutečně je položka Window, pod kterou se skrývá seznam okem. Zkušený uživatel však ví, že (pro mě dosud z neznámého důvodu) se zobrazí pouze deset prvních oken a pak se úplně vespod ukáže More window..., a až když na tuto nabídku klikneme, teprve pak se otevře další okno, ve kterém jsou všechna okna, viz obrázek vpravo Pokud máme otevřeno více dokumentů, je to pomalé a otravné. Přitom je řešení tak snadné.

Vrátíme se k našemu poslednímu projektu MojeMakro a rozšíříme ho o další funkce, které načtou seznam okem do položky menu a po výběru toto okno nastaví jako aktivní.

Než začneme s programováním funkcí, vložíme si do formuláře prvek typu MenuStrip, což je klasické roletové menu. Jeho strukturu můžeme vytvořit jako pevnou přímo v okně Designer nebo jí můžeme měnit při běhu makra dynamicky. V našem případě využijeme druhou možnost, tj. položky menu (názvy dokumentů) budeme do menu přidávat vždy při kliknutí na položku Okno. Tím zajistíme, že se v seznamu objeví vždy aktuálně otevřená okna (dokumenty).

Formulářový prvek MenuStrip

Formulářový prvek MenuStrip najdeme stejně jako všechny ostatní prvky v Toolboxu, ve skupině Menus & Toolbars. Do formuláře jej vložíme pouhým přetažením na místo, kde ho chceme mít (horní okraj formu).
Po vložení klikneme do políčka s textem Type here a napíšeme název položky - Okno. Současně si tuto položku položku pojmenujeme jako MenuOkno v kartě Properties.

Přejmenování položky na MenuOkno

Tím máme připraveno vše potřebné a můžeme se vrhnout na samotné programování. Vytvoříme dvě funkce. První načte seznam oken a vloží ho do menu Okno jako nové položky, druhá pak toto okno aktivuje v CATIA.

VytvorSubmenu:

Tato první funkce se volá při začátku rozbalování menu, tj. ve chvíli, kdy na položku Okno klikneme myší, ale ještě předtím, než se položky uvnitř rozbalí. V tomto mezičasu si makro poskládá položky a vloží je do seznamu, který se pak rozbalí. Velmi důležitý krok je vytvoření nové položky menu, ve kterém kromě názvu přidáváme ještě Handler, tj. říkáme makru, co se stane při kliknutí na položku. Stane se totiž to, že se zavolá druhá fuknce, které se předá název okna, které se má aktivovat.
Dále už jen kontrolujeme, jestli se název okna shoduje s aktivním oknem (v seznamu přidáme zatržítko pro indikaci) a nakonec takto vytvořenou položku přidáme do seznamu.
oWindows = CATIA.Windows

oActiveWindow = CATIA.ActiveWindow

Private Sub VytvorSubMenu(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuOkno.DropDownOpening
If Not PripojCatia() Then
Exit Sub
End If

oWindows = CATIA.Windows ' nacteme okna
oActiveWindow = CATIA.ActiveWindow

MenuOkno.DropDownItems.Clear() ' vyprazdnime polozky menu Okno

For Each oWindow As Window In oWindows ' vytvorime noveho submenu v menu Okno
Dim Okno As New ToolStripMenuItem(oWindow.Caption, Nothing, New EventHandler(AddressOf PrepniOkno))

If oWindow.Caption = oActiveWindow.Caption Then
Okno.Checked = True ' zatrhneme aktivni okno
End If

' pridame submenu Do meno Okno
MenuOkno.DropDownItems.Add(Okno)
Next
End Sub

PrepniOkno

Druhá funkce je ještě jednodušší. Vezme si název okna z menu z objektu sender, kterým je vlastní položka menu, na kterou jsme klikli. Pak jen kontrolujeme, zda se název položky neshoduje s právě aktivním oknem. V opačném případě zavoláme metodu Activate objektu Window, který vybereme z kolekce CATIA.Windows.
Private Sub PrepniOkno(ByVal sender As System.Object, ByVal e As System.EventArgs)

If Not PripojCatia() Then
Exit Sub
End If

' oktivni okno nejde aktivovat
If oActiveWindow.Caption <> sender.ToString() Then
CATIA.Windows.Item(sender.ToString).Activate()
End If
End Sub

A to je všechno. Pokud jsme postupovali správně, můžeme si makro vyzkoušet.

Rozbalené menu Okno se všemi položkami

Tuto funkcionalitu můžeme zabudovat do každého makra (já to tak dělám), nebo ji upravit do samostatného makra v nějaké kompaktní podobě, kdy se form otevře u horního okraje obrazovky, bude trvale skrytý a zobrazí se po najetí myši do těchto míst. Makro pak může být trvale spuštěno a sloužit jako lepší alternativa ke CATIA menu Window.

Autor článku: Jan Cinert

Příště: Selekce a její možnosti