Jump to content
uniGUI Discussion Forums

Leaderboard


Popular Content

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

  1. 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
  2. 6 points
    I created a simple unit for google oauth2. To get QR Code, call UniImage1.Url:=GetQRCodeUrl(UniImage1.Width, UniImage1.Height, 'YOURSECRETKEY', 'your email address', 'Your name'); To ValidateOTP : if Format('%.6d', [CalculateOTP('YOURSECRETKEY')]) = UniEdit1.Text then begin // Valid end; Here some screenshots GoogleAuth.pas
  3. 4 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
  4. 2 points
    For simplicity I put the hamze code into a component. uUniMyCaptcha.pas
  5. 2 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.
  6. 2 points
    Hi , Document Viewer: simple interface unigui to view OpenOffice + Pdf documents. See : http://viewerjs.org DocViewer.zip Good fun . Regards Salvatore Marullo
  7. 2 points
    Hi Please assign an icon to button and set iconAlign to right. with UniButton1, JSInterface do begin JSConfigObject('listeners','btnIconEl', [JSObject(['click', JSFunction('sender','ajaxRequest('+JSName+', "iconClick");')])]); end;
  8. 1 point
    Hello Let us add this thing to uniGUI, Seems everybody needs this component.
  9. 1 point
    if someone needs this .. just for playing around... :-) Memo1.text := StringReplace(Memo1.text, 'TLMDSimpleLabel', 'TUniLabel', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TLMDGroupBox','TUniGroupBox', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TAdvPageControl', 'TUniPageControl', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TAdvTabSheet', 'TUniTabSheet', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TLMDFormDisplay', 'TuniPanel', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TLMDCheckBox', 'TUniCheckBox', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TLDMComboBox', 'TUniComboBox', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TLMDSimplePanel', 'TuniPanel', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TLMDFill', 'TuniPanel', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TLMDStarter', 'TuniPanel', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TLMDSysInfo', 'TuniLabel', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TXPManifest', 'TuniPanel', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TLMDGroupBox', 'TUniGroupBox', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TOpenDialog', 'TuniPanel', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TOpenPictureDialog', 'TuniPanel', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TMenuItem', 'TUniMenuItems', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TSaveDialog', 'TuniPanel', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TZipMaste', 'TuniPanel', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TJvComputerInfoEx', 'TuniPanel', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TwwDBGrid', 'TuniDBGrid', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TWebBrowser', 'TUniURLFrame', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TJvBrowseForFolderDialog', 'TuniPanel', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TLMDBitmapList', 'TUniImageList', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TLMDSpeedButton', 'TUniBitBtn', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TLMDLabel', 'TuniLabel', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TJVLabel', 'TuniLabel', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TLMDDirDlg', '{manual_work}', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TPaintBox', 'TUniCanvas', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'class(TForm)', 'class(TUniForm)', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'class(TFrame)', 'class(TUniFrame)', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TBitBtn', 'TUniBitBtn', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TButton', 'TUniButton', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TCalendar', 'TUniCalendar', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TCalendarDialog', 'TUniCalendarDialog', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TCalendarPanel', 'TUniCalendarPanel', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TCanvas', 'TUniCanvas', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TChart', 'TUniChart', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TCheckBox', 'TUniCheckBox', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TComboBox', 'TUniComboBox', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TColorButton', 'TUniColorButton', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TColorPalette', 'TUniColorPalette', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TContainerPanel', 'TUniContainerPanel', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TDateTimePicker', 'TUniDateTimePicker', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TDBCheckBox', 'TUniDBCheckBox', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TDBComboBox', 'TUniDBComboBox', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TDBDateTimePicker', 'TUniDBDateTimePicker', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TDBEdit', 'TUniDBEdit', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TDBFormattedNumberEdit', 'TUniDBFormattedNumberEdit', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TDBGrid', 'TUniDBGrid', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TDBHTMLMemo', 'TUniDBHTMLMemo', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TDBImage', 'TUniDBImage', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TDBListBox', 'TUniDBListBox', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TDBLookupComboBox', 'TUniDBLookupComboBox', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TDBLookupListBox', 'TUniDBLookupListBox', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TDBMemo', 'TUniDBMemo', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TDBNavigator', 'TUniDBNavigator', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TDBNumberEdit', 'TUniDBNumberEdit', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TDBRadioGroup', 'TUniDBRadioGroup', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TDBText', 'TUniDBText', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TEdit', 'TUniEdit', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TFieldSet', 'TUniFieldSet', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TFileUpload', 'TUniFileUpload', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TFormattedNumberEdit', 'TUniFormattedNumberEdit', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TGenericControl', 'TUniGenericControl', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TGroupBox', 'TUniGroupBox', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'THiddenPanel', 'TUniHiddenPanel', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'THTMLFrame', 'TUniHTMLFrame', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'THTMLMemo', 'TUniHTMLMemo', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TImage', 'TUniImage', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TImageList', 'TUniImageList', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TLabel', 'TUniLabel', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TListBox', 'TUniListBox', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TMemo', 'TUniMemo', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TMenuButton', 'TUniMenuButton', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TNativeImageList', 'TUNINativeImageList', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TMainMenu', 'TUniMainMenu', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TNumberEdit', 'TUniNumberEdit', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TPageControl', 'TUniPageControl', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TPanel', 'TUniPanel', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TPopupMenu', 'TUniPopupMenu', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TProgressBar', 'TUniProgressBar', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TRadioButton', 'TUniRadioButton', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TRadioGroup', 'TUniRadioGroup', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TScreenMask', 'TUniScreenMask', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TScrollBox', 'TUniScrollBox', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TSimplePanel', 'TUniSimplePanel', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TSpeedButton', 'TUniSpeedButton', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TSpinEdit', 'TUniSpinEdit', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TSplitter', 'TUniSplitter', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TStatusBar', 'TUniStatusBar', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TStringGrid', 'TUniStringGrid', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TSyntaxEdit', 'TUniSyntaxEdit', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TTabControl', 'TUniTabControl', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TThreadTimer', 'TUniThreadTimer', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TTimer', 'TUniTimer', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TToolBar', 'TUniToolBar', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TTrackBar', 'TUniTrackBar', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TTreeView', 'TUniTreeView', [rfReplaceAll, rfIgnoreCase]); Memo1.text := StringReplace(Memo1.text, 'TURLFrame', 'TUniURLFrame', [rfReplaceAll, rfIgnoreCase]);
  10. 1 point
    To save the time, I got it from an example var S : TUniGUISessions; U : TUniGUISession; i , nr: Integer; ASessionList : array of TUniSessionInfoRec; begin S := UniServerModule.SessionManager.Sessions; nr:=S.SessionList.Count; S.Lock; // Using Lock on session manager should be used with extreme care. // We should keep this "Lock" active as short as we can. Session Manager stops working until lock is released. // Excessive use of lock/unlock or keeping the lock active for a long period will make uniGUI server slow/unresponsive. try SetLength(ASessionList, S.SessionList.Count); // Here we do a fast copy of list to another array for later use. nr:= S.SessionList.Count - 1; for i := 0 to nr do begin U := S.SessionList; ASessionList.ASessionId := U.SessionId; ASessionList.AIP := U.RemoteIP; ASessionList.ALastTime := U.LastTimeStamp; end; finally S.Unlock; // ... and finally don't forget to release lock! end;
  11. 1 point
    Yes you right. And you wrote, eurekalog not work, so I wrote my idea Best way is always known way On my app usually see, if exception created on app run, db or some queries try open. this mean they are Active property is true on design time. For this issue I'm using gexperts tool. For second error, need follow create & show events of form's. some time haveto use onform ready or before/after show event. regards
  12. 1 point
    Hi I'm using mxGraph in my projects. Please check it. https://github.com/jgraph/mxgraph
  13. 1 point
    Hello, Sorry, which edition and build of UniGUI are you using?
  14. 1 point
    uniGUI - v1.70.0.1493 Improvement [UNG-2759] - HyperServer: New "server_title" config property.
  15. 1 point
    Hi Happy New Nowruz 1398(2019-2020). https://en.wikipedia.org/wiki/Nowruz Best Regards.
  16. 1 point
  17. 1 point
    Thanks Sherzod...this works perfect
  18. 1 point
    I think it depends on the query itself: join, calculation, sub select etc. Extjs itself uses buffering in client-side like Android when using a listview. You can try to measure executing time for your query.
  19. 1 point
    My solution is: procedure T_FRM.GRD_AfterLoad(Sender: TUniDBGrid); begin if GRD_.Tag>0then begin GRD_.DataSource.DataSet.Locate('PR_KEY', GRD_.Tag, []); GRD_.Tag:= 0; end; end;
  20. 1 point
    I have 57. Working with Delphi from 1998. Started programming 1982 on IBM1130 and my first personal comp was ZX Spectrum
  21. 1 point
    Quem quiser zebrar UniDBGrid use esse código no onDrawColumnCell do if Odd((Sender as TUniDBGrid).DataSource.DataSet.RecNo) then Attribs.Color:= clWhite else Attribs.Color:= $00F1F2F3; // leve cinza
  22. 1 point
    you can implement a chatclient, https://www.tawk.to/in about 2 minutes
  23. 1 point
    Hi Project from here: http://3msoft.net/mhmd/dbgridtray.rar We will turn paging tool bar from: To this: What we did: We hide the First page, Last page, Refresh buttons We add a label to show how many selected rows we add two buttons aligned to the right We will use two images and we will put them inside a folder 'images': when we want to hide buttons we will need there index...
  24. 1 point
    This is a better option than Bryntum, better licencing/ cost https://dhtmlx.com/docs/products/dhtmlxScheduler/?fromMenu This is Time line example which is what I'm most interested in. https://docs.dhtmlx.com/scheduler/samples/09_api/04_highlighted_sections_units.html Just need someone to port it to uniGUI!! or at least help with the JS Schedulers are everywhere these days, having a UniGUI component like this would certainly broaden the appeal of uniGUI, I'm sure of it.
  25. 1 point
    Hi! With this app you can run a cmd or console app in an interactive way. Just like sitting in front of a "cmd" on a PC. This project is similiar to "PHP Shell" (http://www.tecmint.com/linux-shell-access-on-browser-using-php-shell/), but "WebCmd" is interactive and uses UniGui instead of PHP. It is also helpfull, if you use console apps on the server to perform something (creating PDF's, converting Files, ...). If such a process runs very long, the user get results (output) at every time with WebCmd; if you use a standard "CreateProcess()" instead the result is only available after process has finished. If you want to use interactive input (optional) you must enter the command / input into the edit field below and then press enter (no "inline" edit/ input possible). Use "exit" command to close a cmd, just like in a normal cmd. Regards Oliver WebCmd.zip
×