Leaderboard
Popular Content
Showing content with the highest reputation since 05/17/25 in all areas
-
Hello, We do not support the recent 64-bit version of IDE yet. We will try to add support for it very soon.3 points
-
Save and restore the order and width of columns in UnidbGrid These functions can be used in forms If the form contains a grid, just pass the grid and leave the second parameter empty If the form contains multiple grids, you can also pass a second word in the second parameter in addition to the grid Virtual table (kind of memory tables) tables are used for saving and retrieving, but you can use JSON or XML Procedure TDMT.SaveGrids_SaveGridLayout(Grid: TUniDBGrid; Const KeyAlt: String = ''); Var i: Integer; vt: TVirtualTable; Begin If Not Assigned(Grid) Then Exit; Grid.Refresh; vt := VTGridLayouts; // حذف قبلی Try SaveGrids_DeleteGridLayout(Grid, KeyAlt); // ذخیره جدید For i := 0 To Grid.Columns.Count - 1 Do Begin vt.Insert; vt.FieldByName('GridKey') .AsString := Grid.Parent.Name + '_' + Grid.Name; vt.FieldByName('GridKeyAlt') .AsString := KeyAlt; vt.FieldByName('FieldName') .AsString := Grid.Columns[i].FieldName; vt.FieldByName('ColIndex') .AsInteger := Grid.Columns[i].Index; vt.FieldByName('ColWidth') .AsInteger := IfThen(Grid.Columns[i].Width>150,Grid.Columns[i].Width,150); vt.Post; End; Finally SaveGrids_SaveToFile; End; End; Procedure TDMT.SaveGrids_LoadGridLayout(Grid: TUniDBGrid; Const KeyAlt: String = ''); Var i: Integer; vt: TVirtualTable; EffectiveKey, FieldName: String; Begin If Not Assigned(Grid) Then Exit; vt := VTGridLayouts; EffectiveKey := IfThen(KeyAlt <> '', KeyAlt, Grid.Parent.Name + '_' + Grid.Name); vt.Filtered:=False; Vt.Filter:='(GridKeyAlt='+ QuotedStr(KeyAlt)+') Or (GridKey='+QuotedStr(Grid.Parent.Name + '_' + Grid.Name)+' And GridKeyAlt ='+ QuotedStr('')+')'; vt.Filtered:=True; For i := 0 To Grid.Columns.Count - 1 Do Begin FieldName := Grid.Columns[i].FieldName; vt.First; If Vt.Locate('FieldName',FieldName,[]) Then Begin Grid.Columns[i].Flex := 0; Grid.Columns[i].Index := vt.FieldByName('ColIndex').AsInteger; Grid.Columns[i].MinWidth := 100; Grid.Columns[i].Width := vt.FieldByName('ColWidth').AsInteger; End; End; End; Procedure TDMT.SaveGrids_DeleteGridLayout(Grid: TUniDBGrid; Const KeyAlt: String = ''); Var vt: TVirtualTable; Begin If Not Assigned(Grid) Then Exit; vt := VTGridLayouts; vt.Filtered := False; vt.Filter := '(GridKeyAlt=' + QuotedStr(KeyAlt) + ') Or (GridKey=' + QuotedStr(Grid.Parent.Name + '_' + Grid.Name) + ' And GridKeyAlt =' + QuotedStr('') + ')'; vt.Filtered := True; vt.First; While Not vt.IsEmpty Do vt.Delete; vt.Filtered := False; End; procedure TDMT.SaveGrids_SaveToFile; begin VTGridLayouts.SaveToFile(CurrentPath + '\GridLayouts.xml'); end; procedure TDMT.SaveGrids_LoadFromFile; begin if FileExists(CurrentPath + '\GridLayouts.xml') then VTGridLayouts.LoadFromFile(CurrentPath + '\GridLayouts.xml'); VTGridLayouts.Open; end;2 points
-
Eid al-Adha Mubarak! 🌙✨ May this blessed Eid bring joy, peace, and prosperity to you and your family. Wishing you a wonderful Kurban Bayramı!"2 points
-
Android Biometric (FingerPrint) to uniGUI APP Description For some time now I have been trying to make a simple FMX APP that opens my uniGUI APPs on my phone but reading the fingerprint or another form of biometrics. Since the fingerprint is the simplest (apart from passwords), FMX and Android recent changes has caused a real mess with in directives for APP permissions and compatibility issues with previous versions. I finally got a material that works on any version of Android (above PIE - API 28) as long as it has a fingerprint reader. And here is a simple project in FMX to open an APP (in this case, just our website) that can be used to give a more professional tone to your APPs with uniGUI. Since Android is the dominant mobile OS in Brazil, Latin America, much of Eastern Europe and Asia, I think you might be interested in this project. Soon, coming the Time Clock Employee version with GPS and rest server in uniGUI with dashboard. Resources and Details Native Delphi/FMX code. Simple to use and adapt Demo FMX application has no restrictions or dependencies. After Auth, opens URL of your APP. You don't even need a domain to run it. Using Android you can provide an APK to your clients and target your uniGUI app at your server (see demo below). No other third party components. Easy to use in uniGUI/Delphi. Native Android Biometrics JAVA lib. No incompatibility with old Androids OS Version, once you have finger print reader in your device. Requires Android 9 Pie (Android API 28) or higher No hidden costs or fees. Yes, we offer consulting on adapting this example to your projects. Contact us to receive a quote. All code is yours ! If you don't have experience with FMX, deployment of FMX App, connect a mobile to you PC, configure SDKs aand other stuff related to FMX framework, please, stay away from this project. We don't provide support to basic FMX https://unigui.com.br/uniguibioaccess.html Detail, link above.2 points
-
Hi. Of course. You're right. In one of the threads earlier you suggested me how to handle newline tags (<br>) in the title, which meant that I could add more text where it was useful. That's enough in most cases. I think this is nicely illustrated by an example of use: However, you're right, e.g. in a monthly view it won't work. Thanks for your reply. Such information is always valuable.2 points
-
Thank you for the guidance, Sherzod. With your explanation, I tried to solve it in a different way. Regards. VID_20250613_013038_793.mp41 point
-
Save code: FGrid: TUniDBGrid; FSection: string; FLayout: TStringList; procedure TUniGridLayOut.GetLayout; var i: integer; s: string; begin s := 'Column%d=%s,%d,%d,%d'; with FGrid, FLayout do begin Clear; for i := 0 to Columns.Count - 1 do with Columns[i] do Add(Format(s, [i + 1, FieldName, Width, Ord(Visible), Ord(Expanded)])); end; end; Restore code: type TColumnParam = record ColumnName: string; ColumnWidth: integer; ColumnVisible: boolean; ColumnExpanded: boolean; end; procedure TUniGridLayOut.ApplyLayout; var Column: TUniDBGridColumn; i: integer; ColumnParam: TColumnParam; procedure ParamFromStr(var ColumnParam: TColumnParam; const s: string); var Arr: TArray<string>; begin Arr := s.Split([',']); if Length(Arr) = 4 then begin ColumnParam.ColumnName := Arr[0]; TryStrToInt(Arr[1], ColumnParam.ColumnWidth); ColumnParam.ColumnVisible := Arr[2] = '1'; ColumnParam.ColumnExpanded := Arr[3] = '1'; end; end; begin with FGrid, FLayout do begin BeginUpdate; try for i := 0 to FLayout.Count - 1 do begin ParamFromStr(ColumnParam, FLayout[i]); TMyUniCustomDBGridColumns(Columns).FindFieldId(ColumnParam.ColumnName, TUniBaseDBGridColumn(Column)); if Assigned(Column) then begin if i < Columns.Count then Column.Index := i; Column.Width := ColumnParam.ColumnWidth; Column.Visible := ColumnParam.ColumnVisible; Column.Expanded := ColumnParam.ColumnExpanded; end; end; finally EndUpdate; end; end; end;1 point
-
1 point
-
If you would like to play a sound when entering the program, an error, or a message, you can use this command. Of course, it is better to make the sounds very small. I used sounds between 1 and 3 KB for my program. Procedure TDMT.Sound_Income; Begin if Sound_Incom then UniSession.AddJS( 'var audio = new Audio("files/Sound/W.mp3"); audio.play();' ); End;1 point
-
Please. I took a sample from the link below https://forums.unigui.com/index.php?/topic/7423-can-barcode-read-from-mobiles-camera/ and modified it for my needs. It has the following address there. https://github.com/b1zantine/ZXing-Orient1 point
-
1 point
-
In CSS .x-treelist, .x-treelist-row{ background-color: #28a745 !important; color: #FFF !important; } .x-treelist-row-over, .x-treelist-nav .x-treelist-item-selected > .x-treelist-row{ background-color: #ff7105 !important; color: #FFF !important; } .x-treelist-item-text, .x-treelist-item-icon, .x-treelist-item-expander { color: #FFF !important; } .x-treelist-nav .x-treelist-item-selected > .x-treelist-row:before { background-color: #ffffff !important; color: #FFF !important; } .x-treelist-nav .x-treelist-item-selected { background-color: #ff7105 !important; } .x-treelist-nav .x-treelist-item-tool { color: #FFF !important; }1 point
-
Hello ! I'm answering myself. The following code seems to work: var MapJSName: string; begin MapJSName := UniMap1.JSName + '_uniMap'; UniSession.AddJS( 'var e = { layers: window.' + MapJSName + 'drawnItems };' + 'window.' + MapJSName + '.fire("draw:edited", e);' + 'window.' + MapJSName + 'drawoptions._toolbars.edit._modes.edit.handler.disable();' ); It calls the 'save' of the draw toolbar It closes the toolbar1 point
-
Hi, First issue is that you must call like below: JSInterface.JSCallGlobal('getScan', ['UnimForm1']); You save form variable in a string local storage. You must change it as below: function processBarcode(b) { var frm = localStorage["currentForm"]; frm = eval(frm); frm = frm.form; ajaxRequest(frm, "BARCODE1", ["value1=" + b ]); }1 point
-
Perfect, thank you very much1 point
-
Hello ! A big big thank you ! It works very well... I've forget this wizard, since I've started my project ...And I was looking for something that was under my nose ! 20/20 for the support! Have a nice evening, Big thank you! With best regards, Hervé.1 point
-
I slightly adjusted your afterrender event. function afterrender(sender, eOpts) { if (sender.pagingBar) { sender.pagingBar.getComponent("refresh").hide() }; var me = sender; if (me.editingPlugin.isRowEditor) { me.editingPlugin.editorCfg.listeners = { show: function(a) { a.items.each(function(f) { f.setEditable(!f.column.rdonly); if (f.xtype === 'combo') { f.setEditable(false) } }) } }; }; var edPl = sender.editingPlugin; if (edPl && edPl.isRowEditor) { edPl.saveBtnText = 'Salvar'; edPl.cancelBtnText = 'Cancelar'; }; //var me=sender; //if (me.editingPlugin.isRowEditor) { // me.editingPlugin.editorCfg.autoCancel = true; //}; }1 point
-
1 point
-
1 point
-
Hello, Manually calling TUniServerModule.Create(Application) in ServiceStart is not the correct way to initialize a uniGUI service application. uniGUI is designed to handle the server module lifecycle internally. When you use a proper TUniGUIService-based project structure, the server module is created automatically during Application.Initialize, as long as SetServerClass(UniGUIServerModuleClass) is called in InitService. Creating it manually bypasses the framework's lifecycle management and can lead to instability or unexpected issues (e.g. session handling, port conflicts, etc.). I recommend removing that line and ensuring your project follows the standard uniGUI Windows Service template.1 point
-
1. UniHiddenPanel -> UniCheckBox1 2. MainForm/Form -> OnReady event: procedure TMainForm.UniFormReady(Sender: TObject); begin if UniPanel1.TitleVisible then UniPanel1.JSInterface.JSCall('header.insert', [0, UniCheckBox1.JSControl]); end;1 point
-
Hello, I've done : "If you want to convert a standard uniGUI app to service app, the best way is to create a new Service app and then moving all forms and modules from old app to the new app." And All is ok ! Big thank you ! Hervé.1 point
-
Да, сработало, спасибо! А использую OnMouseDown потому что, если таблица пустая, то событие CellContextClick не срабатывает, и приходится их попеременно использовать.1 point
-
Добрый вечер! Не знаю, насколько уместно использовать в Вашем случае OnMouseDown, но Вы можете, например, воспользоваться свойством SelectedRows, а точнее — SelectedRows.Count.1 point
-
1 point
-
@Sherzod, I used your information and created a component that instantiates the "ToolButton" in the "OnCreate" of the derived class. It's not completely dynamic like creating at runtime, but it gives me flexibility and it worked for me. Thanks1 point
-
Here is a little improvement: .imgAnexo img { display: block; margin: 0 auto; width: 100%; maxHeight: 100%; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); object-fit: contain; }1 point
-
Проверил с использованием отдельных редакторов uniDBLookupComboBox, получилось, теперь поля переносятся без задержек1 point
-
1 point
-
Hello fellas I’m excited to share a sample that demonstrates how to access and control multiple webcams directly from the browser — no third-party components required! This project showcases: ✅ Real-time webcam selection using TUniComboBox 📸 Snapshot capture with live preview 🖋 Watermarking using HTML5 Canvas ✂️ Region selection with cropping support 🔁 Fully native implementation using TUniHTMLFrame, TUniImage, and ajaxRequest All video and image processing is handled using standard HTML5 APIs and native Delphi classes like TPngImage, TBitmap, and TBytesStream. It's lightweight, clean, and easy to integrate into your own uniGUI projects. 📂 GitHub Repository: 👉 https://github.com/lfgarrido/uniWebcam Feel free to explore, fork, and contribute. I hope this helps others looking to integrate webcam functionality into uniGUI apps. Happy coding, and keep building awesome things! 💻✨1 point
-
1 point
-
uniGUI - Amazon (AWS) S3 Manager What is Amazon S3 Bucket Is a file hosting/sharing service provided by AWS. With this project you can implement S3 file hosting services into management in uniGUI APP creating a professional environment to handle and share files with a high security level/scheme provided by AMAZON AWS S3. Click here to learn more about Amazon File Hosting and S3 Services Features and Resources Manage S3 Buckets content from any uniGUI App Handles many Buckets at the same time Delete, Upload, Files ffrom uniGUI Server into S3 Buckets "on-the-fly" Create, Delete, List Buckets from uniGUI Interface Controls Download/Upload Files to/from buckets by uniGUI Server Create Pre-signed URLs for file sharing Define Pre-signed URLs validation time limits uniGUI App works as a File Server and Sync with AWS3 Buckets uniGUI App with complete Code No hiden fee or third part components acquisition. All code is yours. Yes, we offer consultancy to adapt any of these examples to your systems. Consult us to receive a quote. AWS is a paid by demand service or per use/traffic/feature. Be aware for price/bills/costs etc You MUST have a AWS account active to use this service. A credit card is also require to create one. HTTPS connection required for use on your domain. More details at https://www.unigui.com.br/UniGUIAmazonS3.html Also a completely working demo (no limitations) to download at link above.1 point
-
Why make our lives easy? This should be the basic component (DB and otherwise) used by everyone. And instead it is ignored, making our lives very difficult for simple cases... 🙂 ++++++++++++11 point
-
Hello, Any news about this? Maybe put this feature in the roadmap?1 point
-
Someday, when I got my farm and retire, I'll rise two pigs and will name them: AJAX and REQUEST ! Just to see the mess they will do when I call.1 point
-
Hello, Do you have 1200 combo boxes on your form? I think you should review the logic of your program.1 point
-
این کد خرداد ماه 1399 اشتباه نمایش میدهد و وقتی که کلیک میکنید همان روز در تیرماه نمایش میدهد؟؟؟1 point
-
0 points