Jump to content
uniGUI Discussion Forums

Leaderboard


Popular Content

Showing content with the highest reputation since 03/20/18 in all areas

  1. 5 points
    Hi , Document Viewer: simple interface unigui to view OpenOffice + Pdf documents. See : http://viewerjs.org DocViewer.zip Good fun . Regards Salvatore Marullo
  2. 5 points
    Another example from the "All about..." series. This time, about Tips, Hints and CallOuts Three examples to put some fun in your programs. One example was collected from this very forum and others two from the HTML/Javascript World. Could not find the original post to give the credits and link... .sorry pal. Have fun... Projeto7-Callouts_Hint_Tips.rar
  3. 5 points
    Sure, we all understand that. I waited about 3-4 years running a small app with Unigui, before I took the chance to migrate a bigger app. But during the years since 2012 I have had only great experiences with Mr. Farshad, and I realize what kind of personality he is. Introvert, hard working, disciplined, organized, systematic, goal-oriented etc etc. Time and again I am taking myself in being highly impressed by the work he has been able to keep up, over these years. I realize this is unusual and that he has done something that no other company with tons of resources has be able to do: taking a very complex technological issue and making it simple. People are different. Some make a mess no matter what they do, while others make it work consistently. I am 100% sure about one thing: Mr. Farshad is not taking this issue lightly. He is not going to take any chances after all this work, as that would totally contradict all previous efforts. The reason some things might take a while to get addressed, is probably due to his diligence, wanting to cover all aspects involved and deliver a great solution. That is what I believe. Surely, in theory anything might happen, and life comes with no guarantees. Just have to live with that.
  4. 3 points
    Just in case anyone missed it, a nice piece from Farshad about the UniGUI Ext JS migration. Good work Farshad! https://www.sencha.com/blog/migration-of-unigui-from-ext-js-4-2-to-ext-js-6-5/
  5. 3 points
    For people who is having problems with download the zip file. UExportExcel.pas //============================================================================= // TDataSet to Excel without OLE or Excel required // Mike Heydon Dec 2002 // Adapted to Unigui with TUniDBGrid // Mauricio Naozuka - 26/04/2018 - naozuka@gmail.com //============================================================================= unit UExportExcel; // Example // // Add uses UExportExcel // //procedure TMainForm.UniButton1Click(Sender: TObject); //var url, filename, reportname : String; // exportExcel: TDataSetToExcel; // i: integer; //begin // reportname := 'ExcelReport'; // url := UniServerModule.LocalCacheURL+name+'.xls'; // filename := UniServerModule.NewCacheFileUrl(false, 'xls', reportname, '', url); // // exportExcel := TDataSetToExcel.Create; // exportExcel.WriteFile(filename, UniDBGrid1); // FreeAndNil(exportExcel); // UniSession.SendFile(filename, reportname+'.xls'); //end; interface uses Windows, SysUtils, DB, Math, uniBasicGrid, uniDBGrid; type // TDataSetToExcel TDataSetToExcel = class(TObject) protected procedure WriteToken(AToken: word; ALength: word); procedure WriteFont(const AFontName: Ansistring; AFontHeight, AAttribute: word); procedure WriteFormat(const AFormatStr: Ansistring); private FRow: word; FFieldCount: integer; FDataFile: file; FFileName: string; public constructor Create; function WriteFile(const AFileName: string; const AGrid: TUniDBGrid): boolean; end; //----------------------------------------------------------------------------- implementation const // XL Tokens XL_DIM = $00; XL_BOF = $09; XL_EOF = $0A; XL_DOCUMENT = $10; XL_FORMAT = $1E; XL_COLWIDTH = $24; XL_FONT = $31; // XL Cell Types XL_INTEGER = $02; XL_DOUBLE = $03; XL_STRING = $04; // XL Cell Formats XL_INTFORMAT = $81; XL_DBLFORMAT = $82; XL_XDTFORMAT = $83; XL_DTEFORMAT = $84; XL_TMEFORMAT = $85; XL_HEADBOLD = $40; XL_HEADSHADE = $F8; // ======================== // Create the class // ======================== constructor TDataSetToExcel.Create; begin FFieldCount := 0; end; // ==================================== // Write a Token Descripton Header // ==================================== procedure TDataSetToExcel.WriteToken(AToken: word; ALength: word); var aTOKBuffer: array[0..1] of word; begin aTOKBuffer[0] := AToken; aTOKBuffer[1] := ALength; Blockwrite(FDataFile, aTOKBuffer, SizeOf(aTOKBuffer)); end; // ==================================== // Write the font information // ==================================== procedure TDataSetToExcel.WriteFont(const AFontName: ansistring; AFontHeight, AAttribute: word); var iLen: byte; begin AFontHeight := AFontHeight * 20; WriteToken(XL_FONT, 5 + length(AFontName)); BlockWrite(FDataFile, AFontHeight, 2); BlockWrite(FDataFile, AAttribute, 2); iLen := length(AFontName); BlockWrite(FDataFile, iLen, 1); BlockWrite(FDataFile, AFontName[1], iLen); end; // ==================================== // Write the format information // ==================================== procedure TDataSetToExcel.WriteFormat(const AFormatStr: ansistring); var iLen: byte; begin WriteToken(XL_FORMAT, 1 + length(AFormatStr)); iLen := length(AFormatStr); BlockWrite(FDataFile, iLen, 1); BlockWrite(FDataFile, AFormatStr[1], iLen); end; // ==================================== // Write the XL file from data set // ==================================== function TDataSetToExcel.WriteFile(const AFilename:String; const AGrid: TUniDBGrid): boolean; var bRetvar: boolean; aDOCBuffer: array[0..1] of word; aDIMBuffer: array[0..3] of word; aAttributes: array[0..2] of byte; i: integer; iColNum, iDataLen: byte; sStrData: string; fDblData: double; wWidth: word; sStrBytes: TBytes; begin if not Assigned(AGrid) then raise Exception.Create('There is no Grid is vinculated.'); if not Assigned(AGrid.DataSource) then raise Exception.Create('There is no DataSource is vinculated to Grid ' + AGrid.Name); if not Assigned(AGrid.DataSource.DataSet) then raise Exception.Create('There is no DataSet is vinculated to DataSource ' + AGrid.DataSource.Name); bRetvar := true; FRow := 0; FillChar(aAttributes, SizeOf(aAttributes), 0); FFileName := ChangeFileExt(AFilename, '.xls'); AssignFile(FDataFile, FFileName); try Rewrite(FDataFile, 1); // Beginning of File WriteToken(XL_BOF, 4); aDOCBuffer[0] := 0; aDOCBuffer[1] := XL_DOCUMENT; Blockwrite(FDataFile, aDOCBuffer, SizeOf(aDOCBuffer)); // Font Table WriteFont('Arial', 10, 0); WriteFont('Arial', 10, 1); //WriteFont('Courier New', 11, 0); // Column widths iColNum := 0; for i := 0 to AGrid.Columns.Count-1 do begin if not AGrid.Columns[i].Visible then continue; if AGrid.DataSource.DataSet.FieldByName(AGrid.Columns[i].FieldName).DisplayWidth + 1 > Length(AGrid.Columns[i].Title.Caption) then begin wWidth := (AGrid.DataSource.DataSet.FieldByName(AGrid.Columns[i].FieldName).DisplayWidth + 1) * 256; end else begin wWidth := (Length(AGrid.Columns[i].Title.Caption) + 1) * 256; end; // Limitar o tamanho da coluna if wWidth > 80*256 then wWidth := 80*256; // if AGrid.DataSource.DataSet.FieldByName(AGrid.Columns[i].FieldName).DataType = ftDateTime then // inc(wWidth, 100); // if AGrid.DataSource.DataSet.FieldByName(AGrid.Columns[i].FieldName).DataType = ftDate then // inc(wWidth, 1050); // if AGrid.DataSource.DataSet.FieldByName(AGrid.Columns[i].FieldName).DataType = ftTime then // inc(wWidth, 100); WriteToken(XL_COLWIDTH, 4); BlockWrite(FDataFile, iColNum, 1); BlockWrite(FDataFile, iColNum, 1); BlockWrite(FDataFile, wWidth, 2); Inc(iColNum); end; FFieldCount := iColNum; // Column Formats WriteFormat('Geral'); WriteFormat('0'); WriteFormat('#.##0,0000'); WriteFormat('dd/mm/aaaa hh:mm:ss'); WriteFormat('dd/mm/aaaa'); WriteFormat('hh:mm:ss'); // Dimensions WriteToken(XL_DIM, 8); aDIMBuffer[0] := 0; aDIMBuffer[1] := Min(AGrid.DataSource.DataSet.RecordCount, $FFFF); aDIMBuffer[2] := 0; aDIMBuffer[3] := Min(FFieldCount - 1, $FFFF); Blockwrite(FDataFile, aDIMBuffer, SizeOf(aDIMBuffer)); // Column Headers iColNum := 0; for i := 0 to AGrid.Columns.Count-1 do begin if not AGrid.Columns[i].Visible then continue; // sStrData := FDataSet.Fields[i].DisplayName; sStrBytes := TEncoding.ANSI.GetBytes(AGrid.Columns[i].Title.Caption); iDataLen := length(sStrBytes); WriteToken(XL_STRING, iDataLen + 8); WriteToken(FRow, iColNum); aAttributes[1] := XL_HEADBOLD; //aAttributes[2] := XL_HEADSHADE; BlockWrite(FDataFile, aAttributes, SizeOf(aAttributes)); BlockWrite(FDataFile, iDataLen, SizeOf(iDataLen)); if iDataLen > 0 then BlockWrite(FDataFile, sStrBytes[0], iDataLen); aAttributes[2] := 0; Inc(iColNum); end; try AGrid.DataSource.DataSet.DisableControls; AGrid.DataSource.DataSet.First; // Data Rows while not AGrid.DataSource.DataSet.Eof do begin inc(FRow); iColNum := 0; for i := 0 to AGrid.Columns.Count-1 do begin if not AGrid.Columns[i].Visible then continue; case AGrid.DataSource.DataSet.FieldByName(AGrid.Columns[i].FieldName).DataType of ftBoolean, ftWideString, ftFixedChar, ftString: begin try // sStrData := FDataSet.Fields[i].AsString; sStrBytes:=TEncoding.ANSI.GetBytes(AGrid.DataSource.DataSet.FieldByName(AGrid.Columns[i].FieldName).AsString); iDataLen := length(sStrBytes); WriteToken(XL_STRING, iDataLen + 8); WriteToken(FRow, iColNum); aAttributes[1] := 0; BlockWrite(FDataFile, aAttributes, SizeOf(aAttributes)); BlockWrite(FDataFile, iDataLen, SizeOf(iDataLen)); if iDataLen > 0 then BlockWrite(FDataFile, sStrBytes[0], iDataLen); except on E: Exception do //ShowMessage(E.Message); raise Exception.Create('Erro Converter: ' + E.Message); end; end; ftAutoInc, ftSmallInt, ftInteger, ftWord, ftLargeInt: begin try fDblData := AGrid.DataSource.DataSet.FieldByName(AGrid.Columns[i].FieldName).AsFloat; iDataLen := SizeOf(fDblData); WriteToken(XL_DOUBLE, 15); WriteToken(FRow, iColNum); aAttributes[1] := XL_INTFORMAT; BlockWrite(FDataFile, aAttributes, SizeOf(aAttributes)); BlockWrite(FDataFile, fDblData, iDatalen); except on E: Exception do //ShowMessage(E.Message); raise Exception.Create('Erro Converter Inteiro: ' + E.Message); end; end; ftFloat, ftCurrency, ftBcd, ftFMTBcd: begin try fDblData := AGrid.DataSource.DataSet.FieldByName(AGrid.Columns[i].FieldName).AsFloat; iDataLen := SizeOf(fDblData); WriteToken(XL_DOUBLE, 15); WriteToken(FRow, iColNum); aAttributes[1] := XL_DBLFORMAT; BlockWrite(FDataFile, aAttributes, SizeOf(aAttributes)); BlockWrite(FDataFile, fDblData, iDatalen); except on E: Exception do //ShowMessage(E.Message); raise Exception.Create('Erro Converter Float: ' + E.Message); end; end; ftDateTime: begin try if not AGrid.DataSource.DataSet.FieldByName(AGrid.Columns[i].FieldName).IsNull then begin fDblData := AGrid.DataSource.DataSet.FieldByName(AGrid.Columns[i].FieldName).AsFloat; iDataLen := SizeOf(fDblData); WriteToken(XL_DOUBLE, 15); WriteToken(FRow, iColNum); aAttributes[1] := XL_XDTFORMAT; BlockWrite(FDataFile, aAttributes, SizeOf(aAttributes)); BlockWrite(FDataFile, fDblData, iDatalen); end; except on E: Exception do //ShowMessage(E.Message); raise Exception.Create('Erro Converter DateTime: ' + E.Message); end; end; ftDate: begin try if not AGrid.DataSource.DataSet.FieldByName(AGrid.Columns[i].FieldName).IsNull then begin fDblData := AGrid.DataSource.DataSet.FieldByName(AGrid.Columns[i].FieldName).AsFloat; iDataLen := SizeOf(fDblData); WriteToken(XL_DOUBLE, 15); WriteToken(FRow, iColNum); aAttributes[1] := XL_DTEFORMAT; BlockWrite(FDataFile, aAttributes, SizeOf(aAttributes)); BlockWrite(FDataFile, fDblData, iDatalen); end; except on E: Exception do //ShowMessage(E.Message); raise Exception.Create('Erro Converter Date: ' + E.Message); end; end; ftTime: begin try if not AGrid.DataSource.DataSet.FieldByName(AGrid.Columns[i].FieldName).IsNull then begin fDblData := AGrid.DataSource.DataSet.FieldByName(AGrid.Columns[i].FieldName).AsFloat; iDataLen := SizeOf(fDblData); WriteToken(XL_DOUBLE, 15); WriteToken(FRow, iColNum); aAttributes[1] := XL_TMEFORMAT; BlockWrite(FDataFile, aAttributes, SizeOf(aAttributes)); BlockWrite(FDataFile, fDblData, iDatalen); end; except on E: Exception do //ShowMessage(E.Message); raise Exception.Create('Erro Converter Time: ' + E.Message); end; end; ftMemo: begin // Does not print memo end; else raise Exception.Create('Tipo [' + AGrid.DataSource.DataSet.FieldByName(AGrid.Columns[i].FieldName).ClassName + '] do campo [' + AGrid.DataSource.DataSet.FieldByName(AGrid.Columns[i].FieldName).FieldName + '] não foi tratado.'); end; Inc(iColNum); end; // end of for AGrid.DataSource.DataSet.Next; end; // end of while finally AGrid.DataSource.DataSet.EnableControls; AGrid.DataSource.DataSet.First; end; // End of File WriteToken(XL_EOF, 0); CloseFile(FDataFile); except bRetvar := false; end; Result := bRetvar; end; end.
  6. 3 points
    Hi, Wprins, Yes i'm using Firemonkey, It has evolved a lot since XE5, It's more stable, fast and reliable. For backend I use a rest architecture, webservices created using Php. I don't use clientdataset or fireDac or whatever data access components, just Rest staleless webservices. So its a multitier architecture. What is necessary to keep in mind is that mobile is not the same as desktop, we must find ways to keep the app fast and avoid to use too mush components in a single form, also the use of frames to insert forms in a main parent form is a must, have severals forms open in memory can just exauts the mobile device resources. Anyway we can also build great mobile apps using Unigui, I have made quite some mobile app with unigui, of course not native, running via browser but with good results.
  7. 3 points
    Do you think that Farshad developed unigui only to get rich and thus close his code? No, i dont think so. In the last 10 years, it is clear from his work that he is a great personality, a virtuous and very honest man. I do not know him personally, but review the history of the vicissitudes experienced on this forum you will understand. No, it's someone who has his head on his shoulders and knows where he is going. he will never be able to leave you. he certainly has a plan B for the durability of this remarkable product.
  8. 3 points
    For the Form and Panel set AlignmentControl = uniAlignmentClient For the panel set the Layout = form. For the buttons set LayoutConfig.Margin =3 - or whatever you prefer
  9. 3 points
    You need to use a UniFieldContainer. See the images. Also remember for this to work the AlignmentControl must be "uniAlignmentClient".
  10. 2 points
    Some time ago I was working on a migration of an application from the desktop to the web using uniGUI. The application used a TRichEdit control and stored the information in a database. The new application, web-based, needed the documents in HTML and I started working on solutions. I found a few tools which could convert RTF <=> HTML. Some of them are: Subsytems – Expensive, but it does the job unRTF – GNU DocFrac - Sourceforge Html2Rtf - DLL for both HTML -> RTF and RTF -> HTML My idea was to use the database events OnBeforePost and OnBeforeScroll to execute the conversions while keeping the database format as RTF (to keep compatibility with the desktop application). I never implemented the solution but it could be used by anyone interested in moving from RTF to HTML.
  11. 2 points
    Attached is a simple wrapper for the SweetAlert2 library. (QUICK HACK.. No unit testing, no tidy up etc..) ** No warranty - Use at your own risk ** FREE for commercial use, etc.. (just don't remove the copyright header). 1) Compile the Package/Install 2) Make sure your path includes the control folder 3) Copy the files/sweetalert folder into your project 4) Drag/Drop the uniSweetAlert control onto your form. Simple usage like: procedure TMainForm.UniButton1Click(Sender: TObject); begin UniSweetAlert1.ShowMessage; // or like UniSweetAlert1.Error('Oops','Something went wrong'); // or like UniSweetAlert1.Error('Oops','Error again','FixMe',3000); // or like UniSweetAlert1.Question('Is this true','Please click one of the options below:','YES','NO',3000); // or like UniSweetAlert1.title := 'Hello'; UniSweetAlert1.text := 'Testing'; UniSweetAlert1.alertType := TAlertType.success; UniSweetAlert1.ShowMessage; end; // Events for Confirm or Cancel/Dismiss procedure TMainForm.UniSweetAlert1Dismiss(Sender: TObject); begin UniButton1.Caption := 'DIS'; uniMemo1.Lines.Add('Dis'); end; procedure TMainForm.UniSweetAlert1Success(Sender: TObject); begin UniButton1.Caption := 'CLICKED'; uniMemo1.Lines.Add('Clicked'); end; Either (1) set properties and call .ShowMessage; Or call the Error, Info, etc methods. Enjoy.. Regards Andrew 2017-07-29-uniSweetAlert V3.zip
  12. 2 points
    An example showing how to incorporate Leaflet and OpenStreetMaps into UniGUI. The following lines must be added to the ServerModule | CustomFiles: https://unpkg.com/leaflet@1.3.4/dist/leaflet.css https://unpkg.com/leaflet@1.3.4/dist/leaflet.js See the Mapbox Tab in the application for more details. P.S. I am no expert with Leaflet - please see the following for more details: Getting started with Leaflet OpenStreetMap Mapbox - the accessToken used for this is a public one...you can register to receive your own. Leaflet Maps Example.zip
  13. 2 points
    Sorry guys I have updated the link, the right one if https://byteinmotionapps.com/Facilities4EN/
  14. 2 points
    Hi guys, I wanted to share with you some of my work, this is a full Facilities Managment System. I hope you like it It still in beta, but very close to the final release. You can also see it in action here : https://byteinmotionapps.com/Facilities4EN/ login : demo pass : demo
  15. 2 points
    Good News Marlon. As Delphi choosed "RIO" as alias this year, i think we will come soon to take a cup of coffee with Brasilian Unigueers I bring cakes. Best regards.
  16. 2 points
    Great ))) We can open museum here ))) But as for seriously, we could be any age, any technology stack, more important is the love of what you are doing and how. On any language we can do good and bad things, popularity will always be changable. Choose yours! When i started this topic, i tried to understand, should i continue with Delphi or switch to C#, as for now, i understand - both of them will always have their lovers) And i have projects on both as for now. Knowledge of different technologies enriches your skills as a programmer. For ex. i love mvc pattern from asp mvc and use it in my current projects, 'cause it gives clear transperent code... And of course, UniGUI, the best framework for Delphi and Farshad is the Genious of Delphi ))) Regards...
  17. 2 points
    Hi, Just to note that the "layout.rar" example from the message in this post does not run on the latest UniGUI and displays the message: "'field' config has been deprecated. Please use the 'angleField' config instead." It might be useful to update it and/or include it in the official demo if it's not already there (? I've not exhaustively looked at all the included demos, my apologies if it's actually already included!) Edit: The simple way to "fix" this is to edit ClientEvents.UniEvents and open Ext.chart.CartesianChart, then open chart.beforeInit and comment out the "config.axes" assignment in the code. (There's obviously a better way of fixing it but I didn't have the time or patience to work out what exactly has changed and how it should be updated. Changing "fields" to "angleField" or "angleFields" did not work and resulted in another error message.) Walter
  18. 2 points
    Good moorning Friends, Just wanted to advise. - ShellExecute works fine on VCL Desktop applications only. - ShellExecute does'nt work on a Windows Service ! Because of Windows Security (Session0, Session 1) introduced after Windows 7 use instead CreateProcessAsUser like this : procedure TMainForm.RunApp(cmdLine, WorkDir: String); var hToken: THandle; StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; res: boolean; begin GetStartupInfo(StartupInfo); if WTSQueryUserToken(WtsGetActiveConsoleSessionID, hToken) then begin { 1. For an application.exe (exemple : NotePad.exe) res := CreateProcessAsUser(hToken, PChar(Path_appName), PChar(cmdLine), nil, nil, False, CREATE_NEW_CONSOLE, nil, PChar(WorkDir), StartupInfo, ProcessInfo); } {2. For a DOS command line (Example FireBird : cmdLine:='gbak.exe -user sysdba -pas masterkey -b -nt "D:\Base.fdb" "D:\toto.fbk" '; WorkDir:='C:\Program Files\Firebird\Firebird_2_5\bin'; } res := CreateProcessAsUser(hToken, Nil, PChar('cmd.exe /C ' + cmdLine), nil, nil, True, CREATE_NO_WINDOW, nil, PChar(WorkDir), StartupInfo, ProcessInfo); if res then WaitForSingleObject(ProcessInfo.hProcess,INFINITE); end; end; That will save you much time Regards.
  19. 2 points
    ok .. found a solution for chrome, egde, safari, opera ... i changed to https://greensock.com/tweenmax and i animate my things with : Panels: UniSession.AddJS('TweenMax.to('+UniContainerpanel.JSName+'_id,0.4,{left:'+inttostr(x)+'});'); Forms: UniSession.AddJS('TweenMax.to('+self.WebForm.JSName+'_id,1,{autoAlpha:0});'); Works fine :-) Greetings Erich user_interface.webm
  20. 2 points
    By the way Flex just sets how the controls will be spaced, if both were set to 1 then they will have equal widths.
  21. 2 points
    From the "All about..." series, my second contribution to the community All about Form Transparency using images and gradients. That´s all folks ... AllAbourFormsTransparency.rar
  22. 2 points
    Hello to all, [Edit]: code/project was improved and uploaded. Here is a jQuery widget with animation and fully customized and fully responsive that I have written recently: Works excellent when resizing the browser window ! Code: $('#newTasks').circleProgress({ title:'15', caption:'New tasks', bgcolor:'#e1dddd', fgcolor:'#54c0fd', tfntcolor:'#54c0fd', cfntcolor:'#b0aeae', animationstep:1, rotateanimationstep:0.4, total:100, value:30, mstyle:0, thik:25, shadow:1 }); You may test is online (for limited time): http://80.179.68.220:8076 You can download project from here [port: 8076]: http://3msoft.net/mhmd/CircleProgress.rar
  23. 2 points
    Hello community! Unfortunately this is in Portuguese, but I would like to share with you a quick way to use Bootstrap in uniGUI. Bootstrap.rar
  24. 2 points
    I'm showing a variety of applications here, but primarily it's an application for real-time monitoring and control and management of large quantities of time-series data spread out over disparate locations. One of the frontend apps shown is specifically for greenhouse monitoring/control while some of the others are for industrial applications, e.g. SCADA and Energy Management. I'm also showing the administrative web application that allows a user to configure and manage their entire system online as well as create custom display or navigation screens (2D or 3D) for their facilities and attach live sensor values to their visual widgets via drag/drop which can change color, switch images etc. based on the real-time value of the sensor attached to it. The mobile app is just a limited version of the desktop web app. I truly don't think any of this would have been possible without UniGUI as it allowed me to port a set of very complex frontend VCL/OpenGL apps to a browser implementation fairly quickly while maintaining the use of all of my backend code. You have done magnificent work there and for that I thank you very much!!!
  25. 2 points
    This is a page javascript return value to unigui control example, a mouse click on the map to Baidu map to get latitude and longitude passed to unigui control, for example, the latitude and longitude passed to unigui controls, you can call the latitude and longitude of the code in unigui. Version UniGui: 0.94.0.1024 Delphi: XE5 Page javascript to pass values ??to unigui Controls(baidumap).rar
×