Jump to content

elGringo

uniGUI Subscriber
  • Posts

    434
  • Joined

  • Last visited

  • Days Won

    13

Everything posted by elGringo

  1. On simple HTTP Server i'am doing smth like this in OnCommandGet begin URIDecoded := TNetEncoding.URL.Decode(ARequestInfo.URI); IsWebPage := false; if IsFileOnServerByURI(URIDecoded, filepath, IsWebPage, WebPageContent) then begin AResponseInfo.ResponseNo := 200; if IsWebPage then AResponseInfo.ContentText := WebPageContent else AResponseInfo.ServeFile(AContext, filepath); end else AresponseInfo.ResponseNo := 404; end; But in UniGUI there is no AContext param...
  2. hi, looks like simple task, but cannot understand what am i doing wrong having <a href="UploadFolder/TestFile.txt">TestFile.txt</a> on Server doing procedure TUniServerModule.UniGUIServerModuleHTTPCommand(ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo; var Handled: Boolean); var uriWinSlash: string; filepath: string; ext: string; begin // ext := ExtractFileExt(ARequestInfo.URI); if ext <> '' then begin uriWinSlash := StringReplace(ARequestInfo.URI, '//', '', [rfReplaceAll]); uriWinSlash := StringReplace(uriWinSlash, '/', '\', [rfReplaceAll]); if uriWinSlash[1] = '\' then uriWinSlash := uriWinSlash.Substring(1); filepath := UniServerModule.StartPath + uriWinSlash; // AResponseInfo.ServeFile(AContext, filepath); UniSession.SendFile(filepath); // << here mistake // Handled := true; end; end; but having mistakes in work of Server if even not downloading... What's up? Any other ideas how to download file from HTML code?
  3. hi, Bresler! Thank you very much for suggestion. Frankly speaking i don't know from which side to start with ClientAlignment. Because it is absolutely different concept. I'm learning clear ExtJS but i am not too strong in it for the moment. I think i will finish project and will come back to this template to improve it. Thanks, again!
  4. Yes, but first priority to finish project. I will post here English version in 2 weeks, hope. You just say what you need more in template.
  5. there is answer on post from other thread i don't waste Farshad Energy ) I do it by mySelf as experiment in name of love to this framwork. No competition to PHP or etc. Just i was interested to turn it to popular tasks. That's all. In success case it could be added as Demo. There are things to complete this template - turn it to clientSide for example. Ruslan, on 06 Apr 2018 - 06:58 AM, said:
  6. hi, maybe you missed the thread, but answer here... i don't waste Farshad Energy ) I do it by mySelf as experiment in name of love to this framwork. No competition to PHP or etc. Just i was interested to turn it to popular tasks. That's all. In success case it could be added as Demo. There are things to complete this template - turn it to clientSide for example.
  7. hi, basically 0. set project to mfPage 1. send ajax requests from browser. Main - > ClientEvents -> ExtEvents -> Ext.form.Panel function form.afterrender(sender, eOpts) { var width=Ext.getBody().getViewSize().width; var height=Ext.getBody().getViewSize().height; ajaxRequest(sender, 'formAfterRender', [ 'width='+width,'height='+height]); } function form.resize(sender, width, height, oldWidth, oldHeight, eOpts) { //var browserWidth=Ext.getBody().getViewSize().width; //var browserHeight=Ext.getBody().getViewSize().height; //ajaxRequest(sender, 'formResize', [ 'width='+browserWidth,'height='+browserHeight]); ajaxRequest(sender, 'formResize', [ 'width='+width,'height='+height,'oldWidth='+oldWidth,'oldHeight='+oldHeight]); } 2. On Server Side procedure TMainForm.UniFormAjaxEvent(Sender: TComponent; EventName: string; Params: TUniStrings); function getWidthOrHeightValue(aParamValue: string): integer; begin result := -1; if aParamValue = 'undefined' then result := -1 else result := aParamValue.ToInteger(); end; var browserWidth: string; begin //formResize if SameText(EventName, 'formResize') then begin if Params.Values['height'] <> '' then begin pTop.Top := 0; pTop.Left := 0; pTop.Width := Params.Values['width'].ToInteger(); //ajaxRequest(sender, 'formResize', [ 'width='+width,'height='+height,'oldWidth='+oldWidth,'oldHeight='+oldHeight]); pTop.Caption := 'new WxH:' + Params.Values['width'] + 'x' + Params.Values['height'] + ';'// + 'old WxH:' + Params.Values['oldWidth'] + 'x' + Params.Values['oldHeight']; // ScrollBox.Left := 0; ScrollBox.Top := pTop.Height; ScrollBox.Width := Params.Values['width'].ToInteger(); ScrollBox.Height := Params.Values['height'].ToInteger() - 20; // browser height //TopMenu FCurrPage.TopMenu.OnAfterRender( // getWidthOrHeightValue(Params.Values['width']), // getWidthOrHeightValue(Params.Values['height']) // ); // CurrentPage FCurrPage.Top := 0; FCurrPage.Left := 0; FCurrPage.Width := Params.Values['width'].ToInteger() - 20; // FCurrPage.OnBrowserResize( // getWidthOrHeightValue(Params.Values['width']), // getWidthOrHeightValue(Params.Values['height']), // getWidthOrHeightValue(Params.Values['oldWidth']), // getWidthOrHeightValue(Params.Values['oldHeight']) // ); // FPagesDM.OnBrowserResize( // getWidthOrHeightValue(Params.Values['width']), // getWidthOrHeightValue(Params.Values['height']), // getWidthOrHeightValue(Params.Values['oldWidth']), // getWidthOrHeightValue(Params.Values['oldHeight']) // ); end; end; // if SameText(EventName, 'formAfterRender') then begin ScrollBox.Left := 0; ScrollBox.Top := pTop.Height; ScrollBox.Width := Params.Values['width'].ToInteger(); ScrollBox.Height := Params.Values['height'].ToInteger() - 20; // browser height // browserWidth := Params.Values['width']; // FCurrPage.TopMenu.OnAfterRender( // getWidthOrHeightValue(Params.Values['width']), // getWidthOrHeightValue(Params.Values['height']) // ); // FCurrPage.Top := 0; FCurrPage.Left := 0; FCurrPage.Width := Params.Values['width'].ToInteger() - 20; FCurrPage.OnAfterRender( // getWidthOrHeightValue(Params.Values['width']), // getWidthOrHeightValue(Params.Values['height']) // ); // FPagesDM.OnAfterRender( // getWidthOrHeightValue(Params.Values['width']), // getWidthOrHeightValue(Params.Values['height']) // ); end; end; for each form, component or something i provide afterRender procedures and onBrowserResize Also i created 3 views in uCommon unit type TView = (smallView, middleView, bigView); and borders between views const leftWidthBorder = 985; const rightWidthBorder = 1024; for example take a look at code of TopMenu unit uTopMenu; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, uniGUITypes, uniGUIAbstractClasses, uniGUIClasses, uniGUIFrame, uniGUIBaseClasses, uniPanel, uTopMenuElement, System.Generics.Collections, uSearchFrame, uCommon; type TTopMenu = class(TUniFrame) pContent: TUniPanel; procedure UniFrameCreate(Sender: TObject); procedure UniFrameDestroy(Sender: TObject); private FOL: TObjectList<TTopMenuElement>; FNameCount: integer; FSearchFrame: TSearchFrame; FBrowserWidth: integer; procedure SetOL(const Value: TObjectList<TTopMenuElement>); procedure resizeView(aBrowserWidth: integer); procedure setView(aView: TView); { Private declarations } public { Public declarations } procedure OnAfterRender(aWidth, aHeight: integer); procedure OnBrowserResize(aWidth, aHeight, aOldWidth, aOldHeight: integer); procedure PositionElements(aView: TView); property OL: TObjectList<TTopMenuElement> read FOL write SetOL; end; implementation {$R *.dfm} { TTopMenu } uses MainModule; procedure TTopMenu.OnAfterRender(aWidth, aHeight: integer); begin FBrowserWidth := aWidth; resizeView(FBrowserWidth); end; procedure TTopMenu.OnBrowserResize(aWidth, aHeight, aOldWidth, aOldHeight: integer); begin resizeView(FBrowserWidth); end; procedure TTopMenu.setView(aView: TView); begin if aView = smallView then positionElements(smallView) else if aView = middleView then positionElements(middleView) else if aView = bigView then PositionElements(bigView); end; procedure TTopMenu.resizeView(aBrowserWidth: integer); begin if aBrowserWidth > rightWidthBorder then setView(bigView) else if (aBrowserWidth > leftWidthBorder) and (aBrowserWidth <= rightWidthBorder) then setView(middleView) else if aBrowserWidth < leftWidthBorder then setView(smallView); end; procedure TTopMenu.PositionElements(aView: TView); var i: Integer; begin if aView = smallView then begin Self.Visible := false; end else if aView = middleView then begin Self.Visible := true; if FOL.Count > 0 then // 1-st element begin FOL[0].width := 80; FOL[0].Parent := pContent; FOL[0].Top := 0; FOL[0].Left := 0 + 7; FOL[0].lMenuElement.Font.Size := 12; FOL[0].CenterLabel(); end; if FOL.Count > 1 then // other elements begin for i := 1 to FOL.Count - 1 do begin FOL[i].width := 80; FOL[i].Parent := pContent; FOL[i].Top := 0; FOL[i].lMenuElement.Font.Size := 12; FOL[i].Left := FOL[i - 1].Left + FOL[i - 1].Width + 10; // distance between elements FOL[i].CenterLabel(); end; end; FSearchFrame.Top := 11; FSearchFrame.Left := 10 + FOL[FOL.Count - 1].Left + FOL[FOL.Count - 1].Width; end else if aView = bigView then begin Self.Visible := true; if FOL.Count > 0 then // 1-st element begin FOL[0].width := 100; FOL[0].Parent := pContent; FOL[0].Top := 0; FOL[0].Left := 0 + 7; FOL[0].lMenuElement.Font.Size := 13; FOL[0].CenterLabel(); end; if FOL.Count > 1 then // other elements begin for i := 1 to FOL.Count - 1 do begin FOL[i].width := 100; FOL[i].Parent := pContent; FOL[i].Top := 0; FOL[i].lMenuElement.Font.Size := 13; FOL[i].Left := FOL[i - 1].Left + FOL[i - 1].Width + 10; // 10 is distance between elements FOL[i].CenterLabel(); end; end; FSearchFrame.Top := 11; FSearchFrame.Left := 10 + FOL[FOL.Count - 1].Left + FOL[FOL.Count - 1].Width; end; end; procedure TTopMenu.SetOL(const Value: TObjectList<TTopMenuElement>); begin FOL := Value; end; procedure TTopMenu.UniFrameCreate(Sender: TObject); procedure addTopMenuItem(aName, URL: string); var i: integer; begin i := FOL.Add(TTopMenuElement.Create(Self)); FOL[i].Parent := Self; FOL[i].Name := FOL[i].Name + FNameCount.ToString; FOL[i].URL := URL; // inc(FNameCount); FOL[i].lMenuElement.Caption := aName; end; begin FOL := TObjectList<TTopMenuElement>.Create(true); FSearchFrame := TSearchFrame.Create(Self); FSearchFrame.Parent := Self; FNameCount := 0; addTopMenuItem('Акции', UniMainModule.PagesSL[1]); addTopMenuItem('Каталог', UniMainModule.PagesSL[2]); addTopMenuItem('Оплата', UniMainModule.PagesSL[3]); addTopMenuItem('Доставка', UniMainModule.PagesSL[4]); addTopMenuItem('Обучение', UniMainModule.PagesSL[5]); addTopMenuItem('Магазины', UniMainModule.PagesSL[6]); addTopMenuItem('Сервис', UniMainModule.PagesSL[7]); // PositionElements; end; procedure TTopMenu.UniFrameDestroy(Sender: TObject); begin FOL.Free(); end; end.
  8. found by mySelf http://www.unigui.com/doc/online_help/eurekalog.htm for future Seekers
  9. Hm... " Please read our docs regarding using EurekaLog with uniGUI." Could you share the link?
  10. ok, i did this, it put me to System unit procedure TObject.FreeInstance; begin CleanupInstance; _FreeMem(Pointer(Self)); end;
  11. What is the fastest way? Does it mean - some error in code? Maybe some tool for this? Could you give me advice to find error. Thanks.
  12. hi, on one of my projects, server falling almost everyDay What could you advice to me to avoid this mistake? Project is high loaded and intensively used. having error in windows form and logs Problem signature: Problem Event Name: BEX Application Name: SalesForecast.exe Application Version: 1.0.0.0 Application Timestamp: 5ac4b522 Fault Module Name: StackHash_cd17 Fault Module Version: 0.0.0.0 Fault Module Timestamp: 00000000 Exception Offset: PCH_73_FROM_ntdll+0x0003CA2C Exception Code: c0000005 Exception Data: 00000008 OS Version: 6.3.9600.2.0.0.272.7 Locale ID: 1049 Additional Information 1: cd17 Additional Information 2: cd17cf177ac3da379ad899f681052180 Additional Information 3: cfa1 Additional Information 4: cfa1a2f53c41d508ff472c5953db9675 Read our privacy statement online: http://go.microsoft.com/fwlink/?linkid=280262 If the online privacy statement is not available, please read our privacy statement offline: C:\Windows\system32\en-US\erofflps.txt Logs SalesForecast.exe: 00000880: 01:03:45 []:EInvalidPointer : Invalid pointer operation : Addr: $00409DFD SalesForecast.exe: 00000880: 01:04:05 []:EInvalidPointer : Invalid pointer operation : Addr: $00409DFD SalesForecast.exe: 00000880: 03:08:46 []:EInvalidPointer : Invalid pointer operation : Addr: $00409DFD SalesForecast.exe: 00000E14: 09:32:41 [HandleFileRequest[79.140.21.173]]:File not found: C:\Program Files (x86)\FMSoft\Framework\unigui\ext-4.2.5.1763\locale\ext-lang-ru,en;q=0.9.js SalesForecast.exe: 00000B8C: 09:32:42 [HandleFileRequest[79.140.21.173]]:File not found: C:\Program Files (x86)\FMSoft\Framework\unigui\ext-4.2.5.1763\locale\ext-lang-ru,en;q=0.9.js SalesForecast.exe: 00000A0C: 09:32:42 [HandleFileRequest[79.140.21.173]]:File not found: C:\Program Files (x86)\FMSoft\Framework\unigui\ext-4.2.5.1763\locale\ext-lang-ru,en;q=0.9.js SalesForecast.exe: 00000880: 09:42:44 []:EInvalidPointer : Invalid pointer operation : Addr: $00409DFD SalesForecast.exe: 00000880: 09:42:44 []:EInvalidPointer : Invalid pointer operation : Addr: $00409DFD SalesForecast.exe: 00000880: 10:14:40 []:EInvalidPointer : Invalid pointer operation : Addr: $00409DFD SalesForecast.exe: 00000880: 10:41:40 []:EInvalidPointer : Invalid pointer operation : Addr: $00409DFD SalesForecast.exe: 00000880: 11:09:05 []:EInvalidPointer : Invalid pointer operation : Addr: $00409DFD SalesForecast.exe: 00000E4C: 14:08:42 [79.140.21.173]:UniErrorException : Event:click, Object: O2BC not found in session list. It could be timed out, refresh page and try again : Addr: $00000000 SalesForecast.exe: 00000B90: 14:08:44 [79.140.21.173]:UniErrorException : Event:click, Object: O2BC not found in session list. It could be timed out, refresh page and try again : Addr: $00000000 SalesForecast.exe: 00000BA4: 14:08:44 [79.140.21.173]:UniErrorException : Event:click, Object: O2BC not found in session list. It could be timed out, refresh page and try again : Addr: $00000000 SalesForecast.exe: 00000E68: 14:08:44 [79.140.21.173]:UniErrorException : Event:click, Object: O2BC not found in session list. It could be timed out, refresh page and try again : Addr: $00000000 SalesForecast.exe: 00000E68: 14:08:48 [79.140.21.173]:UniErrorException : Event:selectionchange, Object: O2E4 not found in session list. It could be timed out, refresh page and try again : Addr: $00000000 SalesForecast.exe: 00000E4C: 14:08:49 [79.140.21.173]:UniErrorException : Event:click, Object: O4E3 not found in session list. It could be timed out, refresh page and try again : Addr: $00000000 SalesForecast.exe: 00000880: 14:09:05 []:EInvalidPointer : Invalid pointer operation : Addr: $00409DFD SalesForecast.exe: 00000880: 14:10:20 []:EInvalidPointer : Invalid pointer operation : Addr: $00409DFD SalesForecast.exe: 00000880: 14:30:03 []:EInvalidPointer : Invalid pointer operation : Addr: $00409DFD SalesForecast.exe: 00000880: 14:57:06 []:EInvalidPointer : Invalid pointer operation : Addr: $00409DFD SalesForecast.exe: 00000880: 16:08:36 []:EInvalidPointer : Invalid pointer operation : Addr: $00409DFD SalesForecast.exe: 00000880: 16:10:21 []:EInvalidPointer : Invalid pointer operation : Addr: $00409DFD SalesForecast.exe: 00000880: 16:16:56 []:EInvalidPointer : Invalid pointer operation : Addr: $00409DFD SalesForecast.exe: 00000880: 16:22:12 []:EInvalidPointer : Invalid pointer operation : Addr: $00409DFD SalesForecast.exe: 00000880: 16:23:22 []:EInvalidPointer : Invalid pointer operation : Addr: $00409DFD SalesForecast.exe: 00000880: 16:26:42 []:EInvalidPointer : Invalid pointer operation : Addr: $00409DFD SalesForecast.exe: 00000880: 16:26:52 []:EInvalidPointer : Invalid pointer operation : Addr: $00409DFD SalesForecast.exe: 00000CAC: 16:48:20 [79.140.21.173]:EUniSessionException : Invalid session or session Timeout. : Addr: $00791CA3 SalesForecast.exe: 00000FE8: 16:48:20 [79.140.21.173]:EUniSessionException : Invalid session or session Timeout. : Addr: $00791CA3 SalesForecast.exe: 00000E30: 16:48:20 [79.140.21.173]:EUniSessionException : Invalid session or session Timeout. : Addr: $00791CA3 SalesForecast.exe: 00000B58: 16:48:20 [79.140.21.173]:EUniSessionException : Invalid session or session Timeout. : Addr: $00791CA3 SalesForecast.exe: 00000F4C: 16:48:20 [79.140.21.173]:EUniSessionException : Invalid session or session Timeout. : Addr: $00791CA3 SalesForecast.exe: 00000D38: 16:48:20 [79.140.21.173]:EUniSessionException : Invalid session or session Timeout. : Addr: $00791CA3 SalesForecast.exe: 00000CF8: 16:48:20 [79.140.21.173]:EUniSessionException : Invalid session or session Timeout. : Addr: $00791CA3 SalesForecast.exe: 00000ED4: 16:48:20 [79.140.21.173]:EUniSessionException : Invalid session or session Timeout. : Addr: $00791CA3 SalesForecast.exe: 00000D28: 16:48:20 [79.140.21.173]:EUniSessionException : Invalid session or session Timeout. : Addr: $00791CA3 SalesForecast.exe: 00000AB8: 16:48:30 []:>--------------------------------------------------------------< SalesForecast.exe: 00000AB8: 16:48:30 [TUniServerModule]:Server First Init. SalesForecast.exe: 00000AB8: 16:48:30 [TUniServerModule]:Erasing Cache Folder... SalesForecast.exe: 00000AB8: 16:48:30 [TUniServerModule]:Cache Folder Erased. <49> Files deleted. SalesForecast.exe: 00000AB8: 16:48:30 [TUniServerModule]:Starting HTTP Server... SalesForecast.exe: 00000AB8: 16:48:30 [TUniServerModule]:HTTP Server Started. Port: 8077 SalesForecast.exe: 00000314: 16:51:26 [HandleFileRequest[79.140.21.173]]:File not found: C:\Program Files (x86)\FMSoft\Framework\unigui\ext-4.2.5.1763\locale\ext-lang-ru,en;q=0.9.js SalesForecast.exe: 0000012C: 16:57:03 [79.140.21.173]:EFileNotFoundException : The specified file was not found : Addr: $005075A4 SalesForecast.exe: 0000012C: 16:57:54 [79.140.21.173]:EFileNotFoundException : The specified file was not found : Addr: $005075A4 SalesForecast.exe: 00000E70: 17:02:58 [HandleFileRequest[79.140.21.173]]:File not found: C:\Program Files (x86)\FMSoft\Framework\unigui\ext-4.2.5.1763\locale\ext-lang-ru,en;q=0.9.js SalesForecast.exe: 00000C68: 17:02:58 [HandleFileRequest[79.140.21.173]]:File not found: C:\Program Files (x86)\FMSoft\Framework\unigui\ext-4.2.5.1763\locale\ext-lang-ru,en;q=0.9.js
  13. http://62.173.138.137:8077/ - Uploaded !!! Test it. Hi. Doing current project. Decided to create and share eShop template with basic tasks i always solve. What i was suffering of in UniGUI - no demos for popular tasks like - how to make site? - how to make eShop? In my example i tried to change this situation. Example not perfect, but working. It is not connected to any DataBase, so it is just a view, that could be helpful as the starting point. 1. Registration / Login Forms with beautiful forms and Captcha 2. Header, Footer, Body spaces. 3. Pages. Unique URL will open Unique page. 4. Slider. Basic and simple with fade in fade out effect. 5. Gallery. Shows how to put tiles on surface. 6. Horizontal tiles slider (tiles can be moved horizontally with arrows left right) 7. Adaptive. It resizes elements in dependence of browser size (on browser Width mainly). So you can try to open it on tablet or mobile device. 8. 99% is Delphi code. What limitations ? - Server alignment everywhere. So, it is more slow then client alignment and take more resources. But it is price for Delphi code. - That is the draw. Not finished, not uploaded currently, will upload it tomorrow or close days. - All elements in Russian language - don't have time to translate it. How to use? Download link Download, compile and open in browser http://localhost:8077 Search the code and ask questions or improve it... On next steps i will translate it in English and upload to VPS, because it is real project. Regards, Stan.
  14. hi, for future answers seekers! Has similar question, found solution with help of great Delphi Developer this will just alert with heightInfo js:='alert('+HTMLFrame.JSName+'.body.el.dom.scrollHeight);'; UniSession.JSCode(js); you can send it like this from client js := ' function getTextHeight()' + // '{' + // 'return HTMLFrame.JSName+'.body.el.dom.scrollHeight' + // '}' + // 'ajaxRequest(' + HTMLFrame.JSName + ', ''HTMLFrameHeightAdjust'', [ ''param0=''+getTextHeight(), ''param1=B'' ]);'; UniSession.JSCode(js); on Server accept like this procedure TPaymentsPageContent.HTMLFrameAjaxEvent(Sender: TComponent; EventName: string; Params: TUniStrings); begin if SameText(EventName, 'HTMLFrameHeightAdjust') then begin ShowMessage('Here ' + Params.Values['param0']); // do smth HTMLFrame.Height:=Params.Values['param0'].toInteger; end; end;
  15. The answer is "If Delphi didn't die since 1996" then it is very tenacious! Below my thoughts. Hi, for the first look, the trend seems to be awful for the future! Here we have some static picture in borders of this forum - so - it may be not relevant to all Delphi world. Another look - is to look to objective factors main of which are - Unstable situation of Borland in 2000-2010, so Delphi lost many time. - New life of Delphi with Embarcadero / IDERA, so no Delphi is overtaking its positions ( every update is step forward and hope for us - Delphi fans) Your activity with UniGUI - is bless proof that with Delphi we can create Rich Internet Applications. Another question is how to populate it! To increase number of users.There are many ways, but one of them is to use the energy of us - fans of your product. As for me i chose UniGUI for the 95% of my projects. I think that UniGUI is front of Delphi world in development for many reasons. When i show my works on forums - people say - "wow! it cannot be done with Delphi !!!" And I say - it is done with Delphi. The way i see to populate - is kind of MVP, some media broadCasting about world of Delphi, world of UniGUI. On our blogs we can do this activity. Last year i had about 300 unique people on my blog, but i devoted myself to learning C#, and lost this auditory. Also we still don't have templates for popular webTasks like eShop, Sites, LandingPages and etc. We need bright projects and examples done with Delphi and UniGUI! For the moment i work on eShop template and want to share it to community soon. Everything changes. Let's look to TIOBE index - last month Delphi was on 9th place! (Now 13th, maybe in the end of the month soon will be in top 10) --- Regards, Stan
  16. So, that also means that Desktop version of UniGUI is Ok for mobile Apps?
  17. You are responsive hero ! I just tried to implement responsive configs in my app and you already done that! Thanks one more time.
  18. thanks a lot ! Which uniGUi version did you use?
  19. hi, very nice work, could you give a source code for research?
  20. Yes, i love Delphi ! It's great and evolving now each year! I think base of Delphi coders will grow, not fast but grow!
  21. Thanks, caisistemas! Interesting solution with ajax. Also thought about it. The more i work with UniGUI the more i understand - "first try ajax")) rgreat What you mean UniSession.Synchronize ?
×
×
  • Create New...