Custom Control relies on a special font - Include it with distribution?

If you create a control that relies on a special font, does that font need to reside in the built application directory and/or <Windows/Fonts>?
I have a control that looks like a 7-segemt LED, and it relies on a "LCD" font.
Thanks,
Richard
Richard

COOL, I didn't know NI had a font. Thanks,
My original question concerns the need (or lack of) to include such a font on the distribution disk when you make an EXE?
Richard

Similar Messages

  • Using a Meter control in LV Touch Panel, and using shared variables that are custom controls.

    I Just started using LV touch Panel module with an NI TPC-2106.
    I have two differenct problems:
    1) I was planning on using the "Meter" control quite a bit. I can set up the meter exactly how I like on the host PC, but on the touch Panel computer it seems to ignore my adjustments, mainly the start and end of the scale - i.e. I would like control to run from 0 to 360 with 0 straight up, using the entire circle. However, on the Touch panel computer it always puts 0 at about 7 o'clock and 360 at about 5 o'clock. I have also tried adding markers to no avail.
    2) I am communicating with a compact fieldpoint controller. I can creat a shared variable that is a simple double with no problems. However, I have some shared variables that use a custom control for the variable type - bascially a cluster with a couble doubles, a time stamp, and an enumeration. It lets me drag the shared variable into my diagram, but it seems to ignore it when I run it.

    Ipshita_C,
    - I am using LV 8.6.1f1and LV Touch Panel 8.6.1.
    - I have attached a simplified VI that shows how I want to use the meter. Notice that the placement of the endpoitns does not work correctly on the touch panel, and that it ignores the arbitrary markers that I placed.
    - I also have included an XY graph control that displays on the TPC with margins around the graph area that I removed from the graph control.
    - For the shared variable, it appears to be an issue related to the touch panel, not fieldpoint. I found another thread in this forum that mentioned that clusters containing Enumerations do not work in shared variables on the touch panel. I changed the enumeration to an integer and it now works fine.
    In general, there seem to be a disappointing number of limitations in the touch panel implementation. My biggest concern is that I have not found any documentation from NI that lists these limitations. I seem to have to try things out and see what works and what does not work. Can you point me to a comprehensive list of touch panel modules limitations?
    Attachments:
    test 2.vi ‏10 KB

  • Custom control: slider with two needles

    I've been using LabVIEW for some years, and I was able to create a lot of custom controls.
    I know that CVI is doesn't allow me such a level of customization, but I don't know if there is a simple and effective way to create a slider controls with two needles (based on the Vertical Pointer Slide for example).
    I used two different overlapped slides, and they behave more or less as I expected (not fully satisfied, but ...). I need placing a lot of these controls in a panel, so I wonder if I can group the two slides in a custom control, and write some c code to interface with them (if I select Create >>Custom control, I can't select two different controls...)
    Is there another way to create a slider control with two needles?
    Vix
    In claris non fit interpretatio
    Using LV 2013 SP1 on Win 7 64bit
    Using LV 8.2.1 on WinXP SP3
    Using CVI 2012 SP1 on Win 7 64bit, WinXP and WinXP Embedded
    Using CVI 6.0 on Win2k, WinXP and WinXP Embedded

    Hey Vix - 
    While I agree it's not quite as straightforward as LabVIEW, you can do exactly what you're talking about with LabWindows/CVI.  The basic instructions to do this are here.  Another good resource is to check out the installed custom controls in <CVI>\toolslib\custctrl, and copy their format.  It sounds like for your particular case, you'd want to create a custom control for a slide control.  Then, in the API for your custom control, you could have a convert function that programmatically created the second slide control for your second needle.  If you need more detail than this, let me know. 
    NickB
    National Instruments 

  • Veristand Custom Controls

    I am just starting to use the Veristand evaluation copy to see if it can do what I need it to do.  It seems very customizable, and I was trying to create custom workspace controls through Labview.  I would like to get things like radio buttons, lists and drop down menus into the workspace to control my model.  I tried simply taking one of the numeric controls and replacing it with one of the previously mentioned controls, but it gave me an error saying that they were unsupported.  It seems like I would be able to do this using the Free Label Template, but I'm not quite sure how to do that.  I was able to find a custom indicator example (the min/max one), but was unable to find anything involving custom controls.  Are there any examples or tutorials I could look at?  How would I go about making some of those Labview controls into things I could use in the Veristand Workspace?
    -Eric
    Solved!
    Go to Solution.

    Hi erric, I have some answers for your issue.
    1. I attached a zip file that contains your control renamed and build a project in it. You should be able to unzip it, check the build specificiation and make sure the output destination is the C:\Documents and Settings\All Users\Documents\National Instruments\VeriStand\Display Templates. Trigger a build on this and you should get EricHettlerSample - Radio.vi and EricHettlerSampleControlSupport.llb in there. Once you have this run a workspace you will be able to drop the EricHettlerSample - Radio control from the control list.
    2. For the explanation. I think when you do a save as on the min-max example you download from the web LabVIEW cross link the vis that is in the llb with the one in the vi.lib. So doing a save as will not work. What will work is that you create a project and setup a source distribution to build the custom control. These are the steps I take based on your attached file:
    Rename in windows explorer the attached numeric indicator - radio.vi to EricHettlerSample - radio.vi
    Open LabVIEW convert the .llb you attached to a directory.
    Create a new project file.
    Open EricHettlerSample - radio.vi under my computer, when LabVIEW prompts me for some VI i look for them in the converted llb directory. Note that LabVIEW will find most of the files under vi.lib since these are the files that NI VeriStand install to labview directory.
    Once I added the some of the vis, I mass compile the project.
    Create a source distribution. Add the EricHettlerSample - radio.vi. Go to source file setting make the main vi go to the template folder and everything else go to a llb folder.
    Trigger the build, LabVIEW will do a better job creating an isolated component that is correctly linked.
    As a rule you always want to create a project to build a custom control, since Save As will not always worked with the LabVIEW VI linkage in NI VeriStand.
    To create a completely base custom control project what you do is:
    Copy C:\Documents and Settings\All Users\Documents\National Instruments\VeriStand\Display Templates\Decoration - Free Label.vi in windows explorer to a directory of your choice.
    Do a rename on the VI in window explorer.
    Open LabVIEW create new project add the renamed VI under my computer. This will create a blank project for customizing custom controls.
    I hope this helps, let me know if it still does not work for you.
    Also if you still bothered by the error messages that shows up you might want to clean up C:\Documents and Settings\All Users\Documents\National Instruments\VeriStand\Screens directory since this directory is where NI VeriStand caches all the controls you drop in the workspace. So if you have a control that cannot be loaded delete all vis in this directory should remove the bad vis.
    Attachments:
    EricHettler.zip ‏75 KB

  • Need to include Custom control in Tabstrip (which is present in selec scren

    Hi All,
    Is it possible to create a custom control in the selection screen of a report program.?
    Its not possisble to use a module pool program.
    Regards,
    Sudheer

    Yes you can. There are several options depending on what you are trying to do.
    1. If you are trying to do some field validations then look for  a field exit.
    2. Other option is to look for a appropriate enhancement point which is easily avilable in ECC.
    - Guru
    Reward points if useful

  • Fully custom controls

    Hello:
    I have struggled with this off and on for several years now. I need to build custom controls for industrial automation applications using LabVIEW and the DSC module. I need the ability to fully customize the appearance of the existing controls while maintinaing color and blink properties. It would also be nice to preserve smooth control apearance when resizing.
    I have figured out how to acheive transparency using Photoshop CS and png files. Other information is obviously lost when an image in a custom control is changed.
    Since the built-in controls scale smothly, can I assume that they are vector graphics based? Can their images be better edited using a vector-based tool?
    Is there a special channel which allows for color properties to be applied to a control's image? Is it possible to manipulate this into custom controls?
    In general, I would like to know how to edit graphics for custom controls so that I can maintain the original ability to use property nodes to control the appearance of a custom control.

    Thank you for the link. It dies answer some of my wuestions, but still leaves me without a solution. Can you provide more information on the "picture in c code" format? I can not find any information on it online. I am a C++ and C# programmer, but I am not familiar with PICC.
    Is it possible to access the source code for the controls included with LabVIEW and truly customize them?
    Thank you,
    plaskey

  • Issue in Custom Control UI element

    Hi there,
                   I have created 2 custom controls(SAP mobile 7.1), one for rendering images(actually map images) and another for capturing user's signature. Both are integrated into the main application and works fine when alone. But when present together, certainly on different screens in the main app, still it works but with rendering problems. Say when navigating from the screen that displays the map custom control to the screen that has the signature capuring custom control, the map image is still getting displayed over the signature custom control view.
               I wonder , if the problem is with disposing of the custom control. Can anyone suggest how to do that. Or something else has to be done?
    Regards,
    Aravind

    Hopefully someone more knowledgeable about custom controls \ SWT can add some input
    I do know disposing the SWT controls is important but not sure if it would solve your problem
    from our application that uses a few simple custom controls together, we definitely needed to use dispose or it would cause memory consumption issues and slow performance
    within the constructor
    [Text object].addDisposeListener(this);
    method to dispose color and fonts used
    public void widgetDisposed(DisposeEvent event)
                  font.dispose();
                  amber.dispose();

  • How to have custom control in DataGridView display object's value?

    I have a sample project located
    here
    The project has a main form `Form1` where the user can enter customers in a datagridview. The `CustomerType` column is a custom control and when the user clicks the button, a search form `Form2` pops up.
    The search form is populated with a list of type `CustomerType`. The user can select a record by double-clicking on the row, and this object should be set in the custom control. The `DataGridView` should then display the `Description` property but in the background
    each cell should hold the value (ie. the `CustomerType` instance).
    The relevant code is located in the following classes:
    The column class:
    public class DataGridViewCustomerTypeColumn : DataGridViewColumn
    public DataGridViewCustomerTypeColumn()
    : base(new CustomerTypeCell())
    public override DataGridViewCell CellTemplate
    get { return base.CellTemplate; }
    set
    if (value != null && !value.GetType().IsAssignableFrom(typeof(CustomerTypeCell)))
    throw new InvalidCastException("Should be CustomerTypeCell.");
    base.CellTemplate = value;
    The cell class:
    public class CustomerTypeCell : DataGridViewTextBoxCell
    public CustomerTypeCell()
    : base()
    public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
    base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);
    CustomerTypeSearch ctl = DataGridView.EditingControl as CustomerTypeSearch;
    if (this.Value == null)
    ctl.Value = (CustomerType)this.DefaultNewRowValue;
    else
    ctl.Value = (CustomerType)this.Value;
    public override Type EditType
    get { return typeof(CustomerTypeSearch); }
    public override Type ValueType
    get { return typeof(CustomerType); }
    public override object DefaultNewRowValue
    get { return null; }
    And the custom control:
    public partial class CustomerTypeSearch : UserControl, IDataGridViewEditingControl
    private DataGridView dataGridView;
    private int rowIndex;
    private bool valueChanged = false;
    private CustomerType value;
    public CustomerTypeSearch()
    InitializeComponent();
    public CustomerType Value
    get { return this.value; }
    set
    this.value = value;
    if (value != null)
    textBoxSearch.Text = value.Description;
    else
    textBoxSearch.Clear();
    private void buttonSearch_Click(object sender, EventArgs e)
    Form2 f = new Form2();
    DialogResult dr = f.ShowDialog(this);
    if (dr == DialogResult.OK)
    Value = f.SelectedValue;
    #region IDataGridViewEditingControl implementation
    public object EditingControlFormattedValue
    get
    if (this.value != null)
    return this.value.Description;
    else
    return null;
    set
    if (this.value != null)
    this.value.Description = (string)value;
    public object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context)
    return EditingControlFormattedValue;
    public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle)
    this.BorderStyle = BorderStyle.None;
    this.Font = dataGridViewCellStyle.Font;
    public int EditingControlRowIndex
    get { return rowIndex; }
    set { rowIndex = value; }
    public bool EditingControlWantsInputKey(Keys key, bool dataGridViewWantsInputKey)
    return false;
    public void PrepareEditingControlForEdit(bool selectAll)
    //No preparation needs to be done
    public bool RepositionEditingControlOnValueChange
    get { return false; }
    public DataGridView EditingControlDataGridView
    get { return dataGridView; }
    set { dataGridView = value; }
    public bool EditingControlValueChanged
    get { return valueChanged; }
    set { valueChanged = value; }
    public Cursor EditingPanelCursor
    get { return base.Cursor; }
    #endregion
    private void CustomerTypeSearch_Resize(object sender, EventArgs e)
    buttonSearch.Left = this.Width - buttonSearch.Width;
    textBoxSearch.Width = buttonSearch.Left;
    However, the `DataGridView` is not displaying the text and it also is not keeping the `CustomerType` value for each cell.
    What am I missing?
    Marketplace: [url=http://tinyurl.com/75gc58b]Itza[/url] - Review: [url=http://tinyurl.com/ctdz422]Itza Update[/url]

    Hello,
    1. To display the text, we need to override the ToString method for CustomerType
    public class CustomerType
    public int Id { get; set; }
    public string Description { get; set; }
    public CustomerType(int id, string description)
    this.Id = id;
    this.Description = description;
    public override string ToString()
    return this.Description.ToString();
    2. To get the cell's value changed, we could pass the cell instance to that editing control and get its value changed with the following way.
    public partial class CustomerTypeSearch : UserControl, IDataGridViewEditingControl
    private DataGridView dataGridView;
    private int rowIndex;
    private bool valueChanged = false;
    private CustomerTypeCell currentCell = null;
    public CustomerTypeCell OwnerCell
    get { return currentCell; }
    set
    currentCell = null;
    currentCell = value;
    public CustomerTypeSearch()
    InitializeComponent();
    private void buttonSearch_Click(object sender, EventArgs e)
    Form2 f = new Form2();
    DialogResult dr = f.ShowDialog(this);
    if (dr == DialogResult.OK)
    currentCell.Value = f.SelectedValue;
    this.textBoxSearch.Text = f.SelectedValue.Description;
    #region IDataGridViewEditingControl implementation
    public object EditingControlFormattedValue
    get
    if (this.currentCell.Value != null)
    return (this.currentCell.Value as CustomerType).Description;
    else
    return null;
    set
    if (this.currentCell != null)
    (this.currentCell.Value as CustomerType).Description = (string)value;
    public object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context)
    return EditingControlFormattedValue;
    public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle)
    this.BorderStyle = BorderStyle.None;
    this.Font = dataGridViewCellStyle.Font;
    public int EditingControlRowIndex
    get { return rowIndex; }
    set { rowIndex = value; }
    public bool EditingControlWantsInputKey(Keys key, bool dataGridViewWantsInputKey)
    return false;
    public void PrepareEditingControlForEdit(bool selectAll)
    //No preparation needs to be done
    public bool RepositionEditingControlOnValueChange
    get { return false; }
    public DataGridView EditingControlDataGridView
    get { return dataGridView; }
    set { dataGridView = value; }
    public bool EditingControlValueChanged
    get { return valueChanged; }
    set { valueChanged = value; }
    public Cursor EditingPanelCursor
    get { return base.Cursor; }
    #endregion
    private void CustomerTypeSearch_Resize(object sender, EventArgs e)
    buttonSearch.Left = this.Width - buttonSearch.Width;
    textBoxSearch.Width = buttonSearch.Left;
    Cell:
    public class CustomerTypeCell : DataGridViewTextBoxCell
    public CustomerTypeCell()
    : base()
    public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
    base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);
    CustomerTypeSearch ctl = DataGridView.EditingControl as CustomerTypeSearch;
    ctl.OwnerCell = this;
    public override Type EditType
    get { return typeof(CustomerTypeSearch); }
    public override Type ValueType
    get { return typeof(CustomerType); }
    public override object DefaultNewRowValue
    get { return null; }
    Result:
    Regards,
    Carl
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • I downloaded the Special Edition of 'Avatar' with the included 'Extras'... I use to see them in my iTunes library, but, can no longer locate them anywhere on my computer or in the iTunes library files! What happened?

    I purchased 'Avatar' The Special Edition with the included Extras with a gift card. I had enough money in my account to cover this purchase. I only got to watch the 'Extras' for one or two times, and now, they have vanished! They no longer appear in my iTunes library or anywhere on my computer! Where are they and how do I regain access? The movie, itself, is still in the library...only the downloaded 'Extras' are gone!

    Visibility of the Podcasts section is controlled from within the Edit > Preferences dialog.
    Empty/corrupt library after upgrade/crash
    Hopefully it's not been too long since you last upgraded iTunes, in fact if you get an empty/incomplete library immediately after upgrading then with the following steps you shouldn't lose a thing or need to do any further housekeeping. In the Previous iTunes Libraries folder should be a number of dated iTunes Library files. Take the most recent of these and copy it into the iTunes folder. Rename iTunes Library.itl as iTunes Library (Corrupt).itl and then rename the restored file as iTunes Library.itl. Start iTunes. Should all be good, bar any recent additions to or deletions from your library.
    See iTunes Folder Watch for a tool to catch up with any changes since the backup file was created.
    Missing tracks
    Typically this can happen because a file or folder is accidentally shunted to the wrong location. iTunes can also get confused if it expects to be talking to an external drive which isn't there. If will often reset the default media folder location and may have trouble finding files in the old folders.
    Select one of your tracks that is missing in action. Press CTRL-I to Get Info. Cancel when asked to try to locate the file, then look at the location given on the summary tab. This where iTunes thinks the file ought to be? Now find out where it actually is. Post back the two locations for comparison. I should be able to give you some steps to reconnect everything once I can determine which of the things that might have gone wrong is most likely in your case.
    When you get it all working make a backup!
    tt2

  • How to use custom control in Dialog Programming?

    How can I call a subscreen using custom control in Dialog Programming?
    The required subscreen contains a calender. Any class or something available for this purpose. Please suggest.

    As [vinraaj|http://forums.sdn.sap.com/profile.jspa?userID=3968041] wrote, call transaction SE51, there is a Wizard to help you generate the table control, it will create the table control and some includes with PBO/PAI modules > Read [Using the Table Control Wizard|http://help.sap.com/saphelp_bw/helpdata/en/6d/150d67da1011d3963800a0c94260a5/frameset.htm]
    Also there is a tutorial in the wiki, read [Learn Making First Table Control |http://wiki.sdn.sap.com/wiki/display/ABAP/LearnMakingFirstTableControl] by [Krishna Chauhan|http://wiki.sdn.sap.com/wiki/display/~nc0euof]
    Regards,
    Raymond

  • Customized Control shape varies in Windows XP to Windows 7

    Hello all
     I have created few customized control icon and used in my application,for development i using windows XP ,screen resolution -1280X1024,when i use the Exe created in Windows7 system with screen resolution 1280X1024, the customized control icon resizes it shape.
    i have tried by enabling and disabling the scaling and proportioning of panel objects in a VI to see the difference ,
    File>>VI Properties>>Window Size>>Enable - Maintain proportions of window for different monitor resoltion & scale all objects on front panel as window resizes ,
    please find the attched image for reference.kindly help me out ,if anyone have the solution to overcome this.
    Attachments:
    comparison 1.JPG ‏46 KB

    I don't know for sure, but your problem may be the font changes between Windows XP and Windows 7.  By default, buttons have boolean text centered in the middle of the button.  Even if the there is no text, the button will still resize with font sizes.  To prevent this from happening, right click the button to select the properties and deselect the option to center the text.  If you have disabled showing text, you will need to enable it, deselect centering, then disable text again.
    This account is no longer active. Contact ShadesOfGray for current posts and information.

  • Scene Builder: cannot edit when I embed a custom control!

    Hi guys, I'm having an issue with Scene Builder and embedded custom controls...
    I have a LoginPanel .fxml/.java module, which contains two re-usable custom controls I've built:
    * StatusZone .fxml/.java
    * LanguageSelector .fxml/.java
    The application runs.
    However, I can't open LoginPanel.fxml to edit it with SceneBuilder v1.1 (developer preview).
    To be specific, in LoginPanel.fxml, I have this data:
    <StatusZone fx:id="statusZone" />
    <LanguageSelector fx:id="languageSelector" />
    SCENARIO 1
    -- LoginPanel.fxml --
    <?import kalungcasev2.view.StatusZone?>
    <?import kalungcasev2.view.LanguageSelector?>
    I get:
    Warning: File 'LoginPanel.fxml' contains references to types that could not be loaded.
    Missing types are [kalungcasev2.view.StatusZone]
    I can click 'Set up classpath', but no matter which folder I choose, it doesn't seem to fix the problem.
    SCENARIO 2:
    -- LoginPanel.fxml --
    <?import kalungcasev2.view.*?>
    I get:
    Warning: File 'LoginPanel.fxml' contains references to types that could not be loaded.
    Missing types are: [StatusZone, LanguageSelector]
    I can click 'Set up classpath', but no matter which folder I choose, it doesn't seem to fix the problem.
    How do I fix this?

    Hi,
    If no ClassLoader is configured in the FXMLLoader, then the FXMLLoader will try to load the
    classes using the System/Context class loader.
    This works well in the context of an application where everything is in the system class loader.
    In SceneBuilder however - your classes will not be in the System class loader, but in a special
    URL class loader that SceneBuilder created for your FXML file.
    SceneBuilder sets this ClassLoader on the FXMLLoader that loads your top FXML file,
    but it can't do anything for the instances of FXMLLoader that your own code creates.
    Therefore - it's best to configure your FXMLLoader with the appropriate class loader,
    which is usually the class loader that loaded your custom type.
    See https://javafx-jira.kenai.com/browse/DTL-5177 for more details.
    -- daniel
    Edited by: daniel on Apr 25, 2013 7:33 AM
    Sorry - to be more precise:
    loader.setClassLoader(this.getClass().getClassLoader());
    is the correct line.

  • Custom Control Doesn't Load On Some Clients

    I have a LightSwitch application developed in Visual Studio 2012 that has been in production for several years without any major issues. The application has a custom control that has been included in the app from the very beginning. The app uses Silverlight
    5.
    I recently made a change and re-deployed the application to the server. This is not the first change deployed since the app was released. The custom control no longer renders when running the app on some clients. Not all clients are affected.
    This is only a problem when running the app from the production server. When I run the app from the development server, the custom control renders without any issues on all clients.
    When the app runs from the production server, I get the following in place of the custom control:
    How do I get the control to render when running the app from the production server?
    Thank you,
    Jack Helfrich

    I recently updated to io6 and ran into FB notification not sounding. So I decided to do a backup like I have done many of times. Well doing this all my custom tones went by by...Never changing anything in itunes. They worked fine up until I restored. I did all the trouble shooting steps like normal for my custom tones. Re-synched and so on. text goes off...nothing, changed to a default tone worked fine then change back to custom tone worked, except for purchased tones those still don't work. I re-purchase one tone I already bought and now works fine. All are working again accept the original problem of the notification tone for FB still not working.

  • Custom control color property

    With the included controls like the OK boolean you can change the true or false color by going to Properties >> Apperance >>Colors.  Then click the color box to change the state color.  Is it possible to do the same with a custom boolean control?
      I have searched some and it does not sound like it is possible, but I figured that I would ask.  I have a diagram where I used some pipes from the DSC module image navigator to make some boolean pipes.  I just changed the properties for the different colors then pasted them into a boolean control for true/false cases.  But now I am thinking of changing the colors from gray/red to gray/green.  Is there an easier way than just starting over and making new booleans with the desired colors?  Or is there a better trick for custom controls I don't know?
    Thanks
    Solved!
    Go to Solution.

    Here is a sample of the control as a type def and a vi with the Colors(4) property cluster.  I must be doing this wrong or not explaining it correctly.  So if you could look at the files and be able straighten me out I would appreciate it. 
    Attachments:
    Control 3.ctl ‏8 KB
    test1.vi ‏12 KB

  • How a custom control is advised it gains or looses focus?

    Hey, at least I have a question to ask, instead of answering them... :-)
    Actually, I already asked it in another thread, in one of my answers: [onMouseClicked Event Is Failing To Fire|http://forums.sun.com/thread.jspa?threadID=5391008] but I fear it is lost in a rather lengthly message, so I ask it in its own thread, because I was to bring the attention of knowledgeable people (hello Sun people! :-D).
    The question is simple: In a custom control in JavaFX 1.2, with skin and behavior, how a control is advised when it gains or looses focus?
    The purpose is to let the skin to change the look of the component upon these events, like it is done for standard controls (eg. putting a border around the focused control).
    If the control is clicked, you know (unless it is disabled) that it will have the focus. But I see no way to see the lost of focus, nor when we gain (or loose) it with Tab/Shift+Tab (if it has focusTraversable to true).
    I looked for onFocus() and onBlur() events (or similar), but found nothing. No mixin, nothing related in javafx.scene.input.TextInput and friends, etc.
    I explored the Web but since 1.2 is still new, I found not much information. Only a fragment of source code in [Re: Further location optimizations|http://markmail.org/message/gsevtlkeq45rrdun] where I see scene.getFocusOwner() but this one isn't easily usable because it is package protected (and it is not an event, anyway).
    A possible solution would be to have a timer to inspect the state focused of the nodes, but it is so kludgy I didn't even tried to implement it!
    I hope I just missed the information... If there is no easy/official/working way in 1.2, I hope this will be corrected for next version!

    That's a very good remark, handling of focus highlight shouldn't be done at control (model)'s level. I hesitated to put it in behavior, but it feels more natural in the skin, so I did as you suggested.
    you'll need an interface, and JavaFX does not do thatYou have mixins. But I didn't used them here.
    focused variable never is set to trueHave you included the
    public override var focusTraversable = true;
    line?
    To support multiple skins, my control becomes:
    public class StyledControl extends Control
      // Data related to the control (the model)
      public var count: Integer;
      public override var focusTraversable = true;
      init
        if (skin == null)  // Not defined in instance
          // Define a default styler
          skin = ControlStyler {}
      package function Incr(): Void
        if (count < 9)
          count++;
    }quite bare bones (I intendedly keep the model simple).
    Note I still define a default skin in case user doesn't provide it: they shouldn't care about this detail unless they want to change it.
    I defined an abstract default skin, implementing most variables (particularly the public ones that can be styled) and the focus change:
    public abstract class DefaultControlStyler extends Skin
      //-- Skinable properties
      public var size: Number = 20;
      public var fill: Color = Color.GRAY;
      public var textFill: Color = Color.BLACK;
      public var focusFill: Color = Color.BLUE;
      package var mainPart: Node; // Decorations (id, focus) are kept out of layout
      package var focusHighlight: Node;
      package var idDisplay: Text;
      package var valueDisplay: Text;
      init
        behavior = ControlBehavior { info: bind control.id }
        node = Group
          //-- Behavior: call controller for actions
          onMouseReleased: function (evt: MouseEvent): Void
            (behavior as ControlBehavior).HandleClick(evt);
      postinit
        // Once defined by the sub-class, insert into the node
        insert [ mainPart, idDisplay, valueDisplay ] into (node as Group).content;
      public abstract function ShowIncrement(): Void;
      var hasFocus = bind control.focused on replace
        if (hasFocus)
          ShowFocus();
        else
          HideFocus();
      // Default handling of  focus display, can be overriden if needed
      public function ShowFocus(): Void
        insert focusHighlight into (node as Group).content;
      public function HideFocus(): Void
        delete focusHighlight from (node as Group).content;
      public override function contains(localX: Number, localY: Number): Boolean
        return mainPart.contains(localX, localY);
      public override function intersects(localX: Number, localY: Number,
          localWidth: Number, localHeight: Number): Boolean
        return mainPart.intersects(localX, localY, localWidth, localHeight);
    }and the concrete skins implement the mainPart, idDisplay, valueDisplay, focusHighlight nodes, override ShowIncrement with an animation, override getPrefWidth and getPrefHeight to set to mainPart size and might override ShowFocus or HideFocus (if we want it behind mainPart for example).
    The behavior is:
    public class ControlBehavior extends Behavior
      public var info: String; // Only for debug information...
      // Convenience vars, to avoid casting each time
      var control = bind skin.control as StyledControl;
      var csSkin = bind skin as DefaultControlStyler;
      public override function callActionForEvent(evt: KeyEvent)
        println("{info}{control.count}: KeyEvent: {evt}");
        if (evt.char == '+')
          Incr();
      package function HandleClick(evt: MouseEvent): Void
        control.requestFocus();
        Incr();
      function Incr(): Void
        control.Incr();
        println("{info}: Ouch! -> {control.count}");
        csSkin.ShowIncrement();
    }and knows only the abstract default skin (to apply feedback of user input to skin).
    I use it as follow:
    Stage
      title: "Test Styling Controls"
      scene: Scene
        width:  500
        height: 500
        content:
          HBox
            translateX: 50
            translateY: 100
            spacing: 50
            content:
              StyledControl { id: "Bar" },
              StyledControl { /* No id */ layoutInfo: LayoutInfo { vpos: VPos.BOTTOM } },
              StyledControl { id: "Foo" },
              StyledControl { id: "Gah" },
              StyledControl { id: "Bu", skin: AltCtrlStyler {} },
        stylesheets: "{__DIR__}../controlStyle.css"
    }BTW, I tried layoutY: 50 in place of the layoutInfo definition, but the control remained at default place. Am I reading incorrectly the ref. or is this a bug?

Maybe you are looking for