• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC SKILL
  3. Failed to create a form in a window

Stats

  • Locked Locked
  • Replies 5
  • Subscribers 143
  • Views 3295
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Failed to create a form in a window

Martinsh
Martinsh 11 months ago

I'd like to create a form in a window. The form has two combo Field. One is a library comboField and the other is a cell comboField. The two fields are linked by ddHiLinkFields() function.  Before use ddHiLinkFields() function, the form must be instantiated. The instantiation action will cause failure when create the form window. Please refer following code. How to solve this problem?


let((fromLib fromCell formLayout1 win)

fromLib = ddHiCreateLibraryComboField(?name 'fromLib ?callback "ddsUpdateSyncWithForm" ?value "" ?prompt "Library")
fromCell = ddHiCreateCellComboField(?name 'fromCell ?callback "" ?value "" ?prompt "Cell")


formLayout1 = hiCreateFormLayout(
'formLayout1
?items list(fromLib fromCell )
?frame "From"
)


Form1 = hiCreateLayoutForm(
'Form1
"Form1"
formLayout1
?buttonLayout 'OKCancelDef
?unmapAfterCB t
?minSize 400:300
)


hiInstantiateForm(Form1)
ddHiLinkFields(Form1->fromLib Form1->fromCell)

;hiDisplayForm('Form1)
win = hiCreateWindow(
nil
"form"
""
""
nil
Form1
)

hiDisplayWindow(win)
)

  • Cancel
  • Andrew Beckett
    Andrew Beckett 11 months ago

    Comment out the hiInstantiateForm (which only works with non-window forms) and move the ddHiLinkFields call to after the hiDisplayWindow call. The form will have been "instantiated" by then, and the linked fields then work correctly. The hiDisplayWindow is non-blocking, so this will work (I tried it).

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Martinsh
    Martinsh 11 months ago in reply to Andrew Beckett

    Andrew,

    Thanks! That works well.

    Martinsh

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Martinsh
    Martinsh 11 months ago in reply to Andrew Beckett

    Hi, Andrew,

    If the form is created in a window, the function hiGetCurrentForm() can't get the form correctly. In following code, I'd like to pass the form handle as an argument of function funcLoad(), but failed. How to fix this problem?

    btnLoad = hiCreateButton(?name 'btnLoad
    ?callback "funcLoad(hiGetCurrentForm())"
    ?buttonText "Load"
    )

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett 11 months ago in reply to Martinsh

    Martinsh,

    The clunky way of doing this is:

    ?callback "funcLoad(symeval(hiGetCurrentWindow()->hiForm))"

    A cleaner way is to use function object callbacks - if your callback function just has the single argument form, then you could do:

    ?callback lambda((_field form) funcLoad(form))

    (this creates an anonymous function with two arguments, and then calls your real function). This works with both normal and window forms. 

    Or you could change your callback function definition:

    procedure(funcLoad(field form @rest _others)
    ...
    )

    and then you can call:

    ?callback 'funcLoad

    (if it was in SKILL++ you don't need to give the single quote).

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Martinsh
    Martinsh 11 months ago in reply to Andrew Beckett

    Andrew,

    Thanks for the ways you've given. All work well.

    Martinsh

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information