Jump to content
uniGUI Discussion Forums


Popular Content

Showing content with the highest reputation since 04/27/20 in all areas

  1. 7 points
    Source: https://github.com/pleriche/FastMM5 Experience/opinions on FastMM5: https://en.delphipraxis.net/topic/2749-experienceopinions-on-fastmm5/ A very simple test of comparing an uniGUI app comipled with Native manager versus New FastMM5 manager : Native Manager: New FastMM5 Manager :
  2. 3 points
    I find a way to use google services with UniMap. I will start to implement google services one by one. - Route - Geocoding - Elevation and more
  3. 3 points
    Speed Test using "Stress Test Tool" Native Manager: 0:04:24 FastMM5: 0:01:57 Native Manager FastMM5
  4. 2 points
    I was constantly missing feature of find defined session. It very important in some cases. I show you idea (if I understand all properly): unit Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Uni, uniGUITypes, uniGUIAbstractClasses, uniGUIClasses, uniGUIRegClasses, uniGUIForm; //this case shows how to run a long query without stopping the interface //additional thread for query type THelpThread = class(TThread) private FQuery: TUniQuery; FSessionName: string; protected procedure Execute; override; public property Query: TUniQuery Read FQuery Write FQuery; property SessionName: string Read FSessionName Write FSessionName; end; type TMainForm = class(TUniForm) UniQuery1: TUniQuery; UniDataSource1: TUniDataSource; UniDBGrid1: TUniDBGrid; private FThread: THelpThread; procedure Thread1Finish(Sender: TObject); procedure StartCalcThread(const s: string); procedure AssignDataSet; { Private declarations } public { Public declarations } end; function MainForm: TMainForm; implementation {$R *.dfm} uses uniGUIVars, MainModule, uniGUIApplication; function MainForm: TMainForm; begin Result := TMainForm(UniMainModule.GetFormInstance(TMainForm)); end; { THelpThread } procedure THelpThread.Execute; begin inherited; if Query.State <> dsInactive then Query.Close; if not Query.Transaction.Active then Query.Transaction.StartTransaction; Query.Open; end; { TMainForm } procedure TMainForm.StartCalcThread(const s: string); begin //startin of query thread if not Assigned(FThread) then begin //the query UniQuery1.SQL.Clear; UniQuery1.SQL.Add('select MAPS.MAPS_SOURCE,'); UniQuery1.SQL.Add(s); UniQuery1.SQL.Add('from MAPS'); UniQuery1.SQL.Add('group by MAPS_SOURCE'); UniQuery1.SQL.Add('union'); UniQuery1.SQL.Add('select "all",'); UniQuery1.SQL.Add(s); UniQuery1.SQL.Add('from MAPS'); //off the grid DataSource UniDBGrid1.DataSource := nil; FThread := THelpThread.Create(True); FThread.Query := UniQuery1; FThread.OnTerminate := Thread1Finish; FThread.FreeOnTerminate := True; //store the session ID {!!!!} FThread.SessionName := UniSession.SessionId; //start querying FThread.Start; end; end; procedure TMainForm.Thread1Finish(Sender: TObject); begin //sync assigned of dataset with the grid TThread.Synchronize(nil, AssignDataSet); FThread := nil; end; procedure TMainForm.AssignDataSet; var Session: TUniGUISession; lMainModule: TUniMainModule; begin //find session by ID {!!!!} Session := UniServerModule.GetSession(FThread.SessionName); //get defined MainModule of session lMainModule := TUniMainModule(Session.UniApplication.UniMainModule); //get defined MainForm of session with TMainForm(lMainModule.GetFormInstance(TMainForm)) do //assigne dataset and DataSource with grid UniDBGrid1.DataSource := UniDataSource1; end; initialization RegisterAppFormClass(TMainForm); end.
  5. 2 points
    Yes I'm currently working on this feature
  6. 2 points
    Hello, Any work in progress done or expected time of arrival? Thanks, Ahmed.
  7. 2 points
  8. 1 point
    Oh...Perfect ! God bless you and your family Aaaamiiiiin......
  9. 1 point
    Client has asked for a proposal and the look and feel he's looking for is something similar to that shown on this Sencha sample (especially the left hand navigation bar) https://examples.sencha.com/coworkee/#home Is this kind of look and feel possible in uniGUI ? I've only ever used uniGUI as a trial and then my sample apps tend to look similar to Windows apps, just in a browser. Any advice gratefully received (especially if the client likes my proposal, that will pay for some uniGUI licenses - so win win all round).
  10. 1 point
    Спасибо. Одна проблема решена - с морганием при закрытии UniTabSheet.
  11. 1 point
    Why you are not setting grid or column readonly?
  12. 1 point
    Попробуйте с defer: UniTreeMenu1.JSInterface.JSCode(#1'.getStore().data.items.forEach(function(el){Ext.defer(function(){el.expand()}, 50)});');
  13. 1 point
    так, ещё один ответ нашел http://forums.unigui.com/index.php?/topic/8414-questions-about-unidbgrid/&amp;do=findComment&amp;comment=47669
  14. 1 point
    procedure TMainForm.UniFormAfterShow(Sender: TObject); begin OnAfterShow := nil; UniMemo1.Lines.Add('--- > OnAferShow'); end; more simple and linear
  15. 1 point
    ' context.fillStyle = ''#f00''; '+
  16. 1 point
    Hi Meaby this will help you: if Unisession.Language = 'de' then ...
  17. 1 point
    We updated the theme installer. Please download again.
  18. 1 point
    ajaxRequest(O1B,'checkCollapsed',['collapsed='+O1B.collapsed]); where O1B= UniFieldSet.jsName;
  19. 1 point
    Using one grid and one query, the result:
  20. 1 point
    Hi Dominique, Thank you for your feedback. I value your input here and I will try to address your concerns below. I understand your disappointment regarding our current development speed and release times. As I've always said, the development speed for uniGUI has never been constant. It can be quite fast at times or slow at other times. However, it is obvious that we have failed to keep up with the release dates announced in the latest roadmap. Again, roadmaps are not contracts. They're announced to let people know what is about to come in near future. There can be deviations from the roadmaps. We've succeeded to complete up to 80% of items in the 2019 roadmap. Without doubt the remaining 20% are very important items, including infinite grids, Linux and responsiveness support. The "light releases" that you have mentioned above are being released for past two months, that is correct. However, it is not true for the whole 2019. Year 2019 as a whole, is/was a very productive year for uniGUI. In this year many bugs have been fixed and many new features have been added. Please don't be disappointed simply because for our bad performance which can be counted only for past couple of months. A release interval of every three weeks seems to be OK from my point of view as long as each release addresses enough issues. That said, this situation will not stay the same. We are committed to the 2019 roadmap. All of the announced features in the roadmap will be implemented unless we state otherwise or revise the roadmap. We don't have any intention to revise the current roadmap. That said, obviously the dates in the roadmap need to be revised and shifted for a few months. While your views on current status of uniGUI are fully valid and understandable, I don't understand why you need to mention about a competitor here. First of all, comparing uniGUI to TMS Web Core is comparing apples to oranges. What makes uniGUI powerful is its server side integration with Delphi. It allows a seamless integration between Sencha Ext JS and Delphi. It will be a futile effort to try to explain what uniGUI is and what it can do, because all of you are already quite familiar with uniGUI. On the other hand, client side only web frameworks such as TMS Web Core adopt a totally different approach. The pseudo Pascal language they use can mimic Delphi language, but the whole environment is far from being Delphi! Delphi is not only about Pascal language. Delphi is about Object Pascal, database integration, third party tools and data aware components. Can you tell me to what level TMS allows to integrate your app with databases? You have complained about issues with DBLookupCombo, but do you have something similar in TMS Web? OK. I don't like to criticize other frameworks. I believe that all attempts to create 3rd party tools for Delphi are priceless and I wish success for all of them. However, TMS Web Core doesn't seem to belong to Delphi eco-system other than it's Pascal language. Someone can move away from Delphi Eco-system for several reasons. That happens all the time for various reasons, but many also decide to stay with Delphi for other uncountable reasons. For same reasons people choose uniGUI over other tools. 1) Maintaining Delphi licenses may cost you a few thousands annually. It can be pricey, I agree! As I told above, as soon as you decide to leave Delphi behind, there are many alternatives out there. TMS Web would be only one of them. Question here is that are you ready to loose all those benefits brought to you by Delphi and its eco-system? Maintaing Delphi can be expensive, but it can also save you from hiring more developers which can save you much more! It is not really about uniGUI, but about Delphi and its surrounding eco-system. 2) Good, but where is the original product named Delphi for PHP now? From what I know it is no longer around. 3) Free is not always free, especially when your time costs money $$$! 4) OK sounds good, but doesn't mean that you'll be more productive. 5) It's nice feature. Something that we also consider for the future. 6) It's a bit tricky. We were able to show data at design time since uniGUI 0.1 directly from a db table. However, when it comes to REST services, you need to create/configure one beforehand to be able to consume it in a designer. In my view, Delphi's data handling capabilities are still matchless. 7) If your app is so simple that you don't need a server, yes. Otherwise, you need to run a server for your database back-end and etc. 8) It is partly true for client side only sessions. But even for a minimal database work you need to extend your sessions to the server side. Which will complicate things even further. Your REST server will know nothing about your sessions. You must implement your server side session logic. 9) How about Delphi's existing 3rd party components? Such as reporting tools? 10) Already resolved in Ext JS. 11) Yes, you should also list the down sides. I have not fully reviewed the product, but I can mention some points here: You will not be able to use Delphi, its rich language, 3rd party libs and its powerful data aware components. Your code will run in client's browser which means your business logic will be exposed to outside world. What if your app is very big? I've seen uniGUI apps with hundreds of forms and data modules. How can such giant apps be loaded and run on client side? Almost all business web apps rely on heavy data consumption and manipulation. In this case you need to develop your server side business logic separately in a different tool and integrate it with your client web app. Consider that you have too many data tables on your server side. For each table these tasks should be repeated. Needless to say how these tasks are easily done in Delphi. In uniGUI you develop one application. You don't need to care about server side separately. Getting data from a REST server can be easy, but posting back, modifying specific rows, running complex queries can make your life harder than you can imagine. If you need computing power in your app, you will be limited to client browser CPU power. Since it is not native code your code will never run as fast as native CPU code. Don't forget that your code is translated into java script. On the other hand, servers are equipped with plenty of CPU cores, computing power and gigabytes of RAM. Since code runs in client browser. Your debugging and logging capabilities will be limited compared to server side code. OK. I'm not an expert in Web Core or similar frameworks. I'm not here to discredit their product. I wish them success, as I'm sure many people will find this kind of web development useful. What I'm trying to say here is that Web Core or similar frameworks can not be a replacement for uniGUI because they are not in same category with uniGUI. You can save that money today by simply switching to ASP.NET. I am here, but you are correct that I was mainly silent on the forums. I'm sorry for this. But "this" is not the "same" thing... The shown demo is a very very simple app. Not even an app. We need to see something more complicated, comparable to the simplest business web app that you can develop with uniGUI. Let me state again, through 10 years of my uniGUI endeavor I have never said a single negative word about competitor frameworks. We are busy with our own tasks not other people's stuff! The only reason that I made above comparison was that you have mentioned it here. Back to our own reality. We will be back to our full development speed soon. To compensate our deviation from roadmap I will extend all subscription dates for at least two months. I will further extend those dates if needed in the future. If we have failed to address any urgent bug, long awaited issue or question please go here. We will analyze your request and if we find your request acceptable then it will go to top of our to do list. Best regards, Farshad
  21. 1 point
    Hi,Please download source code and check it. I used panels and ClientSide table layout.
  22. 1 point
    I have created some UniGUI components for my project, in that way I can re-use the visual objects that I have implemented at ease. I just wanted to share my way of doing this with you guys. Any comments, technical critiques are welcome. 1. Creating the Component Package Since I have more than one custom components, I prefer to keep them in a Deplhi Package instead of individual self registering Delphi units. So we start with creating a component package in Delphi. File > New > Other > Delphi Projects > Package 2. Adding a TUNIFrame to The Package As the base of the components, I'm using TUNIFrame. We are going to add a TUNIFrame first. File > New > Other > Delphi Projects > uniGUI for Delphi > Frame 3. Adding Child Components Decorate your new TUNIFrame with existing UniGUI components as you wish. In this example, my frame looks like the picture below. I'm also renaming the frame. In this case the name is 'frame_myunipanel'. Don't forget to save unit files to disk. I named the files as unit_myunipanel. The visual object tree is shown below: And this is how the project tree looks like. I saved package with the name 'package_myunipanel'. I have only one unit; unit_myunipanel in the project tree. Our package has some dependencies: Right click on package_myunipanel.bpl > View Source from the pop-up menu. requires rtl, vcl, vclimg, dbrtl, soaprtl, vcldb, uIndy22, uniTools22, uniGUI22Core, uniGUI22, designide, uniGUI22Chart; contains unit_reg in 'unit_reg.pas', unit_myunipanel in 'unit_myunipanel.pas' {frame_myunipanel: TUniFrame}; 4. Adding The Registrar Unit To The Project At some point, we should tell Delphi to register our new component. We can do this in a plain Delphi unit. File > New > Other > Delphi Projects > Delphi Files > Unit Now we have a new unit in the package. I'm saving this unit as 'unit_reg.pas'. This is the final appearance of our package tree: Here is the tricky part, the registration. This is the unit_reg.pas. unit unit_reg; interface uses uniGUIFrame; procedure Register; implementation uses Classes, TreeIntf, unit_myunipanel; type TFrameClass = class of TUniFrame; procedure RegisterFramesAsComponents(const Page: string; const FrameClasses: array of TFrameClass); var FrameClass: TFrameClass; begin for FrameClass in FrameClasses do begin RegisterComponents(Page, [FrameClass]); RegisterSprigType(FrameClass, TComponentSprig); end; end; procedure Register; begin RegisterFramesAsComponents('UniGUI 3rd Party', [Tframe_myunipanel]); end; end. I did not add any published properties or methods to my panel yet. This is how the unit_myunipanel looks like. You can add properties and methods to your component just like you do with VCL units. unit unit_myunipanel; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uniGUITypes, uniGUIAbstractClasses, uniGUIClasses, uniGUIFrame, uniTrackBar, uniLabel, uniEdit, uniGUIBaseClasses, uniPanel; type Tframe_myunipanel = class(TUniFrame) UniContainerPanel1: TUniContainerPanel; UniEdit1: TUniEdit; UniLabel1: TUniLabel; UniTrackBar1: TUniTrackBar; private { Private declarations } public { Public declarations } end; implementation {$R *.dfm} end. 4. Installing the Component Right click on package_myunipanel.bpl > Install Voila! We are good to go. Now you can add this component to your UniGUI projects. PS: TreeIntf.pas is located in here: "c:\Program Files (x86)\Embarcadero\Studio\16.0\source\ToolsAPI\TreeIntf.pas" If your IDE can't find it, you might need to add it to your search path.
  23. 1 point
    Thank You. I'm sorry I (and other people) keep asking questions like this and the answer always seems to be some sort of JavaScript code. It seems it would be easier for you if when we ask a question like this you add this line of code to the event (in this case OnSelect) then no one will ask that question again. If that is too hard would one of you write an example of how to override the OnSelect (or any of them) event and we (your customers) can keep a wiki of descendant components?
  24. 1 point
    Hello friends. I took the examples and developed a component to generate graphs. The following example and sources. Improvements and suggestions, we will share. unigui_highcharts_Demo2.rar
  25. 1 point
    Hi all, try it using: chrome, firefox... for best rendering...ie is slow... psd file: here http://adan.co.il/unidsh.psd DashBoard.rar