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
Vytvořit téma
Koncepty
Seznam oblíbených
Soukromé zprávy
Pravidla
Live CHAT
VIP žádost
Základy Catia
Ke stažení
Doporučujeme
Pracovní příležitosti
Reklama a kampaně
O fóru
Nápověda

Combobox

Kompletní přehled příspěvků v tématu Combobox řazený podle data jejich publikace na fóru.

UživatelPříspěvek
Pavel Krsek

Poslat zprávu | Profil
Datum: 16.11. 2011 | Zobrazeno: 12487x
Konfigurace CATIA:

Text dotazu:
Dobry den,
mam prosim dalsi dotaz.
Zkousim si hrat trochu s VBA, kde mam Combobox, ktery je napojen na parametr v Catpartu.
Kdyz vyvovalam dane makro a napisi hodnotu do boxu, tak se skutecne zmeni i v Catii v danem parametru viz.:

Private Sub BOX_ROZMER_DESEK_X_Change()
Set partDocument1 = CATIA.ActiveDocument
Set part1 = partDocument1.Part
Set parameters1 = part1.Parameters
Set AAA = parameters1.Item("E__ROZMER_DESEK_X")
AAA.Value = BOX_ROZMER_DESEK_X.Value
End Sub

Ja bych ale potreboval, aby pri spusteni makra se aktualni hodnota parametru jiz zobrazovala v boxu. Poradi nekdo prosim.

Dekuji.

Josef Kočí

Poslat zprávu | Profil
[#2398] | Publikováno: 16.11. 2011 - 22:56
Combobox je na formuláři, takže při inicializaci formuláře přiřadit hodnotu (-ty) comboboxu.

BOX_ROZMER_DESEK_X.Value = neco

BOX_ROZMER_DESEK_X.List= pole hodnot (mozna neni uplne presne toto).

p.
Ing Jan Cinert

Poslat zprávu | Profil
[#2399] | Publikováno: 16.11. 2011 - 22:56
Vytvořte funkci, která se bude spouštět při načítání formuláře.

' Initialize za podtrzitkem spusti funkci pri nacitani

Sub UserForm_Initialize()
' nacteme parametr
Set oParameter = CATIA.ActiveDocument.Part.Parameters.Item("E__ROZMER_DESEK_X")
' pridame Do comboboxu polozku
BOX_ROZMER_DESEK_X.Items.Add oParameter.Value
' nastavime ji jako vychozi
BOX_ROZMER_DESEK_X.Text = oParameter.Value
End Sub


Psal jsem to narychlo z hlavy, ale mělo by to být OK.
Ing Jan Cinert

Poslat zprávu | Profil
[#2400] | Publikováno: 16.11. 2011 - 23:15
Oprava - přidání položky do boxu je ve VBA správně takto:
BOX_ROZMER_DESEK_X.AddItem oParameter.Value
Jinak je to stopro OK. Pro nastavení vychozí hodnoty lze použít vlastnost Value (příspěvek JK) i Text.
Pavel Krsek

Poslat zprávu | Profil
[#2405] | Publikováno: 17.11. 2011 - 08:27
Díky moc za nápovědu. Již to funguje.
Ještě bych se k tomu zeptal, zda-li dané řešení funguje i pro tlačítko Checkbox (zaškrtnutí políčka). Tj. Checkbox se odkazuje na parametr typu boolen (true,false) a potřebuji aby při spuštění makra u nastavené hodnoty false bylo políčko v checkboxu zaškrtnuté.

Díky.
Ing Jan Cinert

Poslat zprávu | Profil
[#2408] | Publikováno: 17.11. 2011 - 11:13
Samozřejmě, zatržení Checkboxu udává jeho vlastnost checked. Takže zjistíte, v jakém stavu je boolean parametr a podle toho nastavíte Checkbox, takže asi takto:
zatrhavaci_policko.checked = bool_parametr.value
ale nejsem si úplně jistý, jestli to v CATIA není jako "false" / "true", pak by to mohlo být
If bool_parametr.value = "true" then

zatrhavaci_policko.checked = true
Else
zatrhavaci_policko.checked = false
End If
Pavel Krsek

Poslat zprávu | Profil
[#2413] | Publikováno: 18.11. 2011 - 13:30
Diky za pomoc.
Bohuzel co se tyka checkboxu, tak to se mi zatim nepodarilo.
Duvod je pravdepodobne s tim, ze vlastnost "checked" ve VBA neni obsazeno. Min. ji nemuzu najit a kdyz ji napisi do codu, tak to vyhodi chybu.
Ing Jan Cinert

Poslat zprávu | Profil
[#2414] | Publikováno: 18.11. 2011 - 17:01
Já se omlouvám za mystifikaci,
píšu makra na 90% ve Visual studiu 2008 a často si neuvědomím, že v catiovském VBA je to po staru. Takže:
Checkbox.value = True ' checkbox zatrzeny

Checkbox.value = False ' checkbox nezatrzeny
Pavel Krsek

Poslat zprávu | Profil
[#2415] | Publikováno: 18.11. 2011 - 17:19
To s vlastosti "value" me napadlo, ale stale porad to nefunguje: kod pro UserForm mam nasledujici:

Private Sub UserForm_Initialize()

Set partDocument1 = CATIA.ActiveDocument
Set part1 = partDocument1.Part
Set parameters1 = part1.Parameters
Set oParametr = parameters1.Item("xxx")
CHECKBOX_xxx.Value = oParametr.Value
End Sub


VBA nyni funguje tak, ze se makro spusti (checkbox nezatrzeny - bez ohledu na hodnotu true/false) - po zaskrtnuti checkbox se hodnota zmeni z false na true (pokud pred startem VBA byla hodnota true tak se logicky nic nestane) tj. potrebuji aby pri hodnote true a naslednem spusteni VBA bylo pole zaskrtnute.

Diky Pavel
Ing Jan Cinert

Poslat zprávu | Profil
[#2416] | Publikováno: 18.11. 2011 - 17:50
Problém je v tom, že hodnota z Catie se načítá jako "True" / "False" (defacto text) a ve VBA máte programové True / False, už jsem to psal v příaspěvku #2408.
If parametr.Value = "True" then

Checkbox.Value = True
Else
Checkbox.Value = False
End If
Pavel Krsek

Poslat zprávu | Profil
[#2417] | Publikováno: 21.11. 2011 - 05:46
Diky moc.
Uz to funguje.
Josef Landa

Poslat zprávu | Profil
[#2461] | Publikováno: 02.12. 2011 - 08:20
Uživatel odpovídá na příspěvek #2417:

Dobrý den,
snažím se pomocí CheckBoxu prepínat parametr "Prepinani" (True/False) ten mám vytvoření v CATPart.
Dostal sem se zatim k inicializaci po pár hodinách sem ji nedokázal rozchodit.
Můžete mi prosím poradit?
Private Sub UserForm_Initialize()

Set oPartDocument = CATIA.ActiveDocument
Set oPart = oPartDocument.Part
Set oParameters = oPart.Parameters
Set oParametr = oParameters.Item("Prepinani")
CheckBox.Value = oParametr.Value
If parametr.Value = "True" Then
CheckBox.Value = True
Else
CheckBox.Value = False
End If
End Sub

Ing Jan Cinert

Poslat zprávu | Profil
[#2462] | Publikováno: 02.12. 2011 - 09:10
Tenhle kód je pro zjištění hodnoty parametru a zatržení checkboxu při spuštění makra. Navíc je tam chyba, proto to nefunguje. Správně by to bylo:
Private Sub UserForm_Initialize()

Set oPartDocument = CATIA.ActiveDocument
Set oPart = oPartDocument.Part
Set oParameters = oPart.Parameters
Set oParametr = oParameters.Item("Prepinani")
If oParametr.Value = "True" Then
CheckBox.Value = True
Else
CheckBox.Value = False
End If
End Sub

Pokud zároveň chcete, aby se měnila hodnota parametru v Catii při zatržení / odtržení ve formuláři, musíte vytvořit funkci, která se spustí při změně hodnoty checkboxu. Takže asi takto:
Private Sub Checkbox_Change()

Set oPartDocument = CATIA.ActiveDocument
Set oPart = oPartDocument.Part
Set oParameters = oPart.Parameters
Set oParametr = oParameters.Item("Prepinani")
' podle stavu checkboxu zmenime parametr
If Checkbox.Value = "True" Then
oParameter.ValuateFromString = "True"
Else
oParameter.ValuateFromString = "False"
End If
' updatujeme part
oPart.Update()
End Sub
Josef Landa

Poslat zprávu | Profil
[#2468] | Publikováno: 06.12. 2011 - 10:18
Uživatel odpovídá na příspěvek #2462:

Děkuji za pomoc, už mi to funguje.
Jen ve zdrojovém kodu pro změnu parametru pri změně CheckBoxu sem musel odstranit závorky za oPart.Update a řádek
oParameter.ValuateFromString = "True"
mi nefungoval tak sem ho upravil pouze na:
oParametr.Value = "True"
a už mi to pracuje. Trvalo mi to asi tři hodiny, než sem to trefil, ale tím se člověk nejvíc učí.
Tak jak mi to pracuje to vypadá takto:

Private Sub CheckBox_Change()
Set oPartDocument = CATIA.ActiveDocument
Set oPart = oPartDocument.Part
Set oParameters = oPart.Parameters
Set oParametr = oParameters.Item("Prepinani")
If CheckBox.Value = "True" Then
oParametr.Value = "True"
Else
oParametr.Value = "False"
End If
oPart.Update
End Sub


Nemáte náhodou nějakou přírůčku, do které by se dalo nahlédnout, při problémech?
Ještě jednou děkuji za pomoc.
Ing Jan Cinert

Poslat zprávu | Profil
[#2470] | Publikováno: 06.12. 2011 - 10:46
Kromě oficiální nápovědy o ničem v češtině nevím. Určitě existuje zahraniční literatura (vím o jedné německé knížce), ale ta je dost obsáhlá a také drahá. Poměrně dobré zdroje jsou na zahraničních fórech, ale většinou je to spousta hledání. Někdy se ale nejdou naprosto nedocenitelné informace.

PS: Ty kódy píšu narychlo z hlavy, tak to nemusí být pokaždé 100%.
Josef Landa

Poslat zprávu | Profil
[#2515] | Publikováno: 29.12. 2011 - 17:15
Dobrý den,
mužete mi prosím poradit jakým způsobem bych napsal do programu:
Jestliže je aktivni otevřené okno sestava vyplň parametr_1
Jestliže ne vyplň parametr_2
Jde mi o to co mám napsat jako:
If ........... = ............ Then

A ještě jestli by jste mi pomohl s tímto:
Jestliže existuje parametr_1
Asi to bude v tomto smyslu:
If ........... = True Then
Ing Jan Cinert

Poslat zprávu | Profil
[#2518] | Publikováno: 30.12. 2011 - 11:58
K sestavě:
Jestli je model sestava, poznáte nejlépe z jeho filename (končí na CATProduct) - je tedy třeba zjistit poslední část názvu za poslední tečkou
' rozdelime nazev souoboru Do pole podle tecek

Parts = Split(CATIA.ActiveDocument.Name, ".")

' porovname posledni cast za teckou
If Parts(UBound(Parts)) = "CATProduct" Then
... sestava
Else
... neco jineho
End If


K parametru:
Tady je to tak0 jednoduché. Zkusíme vytvořit objekt parametru podle hledaného názvu metodou Item. Pokud parametr neexistuje, nastane chyba
' osetreni mozne chyby

Err.Clear() ' vynulujeme chybu
On Error Resume Next

Parametr = oProduct.Parameters.Item("nazev_parametru")

' zjistime, zda nastala chyba
If Err.level <> 0 Then
... parametr neexistuje
Else
... parametr existuje
End If
Josef Landa

Poslat zprávu | Profil
[#2554] | Publikováno: 17.01. 2012 - 13:36
Dobrý den,
děkuji za nápovědu.
Rozpoznání dle přípony mi jde bez problémů a šlo to na první pokus,
ale to s tím že jestli parametr existuje tak napříklat nic nedělej(nebo ten parametr vyplň) mi do toho makra přidat nejde....



Parts = Split(CATIA.ActiveDocument.Name, ".")

If Parts(UBound(Parts)) = "CATProduct" Then

Set product1 = partDocument1.Product
Dim parameters1 As Parameters
Set parameters1 = product1.Parameters
Dim strParam1 As StrParam
Set strParam1 = parameters1.CreateString("Parametr_sestava", "")

End If

If Parts(UBound(Parts)) = "CATPart" Then

Set part1 = partDocument1.Part
Dim parameters2 As Parameters
Set parameters2 = part1.Parameters
Dim strParam2 As StrParam
Set strParam2 = parameters2.CreateString("Parametr_dil", "")

End If
Ing Jan Cinert

Poslat zprávu | Profil
[#2555] | Publikováno: 17.01. 2012 - 15:49
Nějak mi chybí část kódu, kde vytváříte objekt partDocument1...

Jinak na to jde zbytečně složitě a navíc si myslím, že parametr musí být typu Parameter. Takže:
Parts = Split(CATIA.ActiveDocument.Name, ".")

Ext = Parts(UBound(Parts))

Dim oParameter As Parameter

If Ext = "CATPart" Then
Dim oPart As Part
Set oPart = CATIA.ActiveDocument.Part
Set oParameter = oPart.Parameters.CreateString("Nazev_parametru","hodnota")
End If

If ...



Josef Landa

Poslat zprávu | Profil
[#2556] | Publikováno: 17.01. 2012 - 16:24
Chtěl jsem si udělat makro na to, že si dám do jednoho adresáře modely kterým chci zapsat určitý parametr.
Když je to sestava vytvoř parametr "sestava".
Když je to díl vytvoř parametr "díl".
Jestliže parametr existuje nevytvářej žádný...
Makro mi pracuje tak že otevírá jeden soubor za druhým a parametry se mi vytváří ale když existuje, tak mi to vždy vytvoří další a to nechci.


Celé to mám tekhle:


Sub CATMain()

Set FileSys = CATIA.FileSystem
Dim FoldObj 'As Folder
Dim FileObj 'As File
Dim files1 'As Files

FPath = CATIA.FileSelectionBox("Select a Part File.", "*.CATPart", CatFileSelectionModeOpen)
If FPath = "" Then
Exit Sub
End If

Set FileObj = FileSys.GetFile(FPath)
Set FoldObj = FileObj.ParentFolder
Set files1 = FoldObj.Files

Dim i 'As Interger
Dim partDocument1 'As Document
Dim product1 'As CATBaseDispatch
Dim part1


For i = 1 To files1.Count
Set Doc = CATIA.Documents.Open(files1.Item(i).Path)
If Err.Number = 0 Then
Set partDocument1 = CATIA.ActiveDocument
End If

' rozdelime nazev souoboru Do pole podle tecek
Parts = Split(CATIA.ActiveDocument.Name, ".")

' porovname posledni cast za teckou
If Parts(UBound(Parts)) = "CATProduct" Then

Set product1 = partDocument1.Product
Dim parameters1 As Parameters
Set parameters1 = product1.Parameters
Dim strParam1 As StrParam
Set strParam1 = parameters1.CreateString("Parametr_sestava", "")

End If

If Parts(UBound(Parts)) = "CATPart" Then

Set part1 = partDocument1.Part
Dim parameters2 As Parameters
Set parameters2 = part1.Parameters
Dim strParam2 As StrParam
Set strParam2 = parameters2.CreateString("Parametr_dil", "")

End If

partDocument1.Save
partDocument1.Close

Next

End Sub




Ing Jan Cinert

Poslat zprávu | Profil
[#2557] | Publikováno: 17.01. 2012 - 17:14
Uživatel odpovídá na příspěvek #2518:
Postup je uvedený v tomto příspěvku, akorát že místo Err.level musí být Err.number <> 0 ...

Princip je takový, že zkusíte parametr načíst - pokud neexistuje, chodí to chyby, kterou právě tímto odchytíte.
On Error Resume Next ' osetrime pad pri vniku chyby


oParametr = oPart.Parameters.Item("nazev_parametru") ' zkusime nacist parametr

If Err.number <> 0' doslo k chybe, to znamena, ze parametr neexistuje

atd...


Uživatel nepřihlášen

Pro zobrazení obsahu stránky / provedení akce (vytvoření nového téma, napsání odpovědi do diskuse apod.) musíte být přihlášeni.