Jump to content

aem

uniGUI Subscriber
  • Posts

    23
  • Joined

  • Last visited

Everything 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
  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. Thank you for considering this silly question.... We changed all the synchronized grid places to use a scrollbox that contains multiple grids. Obvious once we thought of it. Keep up the great work. This has always been a great forum for quick responses about a fantastic product. sincerely, tonyM
  4. 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
  5. Here is an example of two unistringgrids, side-by-side, that would be nice to scroll together. See what ya think, thanks, tonyMsyncedGrids.zip
  6. 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
  7. 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
  8. Perfect. AjaxTimeout is the key. Thank you - UniGUI is an unbelievably clean product. tonyM
  9. 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)
  10. 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
  11. 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
  12. 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
  13. Mystery Solve. My apologies to the group. Our own source was the culprit it seems. Thank you, tonyM CC
  14. 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
  15. 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
  16. 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
  17. 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
  18. How about that? a simple mainform-only test case works! You get the spaces preserved. Now comes the fun - to trial and error my way between the isolated case and the full case. I will report back. Thank you sincerely, tonyM
  19. Thanks -- I see where you are going with the "pre" business. (ala <pre>) Your two steps are simple and clear -- but I did not see any change in the tree listing. If you are darn sure should work (in your experience) I will try it in an isolated test app. tonyM CC
  20. 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
  21. 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
  22. 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
  23. 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
×
×
  • Create New...