Jump to content

eelias

Members
  • Posts

    117
  • Joined

  • Last visited

  • Days Won

    7

Everything posted by eelias

  1. Zilav, Thank you in sharing this important code. I have added the changes that Eldad Onojetah suggested and that fixed the problem as reported from others on this thread. I wonder if you have a newer version of your component and if you have added new options that you could share with us, including the fix. I am using in UniGUI 0.93, did you test on 0.94 and is working? Thank you Eduardo
  2. Hi there! I am using uniGUI 0.93 + XE2 and ServerModule.MainFormDisplayMode = mfPage What I need is in some moments open a new form (or dialog) on center of the page where I will have a particular frame inserted (to enter any information regarding the context); However I wanted that to not be like a regular form/dialog with border only, but with the rest of the surroundings with a semi transparent panel. That will make the user keep his visual context. This is like the current ShowDialog. But ShowDialog is a fixed purpose dialog, I want a form were I can do whatever is necessary but with the same behavior, as a modal window with the surroundings as semi transparent. Thank you Eduardo
  3. Hi Farshad, I am having the same problem. I need to design using the ScrollBox but at design time it does not show the scroll bars, causing a problem to work with controls that are not visible inside it. Is there anything can be done? Is the vcl correspondent component a ScrollBox? can I create an inherited component and active any property? Eduardo
  4. Farshad, I need the following information from you, I am entering in a project proposal where UniGUI will be used and from this project the license will be bought. 1) expected delivery date of the first release version 2) price for the Pro version with Source Code (1 developer) 3) commonly there is period of time when updates are free, like 1 year (see for example how it is with ElevateSoft, I have a license of DBISAM) 4) can I already buy an Pro license? Is it going to have discount? 5) are you going to resell extjs either? These are necessary to close my deal with the customer. thank you Eduardo Elias
  5. Delphi XE2 _ UniGui 0.93 I am using most of the time the BorderStyle := Solid on the controls that permit that. I am trying to have an all flat looking on my page. However TUniPageControl does not have this property, and it shows up with an 3d effect, maybe like the same as BorderStyle = Single. It could be good also that the TABS also to be drawn the same way, as an solid line, no 3d effect. Someone knows how to get that effect? Thank you!
  6. I have finally found where the problem is, after months of pain. http://www.devexpress.com/Support/Center/Question/Details/B143725 I use Dev Express componentes for other projects. It register a property editor called TdxPNGImage for handling PNG Images. It is based on the file extension, and as it is the last registered it is the default on my delphi installation. For any image stored internally on TUniImage.Picture it uses the TdxPNGImage to handle the PNG image and it is not compatible with uniGUI at webmode. Since I know many uses DevExpress I am posting here the solution for this problem. The workaround is described on the link above, however the easiest way is at the moment of loading the image that will be streamed in side the TUniIMage to select the CORRECT handler: http://www.devexpress.com/Support/Center/Attachment/GetAttachment?fileOid=7b2b28d8-5135-44d5-8560-70ec32fd0b6f&fileName=LoadPictureDialog.jpg You will see there is more than on PNG option on the list. UniGUI uses the "Portable Network Graphics (PNG)" option listed on the combobox. Selecting it will handle correctly. Eduardo
  7. This is not the fist time I post this, however I am in an urgent on this. I am using 0.93 with XE2 White PNG Images does not show in black backgrounds on ISAPI deploymens. However, a black PNG image does show always. If i turn off the transparent property, the image get all white. ServerModule is set to PNG as default. But changing it to JPG makes no difference. The same white image works as PNG on Standalone Server. Black Images need to be as TBitmap. If I use as PNG it does not show even on design mode. So what is wrong? Eduardo
  8. I am using UniGui 0.93 There is no such thing as ClientEvent when I drop the TUniChart on my Delphi Properties. I cannot access the ClientEvent dialog to add script on it. I could see on the TUniChart that this is from TUniPanel I guess. Because it does not implement it. What is wrong? Eduardo
  9. chefdackel, Well, I always had the hope to hear something. I understand that is hard to put a beta product, closed source from small company in an big project. It will take a long time until it get some space under the sun. However it seems to be more people with UniGUI than Intraweb. The "official" solution that could be used for such projects. Intraweb is just terrible and made many people go to aspx and abandon Delphi at all. I am interested on UniGUI because I have a lot of source code done on Delphi. Otherwise Delphis getting each time less interesting commercialy speaking. It will all depend on the final price of UniGUI, source availability (I dont want to deal with the source, but 99% of the projects that I do, the companies ask for the source code for security reason and that does not permit using UniGUI. They never touch the source code, I believe they even do not try to compile, but it is part of the deal) The price is other factor, a product close to 1,000USD without source? For example all Elevate products (DBISAM, etc) are below this and the source is part of it). So I am hoping that the product get released urgent. There is no need to more and more features with a reasonable price, eventually with or without source code. talked to much Eduardo
  10. This is not related to UniGUI. THere are many ways to do that. Take a look on this it should be easy and simple in any environment: http://www.cromis.net/blog/downloads/cromis-ipc/
  11. what are these apps? You mean comunication between user sessions? Do you mean comunicate between one UniGUI server with another UniGUI server (different servers)? Your question is not clear! Eduardo
  12. Thank you chefdackel, I am not sure if I am willing to change right now I really like DBISAM for some projects, because it is very simple, and more simple to install on customers. In fact this means that the UniGUI database components are not 100% compatible with the vcl guidelines for data connection. Besides DBISAM is pretty old, it is used on so many different projects, other grids, etc, that I dont believe this is a problem on DBISAM. However I have no option. I got rid of all the components on the form and use only editing inside the GRID. That made the posts work. However I get now eventually a "row mismatch" error, that seems to be another problem of the grid. Thank you ! Eduardo
  13. Hi there! I am using unigui 0.93.1.1000 with Delphi XE2 Attached there is a screen shot of the form I have created with unigui. The DBGrid ( number 1) is showing correctly the data. It comes from a DBISAM 4 table. The problem here is that I have 2 controls that are connected to the same DATASOURCE, the DBLookupListBox (number 2) and the DBMemo (Number 3) The DBGrid is not in Edit mode, i use it to display the value and to position to the desired record for change. UserRecNo = true FetchAll = True User select the ROW he wants to change and then click on the LookupListBox selecting the proper value. (for example "sim") It SHOULD change the table, however it does not happen! I have put a button to make a Dataset.Post, and could verify that if the user select a row on the grid and then select a different value on the LookupListBox it does not change the DataSet.State of the table. It remains on dsBrowse (it should go automatically to dsEdit) ***BUT*** If you click on the Row BEFORE this one that did not work, and then click BACK to it, and try again to change the value, it WORKS! It does change the DataSet.State to dsEdit To change the next record I have to follow always this behavior: Select the record to change, then click on the record before, click back again to the record to change (the it get somehow in sync) then the change will work. I have experimented this behavior of DBGrid in several moments. In some cases if I call DBGRid.Refresh it comes back working. But not in this case. This problem also happens with the current record position. You can change the row on the Grid but it does not reflect on the current selected RecNo. I have tested with every possible combination of DBGrid options and all remains the same. I have tested with other components instead of LookupListBox. Even the DbMemo has the problem. It let you type in a new value, but it does not change to edit and does not post the new value. Apparently the DBGrid does not let the record enter in Edit mode. Since I have this working without the grid. I am using DBISAM table in memory mode, this is an in memory work situation that will be fully saved when done. Any ideas? Thank you in advance! Eduardo
  14. Farshad, After hundreds of tests I could find a potential problem on uniGUI. My component (above) is fully working. I have instead loaded a BLACK image, used something else. It it worked. The problem is that somehow BLACK images are not showing up. I have tried gray image and it shows, but difficult to see. I have tried every possible combination, with our without transparency, etc. It seems the problem is when I assign the PNG. HOWEVER if I open the Load Image dialog box, for my PictureBlack property, I see the black image is there, as a PNG image. Then I click COPY, CLEAR and PASTE. Since this dialog only copies to clipboard as BITMAP, it transformed my image to bitmap. Then it WORKS ! But this is not nice. Why is TUniImage accepting only images that are no black? THe image file is not corrupt, since in VCL mode it shows up on design time. The framework is set to work with PNG images. I am loaging a lot of other images to TUniImages. It only does not work if you use UniImage.Graphich.Assign(sourceimage) Any Ideas? Eduardo
  15. Thanks on replying, "Keep in mind that webmode is very different than VCL and calling Windows API functions has no meaning in web mode." I am aware of that. And I understand the overall concept, that you use VCL components as an adapter to extpascal. However I can only experiment with no documentation. ThemeManager is a class (actually a component) of my infraestructure. It gives me the colors, font sizes etc. that my components based on UniGui uses to apply these properties. It is thread safe and besides the name there is no correlation with any other delphi or 3rd party vendor. It copies from the current theme the color, font, size, etc. Then all the panels, labels, buttons, etc, follow the same style. It is not the same as the ExTJS where themes are not only colors but rendering. THis is not the problem. The problem is that I have 2 TUniImage components that are created on the fly on tha TUniPanel. One shows up, other doesnt. The both TUniImage are of the same size. I use alignment to client. Then it follows the same size of the TUniPanel. It is a compound component. I used bringtofront and many other things trying to make one TUniImage disappear and the other shows up. I am trying to switch between then. If the background is black I need the TUniImage with the white image. And vice versa. All that logic works for me. However I dont know how to make the UniGUI understand that I need to switch between the TUniImages. Could you tell me how? Eduardo
  16. This is been a big problem for me. Unigui 0.93 I have tried may different ways and I dont know what to do anymore. I have an infraestructure that is hard to share a test case. I wonder if someone could point what is the problem. This component is a kind of button, but based on the TUniImage. I have 2 images, one black other white. According with the background color on my theme (not extjs theme) it calculates the highcontrast color and select the proper image to display. I have tried to use ONE TUniImage and load the PNG property, from black or white when needed. BUT IT DOES NOT WORK in webmode. It causes an exception of 'nnn' file extension not recognized. So I decided to use TUniPanel as the inherited class and create 2 TUniImages. One black and other white. THen I turn visible the one that I need. I have tried so many things that code is looking weird. However it ALWAYS work on VCL mode. In the WEB mode only the white picture shows up. The other one does not work. Above is the complete code of this component. It relies in other components and classes, but everything works, the only problem is when the TUniImage with the black image needs to show up. unit NaharWebFlatButton; interface uses Nahar.Theme, NaharWebFrame, NaharWebThemeController, Vcl.ExtCtrls, Vcl.StdCtrls, pngimage, System.SysUtils, System.Classes, Vcl.Controls, uniGUIBaseClasses, PngFunctions, uniGUIClasses, uniImage, UniPanel, Vcl.Graphics, UniGuiTypes, uniLabel; type TNaharWebFlatButton = class(TUniPanel) private FThemeColor : TNaharPalleteColor; FCaption: string; FPictureBlack: TPicture; FPictureWhite: TPicture; FShowCaption: boolean; FOnClick: TNotifyEvent; FThemeFont: TNaharPalleteFont; procedure OnObserver(Sender: TObject; AParam, AValue: Variant); procedure UpdateColor; procedure SetThemeColor(const Value: TNaharPalleteColor); function GetThemeManager: TNaharThemeManager; procedure SetCaption(const Value: string); procedure SetShowCaption(const Value: boolean); procedure OnPictureClick(Sender: TObject); procedure SetOnClick(const Value: TNotifyEvent); procedure SetPictureBlack(const Value: TPicture); procedure SetPictureWhite(const Value: TPicture); procedure SetThemeFont(const Value: TNaharPalleteFont); protected FThemeController: TNaharThemeController; FImageWhite: TUniImage; FImageBlack: TUniImage; FLabel: TUnilabel; procedure Loaded; override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; property ThemeManager: TNaharThemeManager read GetThemeManager; published property ThemeColor: TNaharPalleteColor read FThemeColor write SetThemeColor default npcMainColor; property ThemeFont: TNaharPalleteFont read FThemeFont write SetThemeFont default npfBody; property PictureWhite: TPicture read FPictureWhite write SetPictureWhite; property PictureBlack: TPicture read FPictureBlack write SetPictureBlack; property Caption: string read FCaption write SetCaption; property ShowCaption: boolean read FShowCaption write SetShowCaption; property Width default 25; property Height default 25; property OnClick: TNotifyEvent read FOnClick write SetOnClick; end; procedure Register; implementation procedure Register; begin RegisterComponents('NaharWeb Standard', [TNaharWebFlatButton]); end; { TNaharWebFlatButton } constructor TNaharWebFlatButton.Create(AOwner: TComponent); begin inherited; FPictureBlack := TPicture.Create; FPictureWhite := TPicture.Create; Width := 25; Height := 25; BorderStyle := ubsNone; FImageWhite := TUniImage.Create(self); FImageWhite.Parent := self; FImageWhite.Align := alNone; FImageWhite.Center := true; FImageWhite.Proportional := true; FImageWhite.Transparent := true; FImageWhite.Stretch := true; FImageWhite.OnClick := OnPictureClick; FImageWhite.Tag := -1; FImageBlack := TUniImage.Create(self); FImageBlack.Parent := self; FImageBlack.Align := alNone; FImageBlack.Center := true; FImageBlack.Proportional := true; FImageBlack.Transparent := true; FImageBlack.Stretch := true; FImageBlack.OnClick := OnPictureClick; FImageBlack.Tag := -1; FLabel := TUniLabel.Create(Self); FLabel.Parent := Self; FLabel.Visible := false; FLabel.Align := alBottom; FLabel.Alignment := taCenter; FLabel.Text := ''; Caption := ''; // FImage.Picture.RegisterFileFormat('nnn', '', TPngImage); FThemeColor := npcMainColor; FThemeFont := npfBody; FThemeController := LocateThemeController(AOwner); ThemeManager.AddObserver(OnObserver); UpdateColor; end; destructor TNaharWebFlatButton.Destroy; begin ThemeManager.RemoveObserver(OnObserver); FPictureBlack.Free; FPictureWhite.Free; FImageWhite.Free; FImageBlack.Free; FLabel.Free; inherited; end; function TNaharWebFlatButton.GetThemeManager: TNaharThemeManager; begin if Assigned(FThemeController) then result := FThemeController.ThemeManager else result := NaharThemeManager; end; procedure TNaharWebFlatButton.Loaded; begin inherited; if not PictureBlack.Graphic.Empty then FImageBlack.Picture.Assign(PictureBlack); if not PictureWhite.Graphic.Empty then FImageWhite.Picture.Assign(PictureWhite); UpdateColor; end; procedure TNaharWebFlatButton.OnObserver(Sender: TObject; AParam, AValue: Variant); begin if AParam = 'currentpalletechanged' then UpdateColor; end; procedure TNaharWebFlatButton.OnPictureClick(Sender: TObject); begin if Assigned(FOnClick) then FOnClick(Self); end; procedure TNaharWebFlatButton.SetCaption(const Value: string); begin FCaption := Value; UpdateColor; end; procedure TNaharWebFlatButton.SetOnClick(const Value: TNotifyEvent); begin FOnClick := Value; end; procedure TNaharWebFlatButton.SetPictureBlack(const Value: TPicture); begin if Assigned(Value) then begin FPictureBlack.Assign(Value); FImageBlack.Picture.Assign(PictureBlack); end; UpdateColor; end; procedure TNaharWebFlatButton.SetPictureWhite(const Value: TPicture); begin if Assigned(Value) then begin FPictureWhite.Assign(Value); FImageWhite.Picture.Assign(PictureWhite); end; UpdateColor; end; procedure TNaharWebFlatButton.SetShowCaption(const Value: boolean); begin FShowCaption := Value; UpdateColor; end; procedure TNaharWebFlatButton.SetThemeColor(const Value: TNaharPalleteColor); begin FThemeColor := Value; UpdateColor; end; procedure TNaharWebFlatButton.SetThemeFont(const Value: TNaharPalleteFont); begin FThemeFont := Value; UpdateColor; end; procedure TNaharWebFlatButton.UpdateColor; var HCColor : TColor; begin if ShowCaption then begin FLabel.Visible := true; FLabel.Align := alBottom; FLabel.Text := FCaption; FLabel.Alignment := taCenter; FLabel.Font.Size := Self.Font.Size; FLabel.Font.Name := Self.Font.Name; FLabel.Font.Style := Self.Font.Style; FLabel.Font.Color := Self.Font.Color; end else begin FLabel.Visible := false; FLabel.Text := ''; FLabel.Align := alNone; end; if (FThemeColor = npcNone) or (FThemeColor = npcUnknown) then HCColor := ThemeManager.CurrentPallete.HighContrastColor(Color) else HCColor := ThemeManager.CurrentPallete.HighContrast(FThemeColor); if HCColor = clWhite then begin FImageWhite.Align := alClient; FImageWhite.Visible := true; FImageWhite.BringToFront; FImageBlack.Align := alNone; FImageBlack.Visible := false; end; if HCColor = clBlack then begin FImageWhite.Align := alNone; FImageWhite.Visible := false; FImageBlack.Visible := true; FImageBlack.Align := alClient; FImageBlack.BringToFront; end; if (FThemeColor = npcNone) or (FThemeColor = npcUnknown) then exit; Color := ThemeManager.CurrentPallete.Color[FThemeColor]; Font.Color := ThemeManager.CurrentPallete.HighContrast(FThemeColor); Font.Name := ThemeManager.CurrentPallete.Font[FThemeFont].FontName; Font.Size := ThemeManager.CurrentPallete.Font[FThemeFont].Size; if ShowCaption then begin FLabel.Font.Name := Self.Font.Name; FLabel.Font.Color := Self.Font.Color; FLabel.Font.Size := Self.Font.Size; end; end; end. Please, if someone could point me what is the problem, why only one show up. Eduardo
  17. Peter, Nice to hear from you. I took a look on some stress applications. I wanted to know what Farshad used on the uniGui case. In fact there are different things like you said. On thing is to test server load, that is mainly connected to the fact of creation of the sessions and the first sending of a page. Other thing is to stress test every situation on the software, simulating user usage. This last option is very complicated to be implemented, I had experience on this on the past on windows applications and is a huge problem. Most of the time there is a need to have a programmer full time only writing scripts and updating old ones to keep the testing tool working. Too much for me right now. But doing unit testing on the software I can cover most of the problems. That is fine. The problem is the server load test. It is easy to say that if the server has the resources it will handle. In fact that is not true. For example, Apache server can handle 6,000 simultaneos connections in the same server. If you double the server capacity it does not double the number of connections. Actually when you reach 10,000 connection you get stuck. Linux keep so much time trying to find a thread to listen to the new connection that it start loosing new connections. And even if you get a server 4x faster and with more resorces it simple does not happen because there is OS limitations! (number of file handles for example) I know uniGUI is young compared to other technologies and it will take time until it can get first grade tasks for it. Most of the time it will be used for extranets and thing like that where the server load if way much low. I am considering use the uniGUI for back-end, where the software is complex and delphi will work great and propably use http.sys, that is windows driver mode http server. It is a full featured http server that can manage huge loads of traffic and connections and it is part of the windows server kernel. When a new connection arrives it does look for a working thread, but while doing it, it does not lost new connections, because it is part of the kernel. So even if the working threads are slowing attending for a momment it will not lost the incoming connection. If unigui was wrote using this (yes it is possible) instead of indy I could tell you it can handle such number of connections. Indy works but it is a old technology. Not optmized in many ways. Eventually I am wrong considering uniGUI for such scenario, since there is no need for uniGUI satisfy everything. It is good for extranets and some kind of website services. But not for this case. I was wondering to hear what the community has experienced. Thanks Eduardo
  18. uniGUI is server based. It means that the processing of each request on client side go to the server to be processed. A disconected application is good and necessary, however you have to have the software running locally, and not server based. Even more difficult if you need to work part local and part server. Using phonegap or other frameworks you can use sencha/extjs to create local applications. Than you preserve the fell and locking of uniGUI for those users that you need to be local only. Then when connected to internet you could jump to uniGUI back again. For the user you will have the same look and feel however you need to do that. I dont think is ever possible for uniGUI doing this. my 2 cents. Eduardo
  19. +1 Adding to this one: If possible a way to customize this panel and the tray icon. I want to put more information to monitor, in my languague (portuguese) and some commands for the admin. So a way to replace the standard panel to a customizable one would be great. Eduardo
  20. Farshad, Fantastic! I am becoming a fan of your product and expect to be a real customer soon! While that, I am activelly spreading the project to get to know. Well, you show the candy, what is your idea about delivery? Is it going to be possible to have both sencha and extjs in the same application? I am doing a uniGUI application where the users also access by tablet and cellphone. If I could identify from where they are coming and switch to the best framework available it could be good. Of course I should create the code for each case, but instead of showing the ExtJS standard implementation I could switch to a form/frame based on sencha for that particular session, because the user is in an android. Other generic forms I could keep showing on extjs, to not have a big work writing twice each. Flexibility is the key for success on this platform! What you think? Eduardo
  21. I will contact you directly! Thank you!
  22. Farshad, Is it possible to share with us how you made this test? I have no doubt about it, however to put this in a real case I would like to simulate the same cenario you made and then try to push higher and see what we get. If you used a stress tool could you tell which one, or if you made one do you mind in share it with us? I really need to test it before give a formal proposal to the customer. Right now I see there is a need of a lot of memory, but I have no idea of whatever is the parameters, even for the cenario you tested. If you can share the overall client and server configuration would be great. Thank you ! Eduardo
  23. Farshad, My concern is that for each new session there is a overhead. A thread when created allocate memory, create objects, and this is the framework part, the . When there is so many simultaneos calls the cycles to create each new session, for the simpliest possible form with few fields, will count. So in this case where is the experience that you have on that? Do you know any case with that much accesses with uniGUI? or close? Thank you! Eduardo
  24. Hi Ronny, Sorry about that. I share here my comments translated: "Thank you for your post But I wanted to know real cases in number of accesses. Do you have any application with high demand of concurrency? With uniGUI as the page generator? I have noteded that depending on how the application is made, Unigui use a lot of memory from the server. I am having my firsts experiencies with success until now. However it eats a lot of memory and 20 thousand open sessions is a lot! I am certaing to use it for the front-end system, where there is at max 100 concurrent users But in the part of providing pages for the clentes I am very afraid of use it." Eduardo
  25. Ola Eduardo, Obrigado pela sua opiniao, Porem eu gostaria de saber de casos reais em numeros de acesso. Voce tem alguma aplicacao com alta taxa de concorrencia? Tendo o uniGui como o gerador das paginas? Eu notei que dependendo como de se faz a apliacacao o UniGui usa muita memoria no servidor. Estou tendo minhas primeiras experiencias com ele e tive sucesso ate entao. Porem é glutao de memoria e 20 mil sessoes abertas eh bastante coisa! Eu tenho certeza que irei usar ele para o sistema de front-end, onde tera no maximo 100 concorrentes. Porem na parte do provedor para os client estou muito receoso de usa-lo! Eduardo
×
×
  • Create New...