Jump to content

aem

uniGUI Subscriber
  • Posts

    23
  • Joined

  • Last visited

Posts posted by aem


  1. Yes, thank you. The two step process works fine for particular
    controls as in:

    1. UniServerModule.CustomCSS:
    ._x-item-disabled .x-form-field {
        opacity: 1;
        -moz-opacity: 1;
        filter: alpha(opacity=100);
        color: dimgray;
        background: gainsboro;
    }
    2. UniDBEdit->ClientEvents->UniEvents-> beforeInit fn:
    function beforeInit(sender, config)
    {
        config.disabledCls = "_x-item-disabled";
    }

    But this would be unwieldly for dozens of forms and thousands of
    controls. What I was shooting for was maybe a simple one line that
    could be added to a form's constructor. Like:
        prepDisabled(self);

    My prepDisabled() looks something like this:
    (to be called on form creation just once)

    procedure prepDisabled(vform: tuniform);
    var
    i:integer;
    begin
    for i:=0 to vform.componentcount-1 do
         begin
        if vform.components[i] is tuniedit then
          tuniedit(vform.components[i]).ClientEvents.UniEvents.Values['beforeInit'] := 'function beforeInit(sender, config) {config.disabledCls = "_x-item-disabled";}';
        if vform.components[i] is tunimemo then
          tunimemo(vform.components[i]).ClientEvents.UniEvents.Values['beforeInit'] := 'function beforeInit(sender, config) {config.disabledCls = "_x-item-disabled";}';
        if vform.components[i] is tunicombobox then
          tunicombobox(vform.components[i]).ClientEvents.UniEvents.Values['beforeInit'] := 'function beforeInit(sender, config) {config.disabledCls = "_x-item-disabled";}';
       if vform.components[i] is tuniradiobutton then
          tuniradiobutton(vform.components[i]).ClientEvents.UniEvents.Values['beforeInit'] := 'function beforeInit(sender, config) {config.disabledCls = "_x-item-disabled";}';
       if vform.components[i] is tunicheckbox then
          tunicheckbox(vform.components[i]).ClientEvents.UniEvents.Values['beforeInit'] := 'function beforeInit(sender, config) {config.disabledCls = "_x-item-disabled";}';
       if vform.components[i] is tunispinedit then
          tunispinedit(vform.components[i]).ClientEvents.UniEvents.Values['beforeInit'] := 'function beforeInit(sender, config) {config.disabledCls = "_x-item-disabled";}';
       if vform.components[i] is tunidatetimepicker then
          tunidatetimepicker(vform.components[i]).ClientEvents.UniEvents.Values['beforeInit'] := 'function beforeInit(sender, config) {config.disabledCls = "_x-item-disabled";}';
        end;
    end;


    This works pretty darn good.
    Please check the attached image.
    The only thing lacking is with the radiobuttons and checkboxes,
    they may need slightly different treatment.

    Radiobuttons and Checkboxes:
     when disabled, which one is Checked is no longer visible.
    (and it would be nice if the associated caption could be
    assigned a lighter color too)

    Neither of these are 'showstoppers' but my guess is they are
    both obvious to a JS savant.

    as always, thanks so much,

    tonyM

    recip1.jpg

  2.  

    Although everyone loves the look that comes with the CLASSIC theme

    I get constant complaints about not being able to tell disabled items from enabled ones.

    It would be great if I could somehow use a slightly darker shade of gray

    for disabled items and do it globally (perhaps in customcss). What are the options here?

    thanks,

    tonyM

  3. The idea is something like this.

    The user enters a set of special numbers (corresponding to a mix of claims and such)

    So a stack of simple grid cells seemed appropriate ( our VCL apps do this in several places).

    When the user is ready they click a button ANALYZE. Then to the right of each value

    a number of new values and messages are filled.

    They then 'work' with this list, going up and down the info, until done.

    Two grids connected using ONTOPLEFTCHANGED to reset the other grid's TOPROW

    property was a simple way to have the info scannable.

      - Of course this could be done with a single grid just fine if

    the rightmost columns could be made readonly and Tab did not move users

    from the entry column 0 to the info columns.

    tonyM

  4.   MORE:  It looks like I could get rid of the several places where this two-grid-sync business is done if we

    could make specific columns readonly within a single tunistringgrid.  We have explored

    that possibility before but come up dry. But that seems like an alternative if it were possible.

    thanks,  tonyM

  5. We're porting another set of applications from VCL to UniGUI - and several

    of those forms have pairs of grids positioned right against each other.

    When either grid is scrolled the ONTOPLEFTCHANGED event sets the TOPROW

    property to match the other grid - slick.  Is this synchronization doable without those?

    (I notice an event onalignposition that sounds interesting but nowhere do I

    see any references to it in docs or forums - It's probably irrelevant to my need anyway)

    thanks, tonyM

  6. Hello,

       While the tuniFileUpload component doesn't allow much

    customization - it does seem to get the job done.  But when we began trying real files

    it fails for us consistently after about 30 seconds.  The result is we can upload

    smallish files fine but anything over about 50mb gives a simple messagebox with:

          communication error

    We are using hyperserver only.

    We have tried both 0 and large values for maxAllowedsize

    We have tried this with the browser on the same machine as hyperserver to

    eliminate any true network issues.

    We have combed the discussion topics concerning 'communication error' in relation to uploading.

    But so far no luck,

    I bet a lot of people are doing uploads so maybe someone has the

    perfect tip on this one.

    thanks,

    tonyM  (unigui  1.90.0.1499)

  7. Hello,

      I am the developer using uniGUI and loving it. But the products being

    tested for release using Hyperserver on Cloud servers is being done by

    a small team elsewhere (very elsewhere).  It looks as if anyone can

    'sign up'  on the main uniGUI Discussion Forums page by simply providing

    display name - email - new password.

    Will that allow my associate to read and create questions and topics?

    Would it make sense for me to create the account then pass the information

    on to the lead guy of that team?

    thanks,

    tonyM

  8.  

    I have kept trying various things  to try to make unimenutree items

    display and act as disabled when disabled at runtime (the user's rights are applied)

    disable the unimenuitem - no effect

      //  welcome1.enabled:=false;   //top level
      //  personalchecks1.enabled:=false;  //child level

    disable unitreemenu items directly - no effect

         //unitreemenu1.items[0].enabled:=false; //does nothing
         //unitreemenu1.items[4].enabled:=false; //does nothing

    The alternative is to hide the tree items - but property alone has no effect

      //  welcome1.visible:=false;   //these do nothing
      //  personalchecks1.visible:=false;

    But if these are followed by the code shown in the earlier post

    the top level tree item does disappear - the child level item does not.

    ----  So....

    Although we would prefer to be able to truly show a disabled

    look to unimenutree items I may have stumbled upon a workaround

    to make items invisible. It seems that making the caption

    of the original unimenuitem empty does the job.

     //   welcome1.caption := '';  //these make it invisible
      //   personalchecks1.caption:='';  //child item invisible now too

     

    UniGUI is the greatest - and always getting better it seems

    tonyM

     

     

  9.  

    We use the tuniTreeMenu hooked to tuniMenuItems extensively - works great.

    I want to be able to disable all the items a user doesn't have the right to access at startup.

    But assigning values to 'enabled' has no effect. Possible?

    Anyway, I did find nice code in this group that lets me HIDE individual treemenu items.

    It works great for Top level items, but not for child items. Hmm.

    Even if I fully expand the tree items and then execute the code, sub-items  don't seem to be affected.

    Here is an example test of mine:

         welcome1.enabled := False;        //a top level item   - BECOMES HIDDEN
         personalchecks1.visible:=false;  //a second level child item - NO CHANGE

     with UniTreeMenu1 do
      begin
        _llist := '';
        for I := 0 to SourceMenu.Items.Count-1 do
          if not SourceMenu.Items.Visible then
            if _llist='' then _llist := '"'+SourceMenu.Items.Caption+'"'
            else _llist := _llist + ',"' + SourceMenu.Items.Caption+'"';

        if _llist<>'' then
        begin
          JSInterface.JSCall('getStore().clearFilter', []);
          JSInterface.JSCode(#1'.getStore().filterBy(function (record){ if (['+ _llist +'].indexOf(record.get("text"))>-1) return false; else return true;});');
        end
        else
          JSInterface.JSCall('getStore().clearFilter', []);
      end;

    Any workaround hints are appreciated greatly.

    Thank you,

    tonyM  CC

  10.  

    After several months of porting various programs to have web interfaces (for cloud deployment)

    we are ready to delve into the world of deployment.

    Our first step is to try out HyperServer - running our app compiled in simple stand-alone mode.

    Of course the simple steps are quite clear:

    Copy hyper_server.exe and hyper_server.cfg to folder where your application's executable file resides.

    Compile your application in Standalone Server mode. You may need to change your project's DPR file to switch from a different mode to Standalone Server.

    Edit hyper_server.cfg file and set binary_name parameter to your application's executable name. For example binary_name=myapp.exe

    Again hyper_server.cfg file set prompt_login=0

    Run hyper_server.exe

    In a browser tab navigate to url http://localhost:8077

    You should be able to see your app's main form or login form in browser tab.

    [Eventually we figured out that the FMSOFT_uniGUI_xxxx_runtime_xxxx.exe needed to be installed. OK.]

    Bingo,  now     localhost:8077\server    gets us to the management console nicely.

    But when we hit our app with   localhost:8077  we consistently get a curious message:

    Expected values not found in config file: C:\Program Files\HyperServer\wValupay.ini

    Our app is called wValupay.exe   but is this some sort of necessary file we must create?

    If so, I have just missed all mention of it somehow!  What would go in there?

    complete version  1.90.0.1499

     

    We do love uniGUI,

    tonyM

     

     

     

  11.  

    I have pursued the forum and tried several promising methods, but I cannot seem

    to be able to programmatically control the selected cell of the tunistringgrid.

    The tunistringgrid clearly maintains both a 'truly selected' cell and a highlighted cell.

        Ar runtime if you specify

           grid.row:=3;  grid.col:=3;

              The cell 3,3 is indeed highlighted.  But you can still discern a light line around the

              cell that had been selected earlier. And if the user hits the ENTER key, the editing occurs

              within that previous cell, not 3,3 as hoped.

    The subclassing of the grid class and using currcol/currrow doesn't seem to move the

    true selection either.

    I was surprised not to find this mentioned anywhere - but I suppose most people use

    the stringgrid for display purposes rather than as sections of data entry screens.

    (incidentally, the ENTER key to edit a cell is a constant complaint from EVERY tester we have)

    If you have a tip about controlling the selected cell I would be grateful.

    thanks

    tonyM

  12. The Tunitreenode does not seem to have the TREEVIEW property.

    Down inside some callbacks I have access to the NODE being modified

    but I need to access the tree itself and even the frame the tree is in.

    Is there a straightforward way to get at the TREE from the NODE?

    Traversing the parent tree upward ends in NIL it seems.

    thanks,

    tonyM

  13. Thank You  --

    Walking back from isolated example to full code revealed a stupid oversight on my part.

    For those that need spaces, this works well for me as SherZod provided:

    1. UniServerModule -> CustomCSS:

    .customSG .x-grid-cell-inner {
        white-space: pre;
    }

    2. UniTreeView -> LayoutConfig -> Cls = customSG

  14.  

    Alrighty,

       I changed my forum address from my standard development address to my formal corporate

    email account. This of course is not the registration address that the Seattle office used to purchase and register

    the product - It is my own account within the purchasing company ClearCycle of Seattle WA.

    I hope this works for everyone.

    tonyM

  15.  

    Thanks -  We are now official - we purchased and installed 1.90.0.1499 last week.

    As for the unitreenode text,  I see now that the node.text contains the string as intended.

    So when I check  unitreeview1.selected.text it might contain a string formatted like:

    Chk:        000012345                 Seq_no:          45-56

    But the browser (firefox or edge) displays:

    Chk: 000012345 Seq_no: 45-56

    All text of all nodes are shown this way - spaces squished out.

    In another thread I got the idea that HTML interpretation may make it

    necessary to replace every space with &nbsp;

    I could do that religiously during the load, but I wouldn't be thrilled...

    If you come across an easier method please let us know.

    thanks,

    tonyM

    CC

  16. Whether added statically at design time

    or dynamically with xx.add()  or xx.addchild()

    my pre-spaced text seems to be stripped of any

    multiple spaces - replacing them with one space.

    So a line like:

    rootnode.add(nil,''aaaa                     bbbb');

    shows text:

    aaaa bbbb

    Our multi-level trees almost always require alignment of the many items

    that comprise the lines. Using a font like new courier and spaces lets us do that normally.

    Am I missing a simple way to avoid this stripping action?

     

    thanks,

    tonyM

     

  17. Hello,

      It's been a long time since I've been this excited about coding - UniGUI is amazing!

    I hope I can be a useful part of this growing community.

     

    So I am putting together a couple of demos to show our director next week

    (healthcare software developer, 20 employees - purchase imminent)

    Mostly I have ported over 2 ancient projects in record time that most thought were a lost cause.

     

    I have a question already about closing/not closing forms.

    For nice compatibility I have enablesynchronousoperations set to true.

    The code often displays a form with    <otherform>.showmodal;

    The code nicely stops there and waits for the form to close.

    But without an onclosequery event that new form must determine if it is allowed to close

    in the onclose() handler and set  action:=caNone  if it should remain active.

     

    Here;s the rub,

    Setting action:=canone does indeed keep the form on top

    BUT

    The statements immediately past the original showmodal call are executed no matter what I set the action value to.

     

    This really reeks havoc where we use something like:

    if <otherform>.showmodal=mrOK

        begin 

        //statements 

       end

    else

       begin 

        //statements   

    end;

    These statements get hit while the form is still suppose to be in control and not yet closed.

    In short, I can set the action:=canone and it keeps the top form showing,

    but the calling code continues on past at that time - as if it had been closed.

    I have been working with unigui for all of a week so I bet this is a newbie question.

     

    Thanks,

    aem

    • Like 1
×
×
  • Create New...