Jump to content
uniGUI Discussion Forums

Leaderboard


Popular Content

Showing content with the highest reputation since 05/03/11 in all areas

  1. 10 points
    QrCode Reader for uniGUI That's is my new series (old "All about x topic") and now inspired in Chelsea DOES Series... (lol) here we go. This is the first experimental project for our future Pack 4 commercial/biz automation. The final version will have several other features as well as QrCode generation capability etc. This code is free and based on several JavaScript libs linked and adapted. This project design is hybrid. Restrictions: Chrome only allows WebRTC access via https or localhost. Safari ONLY https. FireFox is the most compatible of all. This is an HTML5 feature that has not yet been implemented in most browsers and many users have old versions. So check the browser version of your device and test with others browsers. Website that shows what each browser supports https://caniuse.com/#search=getUserMedia Mobile Compatibility with HTML5 http://mobilehtml5.org/ https://webrtc.github.io/samples/ https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API How to use: Copy the / files folder just below where you want to place your ISAPI or StandAlone. And let's rock ! Live Demo: https://lojasms.com.br/qrcode/qrcode.dll More Information, Resources, Books, and Project Packs visit http://www.unigui.com.br (the Brazilian portal to uniGUI). ' Enjoy... and have a good one! Sorry: but I'm experience some health problems today... tomorrow I'll post version with English Interface. Pack04-Project01 QrCode.rar
  2. 8 points
    I read somewhere here that was not possible to play a sound on the mobile platform using uniGUI. I completely forgot about the subject and these days I needed to put sound in one of my web/app/sites and already knew how to do with JQuery and mainly did not want those HTML5 audio controls disrupting the interface. And combining JQuery with uniGUI I was able to do much faster. So I made this example Desktop / Mobile showing that yes, "uniGUI DOES" sounds and very well. Both desktop and mobile. Example showing how to play direct from a URL, local (local file here refers to a file on the server and not from the client's computer, of course), using ClientEvents and conventional OnEnter Event. And in Mobile, no need to put in TAP, because it's obvious. Preview online. http://www.unigui.com.br:8077/ uniGUI DOES SOUNDS.rar
  3. 7 points
    Good Morning Sirs, From 6_3 edition something has changed in FastReport. If you are using a, empty frxDBDataSet (to save your time) and design your report on the fly, then add thees two line in your unit, from now : ___________________________________________________ frxReport1.DataSets.Add(DBMyDataSet); frxReport1.EnabledDataSets.Add(DBMyDataSet); ___________________________________________________ Thx to Paul Gursky (FastReport Support Team) procedure TfrmFastReport.Prepare_And_ShowReport(Report: TfrxReport; Exp: TfrxPDFExport); var AUrl : string; begin Report.PrintOptions.ShowDialog := False; Report.ShowProgress := false; Report.PreviewOptions.AllowEdit := False; Report.EngineOptions.SilentMode := True; Report.EngineOptions.EnableThreadSafe := True; Report.EngineOptions.DestroyForms := False; Report.EngineOptions.UseGlobalDataSetList := False; Exp.Background := True; Exp.ShowProgress := False; Exp.ShowDialog := False; fFile_Temp:=UniServerModule.NewCacheFileUrl(False, 'pdf', '', '', AUrl, True); Exp.FileName :=fFile_Temp; Exp.DefaultPath := ''; //****************************** Report.LoadFromFile(fFr3_File); // 1 DBMyDataSet.DataSet:=fFrDataSet; // 2 // FROM FastReport 6_3 (important) frxReport1.DataSets.Add(DBMyDataSet); //3 frxReport1.EnabledDataSets.Add(DBMyDataSet); //4 //****************************** fFrDataSet.DisableControls; // Yes Report.PrepareReport; Report.Export(Exp); UniURLFrame1.URL := AUrl; fFrDataSet.EnableControls; end; Best Regards.
  4. 7 points
    Hi , Document Viewer: simple interface unigui to view OpenOffice + Pdf documents. See : http://viewerjs.org DocViewer.zip Good fun . Regards Salvatore Marullo
  5. 6 points
    Ok, please find now attached my message dialog solution. For better understanding, I put it into a simple test environment. Finally it can be used very similar to the origin MessageDLG procedure. It supports already various settings, but still can be easily tailored to whatever needs you have. Any feedback & comments are welcome P.S. I just uploaded a new version with new options to change fonts, colors, icons (awesome font) and button content very easily from your application. Its a complete replacement of the existing messagedlg procedure. Just import the unit "uDialog.pas" and replace existing messagedlg calls with messagedlgA. P.P.S. Happy New Year to everybody of this great community uniGUI - MsgDLGDEmo.zip
  6. 5 points
    Custom header for reports using HTML and converting it to image. it's flexible and powerful.
  7. 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
  8. 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.
  9. 4 points
    I was looking for an alternative for the default message dialog, which gets shipped with uniGUI. Goal was to have something which fits 100% to the design of my pages. I am sure that somebody will now say "Use CSS styles" to achieve what you are looking for. But to be honest digging for the right CSS settings finally would take even more time than my little development and finally is not as flexible. Below is a screen shot of the message dialog I tailored for my needs. As you can see it also is already adjusted to my native language (German). If you are interesting to get the code for an alternative message dialog, just let me know.
  10. 4 points
    Hi In the attachment a simple example how to send a sms text message. In this example is use www.bulksms.com for sending my sms messages but you can have you're own one if you want. Every sms provider has his own url for sending messages, in this case you see the url from bulksms. So in you're own case you have to see the documentation of the sms provider. Most sms providers have also mail-to-sms, but for me this is a simple low-cost solution to create you're own 2FA. Regards Peter SendSMS.zip
  11. 4 points
    Hi! For those who are still in the first steps of UniGui, just like me. Here is the implementation of the Jquery plugin to measure the strength of the password in your projects. PassMeter.rar
  12. 3 points
    Thank you, From your message I have reached another, where there is an example, which I had already seen, but it did not work correctly. I suppose the versions of the library were not correct. I added a call to a function that was missing ... and to work. I enclose the corrected example in case it serves you. regards Felix mobile_sig_test.zip
  13. 3 points
    From the "infamous" series, "All about...", we got together 4 examples of animated backgrounds for LoginForms. A foreground LoginForm (with some tricks and a soft gradient) that can be easily included in minutes to you project for a "quick facelift" and voilá . Different solutions with only one goal: All formatted to be used in LoginForms because "it's all about the looks my dear"... With the examples provided you can easily adapt any animated JavaScript background to your projects and get an extra bang to user attention. There are lots of animated jscripts , particules, elements in codepen and other Jscript resources websites that you can use the same tools and solutions here. Since we are almost at Christmas and Festivities days, SnowFlakes JavaScript Animated background is here for direct download. Additional projects with nice effects and ready-to-use is downloadable from the link below. Visit www.unigui.com.br (use the google translation control at the top - soon in english) and download the other examples and material. Project Packs, Books (in Portuguese only for now but coming soon in english) and resources exclusive to uniGUI Framework. Happy festivities, Christmas and a prosper new year. Cheers, Fred. PS: you can write me in english for more info and support. "No problemo.. " Projeto31-LoginSnowFlakesEffects.rar
  14. 3 points
    These are low-res gifs... take a look at the snowflakes project. You got hi-res with Jscript effect at the end. The other examples will be soon available in www.unigui.com.br only. I don't want to "spam" the forum with similar posts with the same subject. Next month, two new post using the "All about" tag series (Grids and Edits) and we will move to a new topic and series. C'ya
  15. 3 points
    Another from the series "All about..." All about a Login Form with a Background video Project Repository for a Initial Login Screen for desktop projects with background video and informative DIV and pause / play button. Adapted example from W3School (http://wwww.w3schools.com). Panel with Gradient in two colors and centralized shade to facilitate the definition of your login controls. Note that it is a borderless LoginForm and properly configured to work. Author: Fred Montier / Cetera Softwares 1- Open your IDE 2- Open the project in the Source folder and compile / execute. 3- Open your browser and go to the default address. 4- EX: http: // localhost: 8077 Future versions like this example and others you will find easily in the portal http://www.unigui.com.br Source code right below... have fun. Projeto24-LoginVideoInBackground.rar
  16. 3 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
  17. 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/
  18. 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.
  19. 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.
  20. 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.
  21. 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
  22. 3 points
    You need to use a UniFieldContainer. See the images. Also remember for this to work the AlignmentControl must be "uniAlignmentClient".
  23. 3 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
  24. 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
  25. 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.
×