Jump to content
uniGUI Discussion Forums


Popular Content

Showing content with the highest reputation since 06/11/20 in all areas

  1. 4 points
    Hello Friends, Here is a step by step ; How to use an Unigui Application from both sides : internet and intranet (NAT Forwarding Port) : Till now: - We know how to use an Unigui application from a VPS server (internet), - We know how to use an Unigui application from an intranet network (local customer server), Now, how to view an Unigui application in both sides (internet and intranet)? Step by step: The example above is for an Unigui Application used as Hyperserver (Service). we guess its port: 8099 1. First of all, we have to open a port (NAT Forwarding Port) on the Router (or Modem ADSL). You have many examples on youtube. It is very simple. tell the router that, when port 8099 is called, it must redirect the call to the correct PC on the network. Example: - The request http //: myDomaine.com:8099 arrives on the router first. - The router must direct it to my Unigui server ( OK, In the advanced settings of the router, Select : Port Forward Add the Rule : - WAN Connection (important) : The Customer internet Connection (FAI) --> Classical ADSL or Dongle 3G (Example here : pppoe_0_0_38) - Ext Port START : 8099 Ext Port END: 8099 Int Port START : 8099 Int Port END: 8099 - Local LAN IP : - Custom Service : a caption to describe your rule (example My_Application) 2. Give all the authorizations necessary (important) for your application on the Server side here : 2.1 Delphi> Project> Options> Manifest> Execution level: Require Administrator 2.2 Authorize the Firewall to accept your application: C: \ Program Files \ .... myApplication \ myApplication.exe (Public & Private) 2.3 Authorize the Firewall to accept your Hyper_Service: C: \ Program Files \ ... myApplication \ Hyper_Service.exe (Public & Private) 2.4 Add an Inbound Traffic rule to your PORT here 8099 (Public & Private) 2.4 Add an Outgoing Traffic rule to your PORT here 8099 (Public & Private) 2.5 Optionally add an exception to your application to windowsDefender. ________ See In attachment : UFireWall2.0 Have fun FireWall_2.0.7z
  2. 2 points
    English: This example shows how to copy text using the clipboard but on the client side and not using the application memory area on the server. In other words, it's how you should do the "copy and paste" in uniGUI. Portuguese: Este exemplo mostra como copiar texto usando o clipboard mas no client-side e não usando a área de memória do aplicativo no servidor. Em outras palavras, é como se deve fazer o "copiar e colar" no uniGUI. Thanks to Sherzod Code: http://forums.unigui.com/index.php?/topic/6116-copy-paste-selected-text-in-tunimemo/&tab=comments#comment-31802 Moderator/ Staff: http://forums.unigui.com/index.php?/profile/906-sherzod/ Also, third party code from the web. uniGUI DOES COPY TEXT TO CLIPBOARD.rar
  3. 2 points
    Hi everyone, This post has two parts: A complaint about the development speed of uniGUI (and about the transparency about its progress) Alternative solutions like TMS Web Core Your complaint is valid because the progress in uniGUI development slowed down this year (good reasons or bad reasons, it doesn't matter). Also, the Roadmap 2019 was very ambitious and it was affected by the slower speed. You are right on this point. The second point is not right for most of the developers using uniGUI. Let me explain why (before I get lynched without jury or trial). The main goal of uniGUI is to bring the power of a Delphi desktop application to the web and doing so while preserving what makes Delphi one of the best RAD tools ever created. Some people could be smiling now but let me mention a few things we take for granted in Delphi: Visual form designer with property editors and under-the-hook links to data modules containing datasets, action lists, and all kinds of events (no need for pesky MVC,/MVVC, or any other over-complicated and over-engineered tools except pure and clean Delphi). Data grids that get linked at design time and just work. Clear separation of the user interface and the business logic using forms and data modules. Any common application requires a database and if you need a scalable application, you will need a good middle tier for connecting to it and managing the connections from multiple clients. This scenario was always a problem for client/server applications written in Delphi because each one of them used a data module for its connection, but so did every other client. Products like RemObjects DataAbstract were created for solving this issue. With uniGUI, you get your server which holds that data module and DataAbstract becomes a luxury you don't really need. As soon as HyperServer runs as a Server Farm, you will be able to handle as many clients as your server infrastructure can handle. On the other hand, you can have all your code in JavaScript and that doesn't mean that your application can scale, it is just that you will need to create your own server and manage your connections. I could expand my answer, but it should be enough. My last comment is that TMS Web Core is not the only "alternative". Even the old IntraWeb is trying to create a "revolution" by over-promising, under-delivering, and trying to reinvent the wheel. All these products are years behind what uniGUI currently offers. We want more, we want everything! But just try any of the alternatives and you will see the difference. As a parting gift. Last year I was requested to develop a relatively simple application but using IntraWeb plus CGDevTools. After a few days, I finally discovered that they didn't have modal forms and the tricky solution they offered only worked for simple pop up messages. It took me a couple of weeks to create a generic solution that worked "almost" like a modal form. Another week to discover that none of the dataset events were really supported by their grids and that my assumptions were wrong about being capable of working Delphi-style. In the end, I learned a lot of idiosyncrasies about the product, deliver my project, and became convinced that IW + CGDevTools (including jQuery) was a waste of time. Anyone is welcomed to repeat the experience... Sorry for the rant. David Izada Rodriguez (old, very old Delphi developer)
  4. 2 points
    Hello, I'm attaching a simple test case, try... 1. To generate coords, I used an online tool: https://www.image-map.net/ 2. UniServerModule.CustomFiles: files/imageMap.css files/imageMap.js mapImage.rar
  5. 2 points
  6. 1 point
    I have recently developed a Active Directory browser using UniGui and Delphi XE. I have tested it with large environments...20000+ objects. You will notice that the AD Treeview is dynamically loaded, which makes the experience very near to "Active Directory Users and Computers". NOTE: it still has very basic functionality Just extract the files from the ZIP into a folder and run the ADCONTROL.EXE. It's listening on port 8077. Make sure that the account running the ADCONTROL.EXE is logged onto the domain, as the logged in account will be used to read from AD. Use any domain account to log in to the login page. ADControl.ZIP
  7. 1 point
    Hello, Try: <div id="anim" style="position:fixed"><span class="tooltip" data-tooltip="username must consist of 29 symbols."><i class="far fa-calendar-plus fa-2x"></i></span></div>
  8. 1 point
    Hi Nadya, Use this config: procedure TMainForm.UniFormCreate(Sender: TObject); begin UniSpinEdit1.JSInterface.JSConfig('repeatTriggerClick', [False]); end;
  9. 1 point
  10. 1 point
    Excuse me for disturbance. Problem with multiline JS-code was solved. Troubles were not in UniGUI components. Thank you for your attention!
  11. 1 point
    It works!!! Thank you very very much!
  12. 1 point
    Hi, Can you please open a ticket in the support portal? Workaround: procedure TMainmForm.UnimFormCreate(Sender: TObject); begin UniSession.AddJS('_snatr_ = function(b,c,a,e){var d=b.getStore().getNodeById(c);if(d){d.set(a,e);d.commit()}}'); end;
  13. 1 point
    Спасибо. Надеюсь, в новой версии будет исправление.
  14. 1 point
    Решение на данный момент: procedure TMainmForm.UnimFormCreate(Sender: TObject); begin with UnimDBLookupComboBox1 do begin JSInterface.JSConfig('labelAlign', ['left']); //<----- JSInterface.JSAddListener('painted', 'function(){this.inputElement.setStyle("font-family", this.inputElement.getStyle("font-family") + ", FontAwesome")}'); JSInterface.JSConfig('placeholder', [#$f002 +' Search']); end; end;
  15. 1 point
    Hi you can use components paletas to search and add any unigui component
  16. 1 point
    Attachment available. I know that there is a problem saving QrCode in Canvas. Any help ? Take a look tomorrow again in this code.
  17. 1 point
    Hi Experts, I detect a small problem with FastMM5 in Delphi 10.3.3 Pro. This happens only with Unigui / FastMM5 No problem with VCL / FastMM5 No problem with Unigui / FastMM4 Just test this : 0. Add Library (32) : ...\FastMM\FastMM5-master\FastMM5-master 1. Run Delphi 10.3.3 Pro (with original borlndmm.dll in ..\bin) 2. Open ...\FastMM5-master\BorlndMM DLL\BorlndMM.dpr 3. Compile (Relase or Debug) 4. Quit Delphi 5. Just rename the original as : borlndmm_OLD.dll and replace it by the newer : BorlndMM.dll 5. Run Delphi 6. Quit Delphi then the message : "Invalide Pointer Operation" raises ! followed by : Acces Vilation at adress 2172415C in Module 'bds.exe', Read of adress 2172415C Note : Whit the original EMB (BorlndMM.dll) no problem in Unigui. I wrote to Pierre Leriche, but I had to delete my message, since the problem only appears with Unigui. The conclusion I came to is to use FastMM4 with Unigui, since it is totally free and is stable. _________ Regards.
  18. 1 point
    Yesterday I met a young developer and he asked me what tools I use for development of web apps. I said Delphi/uniGUI. He has never heard of Delphi. This explains 4% of 18-29 age group votes of this thread. It is sad to see that your number one development tool never got enough attention (I dont blame Borland for this). It is the tools like uniGUI make Delphi still shine! +1 for 50-59
  19. 1 point
    Hello, First of all, please adjust your forum email address:
  20. 1 point
    Dear Unigueers, There are many possibilities to send email with Delphi. The easiest way a found, is via gmail Server. Although I found a few portions of code on the forum, no one has detailed the important steps to make it work. So, here is a sample where you will for sure understand : //================================== // Sending email with gmail Server : //================================== // This is a compilation of code providing from Web and Unigui Forum. // So thx to all of them // Step by Step : //1. if you have not a gmail account, Create it. //2. Important : // - Enter in your Personnal Setting (gmail) and look for "Security" // - Activate something like : "Allow less secure apps " //3. Download (and Copy on the same executable folder ...\debug\) the two open SSL Libraries : libeay32.dll and ssleay32.dll //4. Connect internet and launch this program Have Fun Sending_Email.zip Edit : On Unit Cls_email : Modify this with your emal adress : IdSMTP.Username :='MyAdress@gmail.com'; // (1) IdSMTP.Password :='Mypw'; IdMessage.From.Address :='MyAdress@gmail.com'; // the same in (1) Personnal Setting (gmail) " Allow less secure apps " :
  21. 1 point
    I totally use your words and I also wait for the Qasar schedule, set up one in html to answer for now. Long live Unigui.
  22. 1 point
    Hi I am using uniGui For almost 2 years , and I agree that it was the best thing that happened to Delphi in as long as I remember, I think Mr. Farshad and the FMSoft Team is doing a good job , there is always a room for improvement and it can be faster but so far so good. I have finished my first project and it is very stable and working fine for 3 hotels so far no complains whatsoever. everyone is missing some feature and waiting for it to be released for example I was waiting for : 1- the Scheduler Quasar (2.0.0) 2- the UniDBgrid able to type without mouse click or press Enter I hope you all the best and may next year be better roadmap for FMSoft Regards
  23. 1 point
    Gerhard, Are we any closer with Mobile Themes ?
  24. 1 point
    This project is an integral system of Human Resources Management. It includes from the Hiring, Evaluation, Payment Processes, Integration to the banking network, Integration with biometric clocks for the registration of assistances.
  25. 1 point
    Hi, no solution for SAML 2.0 but in my case client also has OAuth2 authentication... So I made a half of a real good solution... In the LoginForm the user click on a button that redirect to sign-on Note: XXX is the name of the client procedure TUniLoginForm1.btNextXXXClick(Sender: TObject); var _XXXurl, _state: string; begin //redirect login _XXXurl:='https://login-dev.XXX.com/adfs/oauth2/authorize?response_type=code'+ '&resource=XXXClientPortal'+ '&client_id=a123-b456-c789'+ '&redirect_uri=http://dev.test.it:8077/?callback=XXX'; //add an encrypted string in parameter state that will returned back without modification _state:='&state='+XEncrypt(edCodCliente.Text+'|'+edCodUtente.Text+'|'+DateTimeToStr(NOW)+'|'+UniSession.SessionId); _XXXurl:=_XXXurl+_state; UniSession.UrlRedirect(_XXXurl); end; In MainModule procedure TUniMainModule.UniGUIMainModuleBeforeLogin(Sender: TObject; var Handled: Boolean); var _callback, _state: string; _CodUtente, _DataOra, _SessionID: string; begin if (not _FlStatoAutoLogin) then begin //check if arrived from callback _callback:=UniSession.UniApplication.Parameters.Values['callback']; _state:=UniSession.UniApplication.Parameters.Values['state']; if (_callback='XXX') and (_state<>'') then begin _state:=XDecrypt(_state); _CodClient:=GetStrPosiz(_state, '|', 1); _CodUtenteXXX:=GetStrPosiz(_state, '|', 2); _DataOra:=GetStrPosiz(_state, '|', 3); _SessionID:=GetStrPosiz(_state, '|', 4); if (MinutesBetween(StrToDateTime(_DataOra), NOW)<=5) and ChkExistSessionID(_SessionID) then begin _FlStatoAutoLogin:=True; Handled:=True; end; end; end; end; function TUniMainModule.ChkExistSessionID(SessionID: string): boolean; var _path: string; begin //look in files if exists a session with specific ID _path:=UniServerModule.CacheFolderPath+'cache\'+ ReplaceText(ExtractFileName(Application.ExeName), '.exe', '_exe')+'\'+ SessionID; Result:=(DirectoryExists(_path)); end; To exit and get again loginform, in Main.pas procedure TMainForm.UniFormClose(Sender: TObject; var Action: TCloseAction); begin if UniMainModule._FlStatoAutoLogin then begin UniSession.UrlRedirect('?'); Action:=caNone; end; end; The above it's just to authorize access to my unigui webapp...