Custom controls or Xcontrols?

I would like to create custom controls that a user can drag-and-drop from the controls palette.  The user will import an image showing pipelines and then drag-and-drop valves on the pipelines.  I want to create these valve controls so that you can easily set their timing or connect them to other valves to have an identical, inverse or delayed response. 
Would it be more appropriate to use Xcontrols than custom controls for this application? 
Thanks, 
Suretha

Suretha wrote:
The user wil not necessarily be a developer, no. 
My idea is to create a basic valve with different attributes, for instance  it's timing can be linked to another valve, but then you can specify if it should be identical, inverse or a delayed version of the other valve's timing sequence. 
This sounds like intelligence to me, so I assume an Xcontrol will be necessary?  
This is starting to shape up as a "control on the Fly" Challenge. But I'm not going ther yet.
XControls are great if you as a developer have same functionality you want to include in more than one app. They wrap-up all of the functionality you associate with that control. You (as a developer) just drop another one in a new app and the functionlaity comses along for the ride. In my experience this means I code up the function I want in an app (done coding if I don't go to XControl) and then start the work of converting to work as an XControl.
If you can put an upper limit on the number of objects you will present on the screen at any one time you can;
Create a cluster with the max number of controls you need and hide what you are not using at the time.
Do the same as above with hidden controls.
If you can let the GUI NOT look like the widget you are testing then arrays are useful.
If all of the above leaves you lacking I'll outline what I went through to do my last "Controls on the Fly" app.
1) Get very familiar with the LV Picture control. If allows you to draw whatever you want and offers mouse down/up move, enter and leave events. The picture control will be used to render your objects.
2) Get familiar with LVOOP. I used LVOOP because many of the routings of mouse clicks, possitioning, rendering, etc are common to all of the object on the screen. Code up this functionality in a parent class so the childeren can inherit this functionality.
3) Code up an application that operates in two modes (optional but it makes design easier) "Desgn mode" and "Operate". In Design all the user to layout the GUI but do not implment any functionality beyond Deisgn work. The design when loaded in Operate mode should establish all nessesary communications and use the events captured from the Picture control to invoke the methods required for each class of gizmo on your widget.
There is a LOT of work that goes into a "Controls on the Fly" app. If the work I outlined above "bugs" you. It should.
Ben
Ben Rayner
I am currently active on.. MainStream Preppers
Rayner's Ridge is under construction

Similar Messages

  • Property binding between custom control and its aggregations

    Hi,
    I have a custom control with some properties, e.g., visible, and I would like to bind these properties to its aggregated controls without losing the two-way binding functionality. For example, imagine the following control:
    sap.ui.core.Control.extend('dev.view.control.MyControl', {
      metadata: {
        properties: {
          'visible': {type: 'boolean', defaultValue: false},
        aggregations : {
          _innerTable : {type : 'sap.m.Table', multiple : false, visibility: 'hidden'}
    So in this example, I would like to bind the "visible" property of the _innerTable to the "visible" property of MyControl without losing two-way binding. That means that I do not want to read the "visible" property once in a constructor or so and set it on the inner table. Instead I want _innerTable to react on changes of the "visible" property of MyControl so that I can bind it, for example, with "visible={/model/visible}" on an instance of MyControl and _innerTable changes when the model changes.
    Does anyone know if such a "piping" or "chaining" of properties is possible and how it would be done?

    It's close to my case, but you pass the label to your custom control from outside, where you also perform the data binding. In this case, you know which path should be bound to the label property.
    In my case, the control is hidden inside my control, so I do not know which path from the model should be bound to the inner control. I want to somehow connect the property of my control with the property of the inner control.
    So taking part of your example, the control would look like:
    sap.ui.core.Control.extend('xcontrol', {
      metadata: { 
        properties: {
          'visible': {type: 'boolean', defaultValue: true}
        aggregations : { 
          _header : {type : 'sap.m.Label', multiple : false, visibility: 'hidden'}
      init: function() {
        this.setAggregation('_header', new sap.m.Label({
          visible: <????>
      renderer: function(oRm, oControl) {
        oRm.write("<div");
        oRm.writeControlData(oControl);
        var header = oControl.getAggregation('_header');
        if (header) {
          oRm.renderControl(header);
        oRm.write('</div>');
    At point <????> I want to somehow bind the visible attribute of the label to the visible property of xcontrol without losing the two-way binding, i.e., the label should react on changes of the visible property just like xcontrol would.

  • Making Custom Controls

    What tool do I use to make Custom Controls and vi's from scratch

    Ciphertech wrote:
    What tool do I use to make Custom Controls and vi's from scratch
    The sticky point is "from scratch". This is not fully possible!
    Using the control editor, you always start with an existing control, which you then modify by changing cosmetic properties such as size, arrangement, color, decals, etc. You cannot start from scratch, but you can typically come close to your ideas by starting with an existing control that has all the features you want.
    More here: Creating Custom Controls, Indicators, and Type Definitions 
    For even more complex tasks, you can make an XControl. This is basically a control that can consist of as many controls and indicators as you like, can have any datatype, and contains complex code and logic.
    More here: Using XControls (There is even a tutorial)
    Good luck!
    Message Edited by altenbach on 09-07-2008 10:15 AM
    LabVIEW Champion . Do more with less code and in less time .

  • 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();

  • Team Foundation Server 2013 Refresh button not refreshing Custom Control values in TFS Templates

    Hi all,
    We have recently migrated from Team Foundation Server 2010 to Team Foundation Server 2013 Update 2. In TFS 2013 template design we found the refresh form control (inbuilt control of TFS) which is unable to refresh the custom control values that is built
    by us. Is there any way that we can programatically modify to enable the refresh button work with custom control.
    Please find below screenshot link for reference.
    http://postimg.org/image/z4mo3t8r9/
    SaranRam

    Hi SaranRam,
    The refresh button is there to allow the data that populated the work item to be refreshed. The data that you want refreshed is part of the rendering of the form and would only be refreshed when the browser refreshes. Refer to MrHinsh's reply in this
    page.
    Best regards,
    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.

  • OOP ALV report custom control performance problem

    HI
    how to write OOP ALV report without custom control.. Actually with custom control which taking long time... and time out happens for huge selection of data..
    Regards
    Roops.

    timeout is not an alv problem. If you try to display a "huge" amount of data, any display technology will fail. Even sap programs fail, their wise solution is to ask user to restrict data to be displayed. Or reduce database selection time, or display amount. Or propose the user to download data as a spool, or output to a file on server.
    Otherwise, read some advices about how to handle timeout in [Note 25528 - Parameter rdisp/max_wprun_time|http://service.sap.com/sap/support/notes/25528].
    About your question, if you still want to try, look at [example code with alv class cl_salv_table for simple display|http://help.sap.com/saphelp_nw2004s/helpdata/en/f9/1ab54099de3726e10000000a1550b0/frameset.htm]

  • How to create a custom control of a button where the look will be applied to all others but not the Boolean text?

    Hi all
    I would like to create a customized button as a master so that if I change the look of the master all other buttons will change too.
    I have done this with a custom control as a "strict type def" otherwise the look will not change BUT If I do this as a strict type def I cannot change the Boolean text anymore which should be different on every button.
    How can I create a master control of a button where the look will be applied to all others but not the Boolean text?
    Stay Hungry, Stay Foolish
    Solved!
    Go to Solution.

    Steve Chandler wrote:
    I don't think you can do that. I just looked and as I suspected the Boolean text property is read only for strict typedefs so you cannot use property nodes to change the text.
    As a workaround just make it a typedef. When you want to change the look open the typedef and make it strict, make your changes, then make it non strict again. You will have to update the Boolean text again for all instances. Kind of a pain. Maybe this is something for the idea exchange.
    Kudos for being sneaky.
    I like these creative work-arounds!
    Ben
    Ben Rayner
    I am currently active on.. MainStream Preppers
    Rayner's Ridge is under construction

  • How do I find the EventID of an event in a custom control?

    Hi all,
    I have a custom control created in VB .NET that I have embedded into a SAP screen using a wrapper class as described in Thomas Jungs example: <a href="/people/thomas.jung3/blog/2004/09/01/using-net-windows-controls-in-the-abap-control-framework .Net Windows Controls in the ABAP Control Framework</a>
    My problem is that I cannot get the wrapper class to react to any events raised by the custom control!
    I do not know how to find what the EventID is of an event so that I can register it in the class - do you know how to find this EventID? Or even if this is the problem?
    Tx.
    N

    Is there any way to find the image dpi in a free or low cost program?

  • How to limit the number of rows in the Custom Control box

    Hi All,
    In my Module pool screen I have a Custom Control box for providing some free text as input. Now, there is no limit in the number of rows allowed for this box.
    But, the requirement is, it should have the maximum number of rows = 99. and each row should have maximum length = 60 characters.
    User should not be allowed to enter more than 60 characters per row and more than 99 rows.
    Could you please let me know how to do this..? Are there any methods available which controls the maximum number of rows and maximum length per row..?
    Please help me in resolving the issue. Thanks in advance.
    Thanks & Regards,
    Paddu.

    By "Custom Control Box", do you mean a Custom Container or a Table Control?
    Anyway, I suggest you to use a table control (not a custom container as your requirement seems to be very precise on that point, maybe ask your client twice to make sure). Look at the examples of table controls in ABAPDOCU transaction.

  • 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

  • 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.

  • Problem with custom control and focus

    I've a problem with the focus in a custom control that contains a TextField and some custom nodes.
    If i create a form with some of these custom controls i'm not able to navigate through these fields by using the TAB key.
    I've implemented a KeyEvent listener on the custom control and was able to grab the focus and forward it to the embedded TextField by calling requestFocus() on the TextField but the problem is that the TextField won't get rid of the focus anymore. Means if i press TAB the first embedded TextField will get the focus, after pressing TAB again the embedded TextField in the next custom control will get the focus AND the former focused TextField still got the focus!?
    So i'm not able to remove the focus from an embeded TextField.
    Any idea how to do this ?

    Here you go, it contains the control, skin and behavior of the custom control, the css file and a test file that shows the problem...
    control:
    import javafx.scene.control.Control;
    import javafx.scene.control.TextField;
    public class TestInput extends Control {
        private static final String DEFAULT_STYLE_CLASS = "test-input";
        private TextField           textField;
        private int                 id;
        public TestInput(final int ID) {
            super();
            id = ID;
            textField = new TextField();
            init();
        private void init() {
            getStyleClass().add(DEFAULT_STYLE_CLASS);
        public TextField getTextField() {
            return textField;
        @Override protected String getUserAgentStylesheet() {
                return getClass().getResource("testinput.css").toExternalForm();
        @Override public String toString() {
            return "TestInput" + id + ": " + super.toString();
    }skin:
    import com.sun.javafx.scene.control.skin.SkinBase;
    import javafx.beans.value.ChangeListener;
    import javafx.beans.value.ObservableValue;
    import javafx.event.EventHandler;
    import javafx.scene.control.TextField;
    import javafx.scene.input.KeyCode;
    import javafx.scene.input.KeyEvent;
    public class TestInputSkin extends SkinBase<TestInput, TestInputBehavior> {
        private TestInput control;
        private TextField textField;
        private boolean   initialized;
        public TestInputSkin(final TestInput CONTROL) {
            super(CONTROL, new TestInputBehavior(CONTROL));
            control     = CONTROL;
            textField   = control.getTextField();
            initialized = false;
            init();
        private void init() {
            initialized = true;
            paint();
        public final void paint() {
            if (!initialized) {
                init();
            getChildren().clear();
            getChildren().addAll(textField);
        @Override public final TestInput getSkinnable() {
            return control;
        @Override public final void dispose() {
            control = null;
    }behavior:
    import com.sun.javafx.scene.control.behavior.BehaviorBase;
    import javafx.beans.value.ChangeListener;
    import javafx.beans.value.ObservableValue;
    import javafx.event.EventHandler;
    import javafx.scene.input.KeyCode;
    import javafx.scene.input.KeyEvent;
    public class TestInputBehavior extends BehaviorBase<TestInput> {
        private TestInput control;
        public TestInputBehavior(final TestInput CONTROL) {
            super(CONTROL);
            control = CONTROL;
            control.getTextField().addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
                @Override public void handle(final KeyEvent EVENT) {
                    if (KeyEvent.KEY_PRESSED.equals(EVENT.getEventType())) {
                        keyPressed(EVENT);
            control.focusedProperty().addListener(new ChangeListener<Boolean>() {
                @Override public void changed(ObservableValue<? extends Boolean> ov, Boolean wasFocused, Boolean isFocused) {
                    if (isFocused) { isFocused(); } else { lostFocus(); }
        public void isFocused() {
            System.out.println(control.toString() + " got focus");
            control.getTextField().requestFocus();
        public void lostFocus() {
            System.out.println(control.toString() + " lost focus");
        public void keyPressed(KeyEvent EVENT) {
            if (KeyCode.TAB.equals(EVENT.getCode())) {
                control.getScene().getFocusOwner().requestFocus();
    }the css file:
    .test-input {
        -fx-skin: "TestInputSkin";
    }and finally the test app:
    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.TextField;
    import javafx.scene.layout.GridPane;
    import javafx.stage.Stage;
    public class Test extends Application {
        TestInput input1;
        TestInput input2;
        TestInput input3;
        TextField input4;
        TextField input5;
        TextField input6;
        Scene     scene;
        @Override public void start(final Stage STAGE) {
            setupStage(STAGE, setupScene());
        private Scene setupScene() {
            input1 = new TestInput(1);
            input2 = new TestInput(2);
            input3 = new TestInput(3);
            input4 = new TextField();
            input5 = new TextField();
            input6 = new TextField();
            GridPane pane = new GridPane();
            pane.add(input1, 1, 1);
            pane.add(input2, 1, 2);
            pane.add(input3, 1, 3);
            pane.add(input4, 2, 1);
            pane.add(input5, 2, 2);
            pane.add(input6, 2, 3);
            scene = new Scene(pane);
            return scene;
        private void setupStage(final Stage STAGE, final Scene SCENE) {
            STAGE.setTitle("Test");
            STAGE.setScene(SCENE);
            STAGE.show();
        public static void main(String[] args) {
            launch(args);
    The test app shows three custom controls on the left column and three standard textfields on the right column. If you press TAB you will see what i mean...

  • Update of custom control

    Hello experts,
    I built a program with just 1 screen. This screen consists of 2 sections. Section 1 contains input fields for a selection, section 2 constains a custom control on which the selected data is displayed as pdf. For the creation of the pdf I use smartforms.
    First selection works fine.
    If I do a second selection with other selection values the pdf is not updated but displays the values of the first selection. How can I display the new values?
      IF custom_container IS INITIAL.
        CREATE OBJECT custom_container
              EXPORTING container_name = 'CUSTOM_CONTROL'.
      ENDIF.
      CREATE OBJECT html_viewer
          EXPORTING parent  = custom_container.
    * pdf_string_x in Tabelle konvertieren
      length = XSTRLEN( pdf_string_x ).
      full_lines = length DIV 1000.
      last_length = length MOD 1000.
      CLEAR offset.
      DO full_lines TIMES.
        i_data = pdf_string_x+offset(1000).
        APPEND i_data TO it_data.
        offset = offset + 1000.
      ENDDO.
      i_data = pdf_string_x+offset(last_length).
      APPEND i_data TO it_data.
      CALL METHOD html_viewer->load_data
        EXPORTING
    *    URL                  =
          type                 = 'text'
          subtype              = 'pdf'
    *    SIZE                 = pdf_fsize
    *    ENCODING             =
    *    CHARSET              =
    *    LANGUAGE             =
        IMPORTING
          assigned_url         = url
        CHANGING
          data_table           = it_data[]
    *  EXCEPTIONS
    *    DP_INVALID_PARAMETER = 1
    *    DP_ERROR_GENERAL     = 2
    *    CNTL_ERROR           = 3
    *    others               = 4
      IF sy-subrc <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      CALL METHOD cl_gui_cfw=>flush.
      CALL METHOD html_viewer->show_data
        EXPORTING
          url = url.
    Thanks in advance!
    Johannes

    CLEAR IT_DATA[].
      DO full_lines TIMES.
        i_data = pdf_string_x+offset(1000).
        APPEND i_data TO it_data.
        offset = offset + 1000.
      ENDDO.
    Use   CLOSE_DOCUMENT
          or DO_REFRESH method the second time

  • In custom control , I wnt to save the layout with variant  -

    Hi,
    In custom control , I want to save the layout using variant and i want to choose the layout from the variant
    Plz give me the details.
    Rerards,
    Rani

    Hello Rani
    I assume you have an ALV grid displayed within a custom control. For this ALV grid you want to be able to save layouts.
    Assuming that you are using class CL_GUI_ALV_GRID you have set the following IMPORTING parameters when calling method go_grid->set_table_for_first_display:
    " Fill variant parameter with following values:
    gs_variant-report = syst-repid.
    gs_variant-handle = 'GRID'.  " 4-digit handle; required if you have multiple ALV grids
    - I_SAVE = 'A'   " allows saving of user-specific and global layouts
    - IS_VARIANT = gs_variant
    Regards,
      Uwe

  • Custom Control - Best place for visual-tree generation?

    I'm building a custom control (extending Canvas) which should present a chartflow diagram (nodes and connectors). It will be feeded through databinding and a dependency property (ItemSource). The control will generate:
    1. Node-items (based on ItemSource)
    2. Connectors (lines) between each and every node
    3. An adornerlayer on most of the nodes
    Should I generate this visual/logical -tree inside my ItemSourceUpdated -eventhandler? In the overrided ArrangeOverride method? Or whats best practice?

    Please don't ask several questions in the same thread. Your original question was about where to add the visual elements when creating a custom Panel and now you are asking about adorners. Please close the thread by marking all helpful posts as answer when
    your original quesion has been answered and then start a new thread if you have a new question.
    Please refer to the following page for more information about adorners:
    https://msdn.microsoft.com/en-us/library/ms743737(v=vs.110).aspx
    Sorry but no, my original question was about where to place creation code for:
    1. Node-items (based on ItemSource)
    2. Connectors (lines) between each and every node
    3.
    An adornerlayer
    on most of the nodes
    Since you cant create adorners immediately after you have added a new elemented to the visual tree (and before the layout pass) your previous
    answer was appreciated, but not sufficient.

Maybe you are looking for