aem
-
Posts
23 -
Joined
-
Last visited
Content Type
Profiles
Forums
Events
Posts posted by aem
-
-
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
-
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
-
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
-
Here is an example of two unistringgrids, side-by-side,
that would be nice to scroll together.
See what ya think,
thanks,
tonyMsyncedGrids.zip
-
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
-
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
-
Perfect. AjaxTimeout is the key.
Thank you - UniGUI is an unbelievably clean product.
tonyM
- 1
-
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)
-
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
-
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 leveldisable unitreemenu items directly - no effect
//unitreemenu1.items[0].enabled:=false; //does nothing
//unitreemenu1.items[4].enabled:=false; //does nothingThe 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 tooUniGUI is the greatest - and always getting better it seems
tonyM
-
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 CHANGEwith 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
-
Mystery Solve.
My apologies to the group.
Our own source was the culprit it seems.
Thank you,
tonyM
CC
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
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
-
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
-
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
- 1
Making disabled controls more distinctive
in General
Posted
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