![]() |
| Clomosy Resmi Forum Sitesidir. Amacımız kullanıcılarımıza, iş ortaklarımıza, danışmanlara, yazılımcılara programlarımız hakkında destek ve bilgi vermektir. |
kod calismiyor ama357 satira hata gosteriyor |
Yanıt Yaz
|
| Yazar | |
Barthe_dev
Yeni Üye
Kayıt Tarihi: 07 Temmuz 2026 Konum: konya Durum: Aktif Değil Puanlar: 27 |
Mesaj Seçenekleri
Yanıt Yaz
Alıntı Barthe_dev
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
Teşekkürler(0)
Alıntı Cevapla
Konu: kod calismiyor ama357 satira hata gosteriyorGönderim Zamanı: 2 Saat 50 Dakika Önce Saat 16:56 |
|
var MyForm: TclForm; mainLayout, screenSwitcherLayout: TclLayout; mvtScreenLayout, prodScreenLayout: TclLayout; btnMvtScreen, btnProdScreen: TclProButton; // Header Panel headerPanel: TclProPanel; lblHeaderTitle, lblHeaderSubtitle: TclProLabel; statsLayout: TclLayout; pnlStat1, pnlStat2: TclProPanel; lblStatVal1, lblStatLbl1, lblStatVal2, lblStatLbl2: TclProLabel; // Mouvements list mvtScrollBox: TclVertScrollBox; mvtQuery: TclJsonQuery; mvtJson: String; // Production lots & Invoices list prodScrollBox: TclVertScrollBox; lotsQuery: TclJsonQuery; lotsJson: String; invoicesQuery: TclJsonQuery; invoicesJson: String; // Actions & Scanner mvtActionsPanel: TclProPanel; prodActionsPanel: TclProPanel; btnScanQr: TclProButton; lblScanResult: TclProLabel; // Bottom Tab Bar tabBarPanel: TclProPanel; btnTabMvt, btnTabProd, btnTabUsers, btnTabReports, btnTabSettings: TclProButton; // Detail Sheets / Overlay detailOverlay: TclProPanel; detailSheet: TclProPanel; lblDetailTitle, lblDetailSubtitle: TclProLabel; pnlDetailGrid: TclProPanel; lblGridVal1, lblGridLbl1, lblGridVal2, lblGridLbl2: TclProLabel; lblGridVal3, lblGridLbl3, lblGridVal4, lblGridLbl4: TclProLabel; btnDetailAction1, btnDetailAction2: TclProButton; btnCloseDetail: TclProButton; // Loop & temporary variables i, clickedIndex: Integer; tempPanel: TclProPanel; tempLayout,HeaderLayout: TclLayout; tempLabel, tempLabel2,label1,label2: TclProLabel; tempProgressBg, tempProgressFg: TclProPanel; tempTypeIcon: TclProPanel; void ShowMvtScreen; { mvtScreenLayout.Visible = True; prodScreenLayout.Visible = False; lblHeaderTitle.Text = 'Mouvements'; lblHeaderSubtitle.Text = '& traçabilité'; lblHeaderSubtitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#00d4ff'); // Switch button styles clComponent.SetupComponent(btnMvtScreen, '{"BackgroundColor":"#0d1520", "TextColor":"#e2eaf5"}'); clComponent.SetupComponent(btnProdScreen, '{"BackgroundColor":"#080d14", "TextColor":"#4a6580"}'); } void ShowProdScreen; { mvtScreenLayout.Visible = False; prodScreenLayout.Visible = True; lblHeaderTitle.Text = 'Production'; lblHeaderSubtitle.Text = '& lots'; lblHeaderSubtitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#60a5fa'); // Switch button styles clComponent.SetupComponent(btnMvtScreen, '{"BackgroundColor":"#080d14", "TextColor":"#4a6580"}'); clComponent.SetupComponent(btnProdScreen, '{"BackgroundColor":"#0d1520", "TextColor":"#e2eaf5"}'); } void OnMvtScreenClick; { ShowMvtScreen; } void OnProdScreenClick; { ShowProdScreen; } void CloseDetailOverlay; { detailOverlay.Visible = False; } void OpenMvtDetail; var idx: Integer; foundMvt: Boolean; { idx = TclProPanel(MyForm.ClSender).ClTagInt; mvtQuery.First; foundMvt = False; i = 0; while (not mvtQuery.Eof) { if (i == idx) { foundMvt = True; Break; } i = i + 1; mvtQuery.Next; } if (foundMvt) { lblDetailTitle.Text = mvtQuery.FieldByName('id').AsString; lblDetailSubtitle.Text = mvtQuery.FieldByName('product').AsString + ' · ' + mvtQuery.FieldByName('bloc').AsString; lblGridLbl1.Text = 'QUANTITÉ'; lblGridVal1.Text = mvtQuery.FieldByName('qty').AsString + ' ' + mvtQuery.FieldByName('unit').AsString; lblGridLbl2.Text = 'LOT'; lblGridVal2.Text = mvtQuery.FieldByName('lot').AsString; lblGridLbl3.Text = 'DATE / HEURE'; lblGridVal3.Text = mvtQuery.FieldByName('date').AsString + ' ' + mvtQuery.FieldByName('time').AsString; lblGridLbl4.Text = 'OPÉRATEUR'; lblGridVal4.Text = mvtQuery.FieldByName('operator').AsString; btnDetailAction1.Caption = 'Voir le QR'; btnDetailAction2.Caption = 'Annuler'; detailOverlay.Visible = True; } } void OpenLotDetail; var idx: Integer; foundLot: Boolean; { idx = TclProPanel(MyForm.ClSender).ClTagInt; lotsQuery.First; foundLot = False; i = 0; while (not lotsQuery.Eof) { if (i == idx) { foundLot = True; Break; } i = i + 1; lotsQuery.Next; } if (foundLot) { lblDetailTitle.Text = lotsQuery.FieldByName('id').AsString; lblDetailSubtitle.Text = lotsQuery.FieldByName('product').AsString + ' · ' + lotsQuery.FieldByName('bloc').AsString; lblGridLbl1.Text = 'QUANTITÉ'; lblGridVal1.Text = lotsQuery.FieldByName('qty').AsString + ' ' + lotsQuery.FieldByName('unit').AsString; lblGridLbl2.Text = 'PROGRESSION'; lblGridVal2.Text = lotsQuery.FieldByName('progress').AsString + '%'; lblGridLbl3.Text = 'DÉBUT'; lblGridVal3.Text = lotsQuery.FieldByName('started').AsString; lblGridLbl4.Text = 'OPÉRATEUR'; lblGridVal4.Text = lotsQuery.FieldByName('operator').AsString; btnDetailAction1.Caption = 'Mettre à jour'; btnDetailAction2.Caption = 'Clôturer le lot'; detailOverlay.Visible = True; } } void OpenInvoiceDetail; var idx: Integer; foundInv: Boolean; { idx = TclProPanel(MyForm.ClSender).ClTagInt; invoicesQuery.First; foundInv = False; i = 0; while (not invoicesQuery.Eof) { if (i == idx) { foundInv = True; Break; } i = i + 1; invoicesQuery.Next; } if (foundInv) { lblDetailTitle.Text = invoicesQuery.FieldByName('id').AsString; lblDetailSubtitle.Text = invoicesQuery.FieldByName('client').AsString; lblGridLbl1.Text = 'MONTANT'; lblGridVal1.Text = invoicesQuery.FieldByName('amount').AsString + ' ' + invoicesQuery.FieldByName('currency').AsString; lblGridLbl2.Text = 'STATUT'; lblGridVal2.Text = invoicesQuery.FieldByName('status').AsString; lblGridLbl3.Text = 'ÉMISE LE'; lblGridVal3.Text = invoicesQuery.FieldByName('date').AsString; lblGridLbl4.Text = 'ÉCHÉANCE'; lblGridVal4.Text = invoicesQuery.FieldByName('due').AsString; btnDetailAction1.Caption = 'Marquer payée'; btnDetailAction2.Caption = 'Exporter PDF'; detailOverlay.Visible = True; } } void RunScanner; { MyForm.CallBarcodeReader(lblScanResult); } void TabClick; var tabName: String; { tabName = TclProButton(MyForm.ClSender).Caption; ShowMessage('Navigation vers : ' + tabName); } void ActionClick; var actName: String; { actName = TclProButton(MyForm.ClSender).Text; ShowMessage('Action déclenchée : ' + actName); } { MyForm = TclForm.Create(Self); MyForm.SetFormColor('#080d14', '#0d1520', clGVertical); // Set window state to full screen on Windows if (not Clomosy.PlatformIsMobile) { MyForm.clSetWindowState(fwsMaximized); } // --- Data Init --- mvtJson = '[{"id":"MV-081","date":"12/07","time":"14:32","type":"entrée","product":"Produit A","lot":"LOT001","bloc":"Bloc A","qty":50,"unit":"kg","operator":"Y. Kaya"},' + '{"id":"MV-082","date":"12/07","time":"11:15","type":"sortie","product":"Produit B","lot":"LOT002","bloc":"Dépôt","qty":-10,"unit":"pcs","operator":"M. Arslan"},' + '{"id":"MV-083","date":"11/07","time":"09:47","type":"entrée","product":"Produit C","lot":"LOT003","bloc":"Bloc B","qty":120,"unit":"unité","operator":"F. Demir"},' + '{"id":"MV-084","date":"11/07","time":"08:05","type":"transfert","product":"Produit D","lot":"LOT001","bloc":"Bloc C","qty":30,"unit":"pcs","operator":"A. Yıldız"}]'; lotsJson = '[{"id":"LOT001","product":"Produit A","bloc":"Bloc A","qty":320,"unit":"kg","status":"production","started":"08/07","operator":"Y. Kaya","progress":72},' + '{"id":"LOT002","product":"Produit B","bloc":"Bloc B","qty":150,"unit":"pcs","status":"depot","started":"05/07","operator":"M. Arslan","progress":100},' + '{"id":"LOT003","product":"Produit C","bloc":"Bloc C","qty":480,"unit":"unité","status":"production","started":"10/07","operator":"F. Demir","progress":45}]'; invoicesJson = '[{"id":"F001","client":"Client A","amount":"250 000","currency":"DA","date":"01/07","due":"15/07","status":"payée"},' + '{"id":"F002","client":"Client B","amount":"120 000","currency":"DA","date":"03/07","due":"17/07","status":"retard"},' + '{"id":"F003","client":"Client C","amount":"85 000","currency":"DA","date":"06/07","due":"20/07","status":"en_attente"}]'; mvtQuery = Clomosy.ClDataSetFromJSON(mvtJson); lotsQuery = Clomosy.ClDataSetFromJSON(lotsJson); invoicesQuery = Clomosy.ClDataSetFromJSON(invoicesJson); // --- Main Layout --- mainLayout = MyForm.AddNewLayout(MyForm, 'mainLayout'); mainLayout.Align = alClient; mainLayout.Margins.Bottom = 60; // Leave space for bottom tab bar // [ ÉTAPE 1 : HEADER GESTION DES MEMBRES ] HeaderLayout = MyForm.AddNewLayout(mainLayout, 'HeaderLayout'); HeaderLayout.Align = alTop; HeaderLayout.Height = 80; // Bouton Retour (Gauche) label1 = MyForm.AddNewProLabel(HeaderLayout, 'label1', 'GESTIONNAIRES DES UTILISATEURS'); label1.Align = alTop; label1.Margins.Left = 14; label1.Margins.Top = 16; label1.clProSettings.FontColor = clAlphaColor.clHexToColor('#446580'); label1.clProSettings.FontSize = 12; label1.clProSettings.TextSettings.Font.Style = [fsBold]; label1.SetclProSettings(label1.clProSettings); // Titre "MEMBRES" (Centre) label2 = MyForm.AddNewProLabel(HeaderLayout, 'label2', 'Utilisateurs & roles'); label2.Align = alTop; label2.Margins.Left = 14; label2.Height = 40; label2.clProSettings.FontColor = clAlphaColor.clHexToColor('#e8eef5'); label2.clProSettings.FontSize = 30; label2.clProSettings.TextSettings.Font.Style = [fsBold]; label2.SetclProSettings(label2.clProSettings); // --- Header Panel --- headerPanel = MyForm.AddNewProPanel(mainLayout, 'headerPanel'); headerPanel.Align = alTop; headerPanel.Height = 110; headerPanel.Margins.Left = 10; headerPanel.Margins.Right = 10; headerPanel.Margins.Top = 10; headerPanel.Padding.Left = 15; headerPanel.Padding.Top = 15; lblHeaderTitle = MyForm.AddNewLabel(headerPanel, 'lblHeaderTitle', 'Mouvements'); lblHeaderTitle.Align = alTop; lblHeaderTitle.clProSettings.FontSize = 22; lblHeaderTitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5'); lblHeaderTitle.SetclProSettings(lblHeaderTitle.clProSettings); lblHeaderSubtitle = MyForm.AddNewLabel(headerPanel, 'lblHeaderSubtitle', '& traçabilité'); lblHeaderSubtitle.Align = alTop; lblHeaderSubtitle.clProSettings.FontSize = 18; lblHeaderSubtitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#00d4ff'); lblHeaderSubtitle.Margins.Top = 2; lblHeaderSubtitle.SetclProSettings(lblHeaderSubtitle.clProSettings); // --- Screen Switcher Pill --- screenSwitcherLayout = MyForm.AddNewLayout(mainLayout, 'screenSwitcherLayout'); screenSwitcherLayout.Align = alTop; screenSwitcherLayout.Height = 44; screenSwitcherLayout.Margins.Left = 10; screenSwitcherLayout.Margins.Right = 10; screenSwitcherLayout.Margins.Top = 8; btnMvtScreen = MyForm.AddNewProButton(screenSwitcherLayout, 'btnMvtScreen', 'Mouvements'); btnMvtScreen.Align = alLeft; btnMvtScreen.Width = 170; clComponent.SetupComponent(btnMvtScreen, '{"BackgroundColor":"#0d1520", "TextColor":"#e2eaf5", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#1a2d42", "BorderWidth":1}'); MyForm.AddNewEvent(btnMvtScreen, tbeOnClick, 'OnMvtScreenClick'); btnProdScreen = MyForm.AddNewProButton(screenSwitcherLayout, 'btnProdScreen', 'Production'); btnProdScreen.Align = alRight; btnProdScreen.Width = 170; clComponent.SetupComponent(btnProdScreen, '{"BackgroundColor":"#080d14", "TextColor":"#4a6580", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#1a2d42", "BorderWidth":1}'); MyForm.AddNewEvent(btnProdScreen, tbeOnClick, 'OnProdScreenClick'); // --- Mouvement Screen --- mvtScreenLayout = MyForm.AddNewLayout(mainLayout, 'mvtScreenLayout'); mvtScreenLayout.Align = alClient; mvtScrollBox = MyForm.AddNewVertScrollBox(mvtScreenLayout, 'mvtScrollBox'); mvtScrollBox.Align = alClient; mvtScrollBox.Margins.Top = 10; // Dynamically load Movements list mvtQuery.First; i = 0; while (not mvtQuery.Eof) { tempPanel = MyForm.AddNewProPanel(mvtScrollBox, 'mvtCard' + IntToStr(i)); tempPanel.Align = alTop; tempPanel.Height = 70; tempPanel.Margins.Left = 10; tempPanel.Margins.Right = 10; tempPanel.Margins.Bottom = 8; tempPanel.ClTagInt = i; clComponent.SetupComponent(tempPanel, '{"BackgroundColor":"#0d1520", "RoundHeight":12, "RoundWidth":12, "BorderColor":"#1a2d42", "BorderWidth":1}'); MyForm.AddNewEvent(tempPanel, tbeOnClick, 'OpenMvtDetail'); // Icon panel wrapper tempTypeIcon = MyForm.AddNewProPanel(tempPanel, 'mvtIcon' + IntToStr(i)); tempTypeIcon.Align = alLeft; tempTypeIcon.Width = 40; tempTypeIcon.Margins.Left = 10; tempTypeIcon.Margins.Top = 10; tempTypeIcon.Margins.Bottom = 10; if (mvtQuery.FieldByName('type').AsString == 'entrée') { clComponent.SetupComponent(tempTypeIcon, '{"BackgroundColor":"#22c55e18", "BorderColor":"#22c55e30", "BorderWidth":1, "RoundHeight":8, "RoundWidth":8}'); } else if (mvtQuery.FieldByName('type').AsString == 'sortie') { clComponent.SetupComponent(tempTypeIcon, '{"BackgroundColor":"#f9731618", "BorderColor":"#f9731630", "BorderWidth":1, "RoundHeight":8, "RoundWidth":8}'); } else { clComponent.SetupComponent(tempTypeIcon, '{"BackgroundColor":"#00d4ff14", "BorderColor":"#00d4ff30", "BorderWidth":1, "RoundHeight":8, "RoundWidth":8}'); } // Details block tempLayout = MyForm.AddNewLayout(tempPanel, 'mvtTextLayout' + IntToStr(i)); tempLayout.Align = alClient; tempLayout.Margins.Left = 12; tempLayout.Margins.Top = 12; tempLabel = MyForm.AddNewLabel(tempLayout, 'mvtLblProd' + IntToStr(i), mvtQuery.FieldByName('product').AsString); tempLabel.Align = alTop; tempLabel.clProSettings.FontSize = 13; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5'); //tempLabel.TextSettings.StyledSettings = ssFamily; tempLabel2 = MyForm.AddNewLabel(tempLayout, 'mvtLblSub' + IntToStr(i), mvtQuery.FieldByName('date').AsString + ' · ' + mvtQuery.FieldByName('time').AsString + ' · ' + mvtQuery.FieldByName('bloc').AsString); tempLabel2.Align = alTop; tempLabel2.clProSettings.FontSize = 10; tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //tempLabel2.TextSettings.StyledSettings = ssFamily; tempLabel2.Margins.Top = 3; // Qty block tempLayout = MyForm.AddNewLayout(tempPanel, 'mvtQtyLayout' + IntToStr(i)); tempLayout.Align = alRight; tempLayout.Width = 80; tempLayout.Margins.Right = 10; tempLayout.Margins.Top = 12; tempLabel = MyForm.AddNewLabel(tempLayout, 'mvtLblQty' + IntToStr(i), mvtQuery.FieldByName('qty').AsString); tempLabel.Align = alTop; tempLabel.clProSettings.FontSize = 15; if (mvtQuery.FieldByName('qty').AsInteger > 0) { tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#4ade80'); } else { tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#fb923c'); } //tempLabel.TextSettings.StyledSettings = ssFamily; tempLabel2 = MyForm.AddNewLabel(tempLayout, 'mvtLblUnit' + IntToStr(i), mvtQuery.FieldByName('unit').AsString); tempLabel2.Align = alTop; tempLabel2.clProSettings.FontSize = 9; tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //tempLabel2.TextSettings.StyledSettings = ssFamily; tempLabel2.Margins.Top = 2; i = i + 1; mvtQuery.Next; } // Administrator actions for Mouvements Screen mvtActionsPanel = MyForm.AddNewProPanel(mvtScrollBox, 'mvtActionsPanel'); mvtActionsPanel.Align = alTop; mvtActionsPanel.Height = 220; mvtActionsPanel.Margins.Top = 15; mvtActionsPanel.Margins.Left = 10; mvtActionsPanel.Margins.Right = 10; tempLabel = MyForm.AddNewLabel(mvtActionsPanel, 'lblAdminTitle1', 'ACTIONS ADMINISTRATEUR'); tempLabel.Align = alTop; tempLabel.clProSettings.FontSize = 10; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //tempLabel.TextSettings.StyledSettings = ssFamily; tempLabel.Margins.Bottom = 8; btnScanQr = MyForm.AddNewProButton(mvtActionsPanel, 'btnScanQr', 'Scanner un QR code / lot'); btnScanQr.Align = alTop; btnScanQr.Height = 44; btnScanQr.Margins.Bottom = 8; clComponent.SetupComponent(btnScanQr, '{"BackgroundColor":"#00d4ff18", "TextColor":"#00d4ff", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#00d4ff30", "BorderWidth":1}'); MyForm.AddNewEvent(btnScanQr, tbeOnClick, 'RunScanner'); lblScanResult = MyForm.AddNewLabel(mvtActionsPanel, 'lblScanResult', ''); lblScanResult.Visible = False; // --- Production Screen --- prodScreenLayout = MyForm.AddNewLayout(mainLayout, 'prodScreenLayout'); prodScreenLayout.Align = alClient; prodScreenLayout.Visible = False; // Hide initially prodScrollBox = MyForm.AddNewVertScrollBox(prodScreenLayout, 'prodScrollBox'); prodScrollBox.Align = alClient; prodScrollBox.Margins.Top = 10; // Header section for active Lots tempLabel = MyForm.AddNewLabel(prodScrollBox, 'lblLotsHeader', 'Suivi de production'); tempLabel.Align = alTop; tempLabel.Margins.Left = 12; tempLabel.Margins.Bottom = 8; tempLabel.clProSettings.FontSize = 11; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //tempLabel.TextSettings.StyledSettings = ssFamily; // Dynamically load Lots list lotsQuery.First; i = 0; while (not lotsQuery.Eof) { tempPanel = MyForm.AddNewProPanel(prodScrollBox, 'lotCard' + IntToStr(i)); tempPanel.Align = alTop; tempPanel.Height = 85; tempPanel.Margins.Left = 10; tempPanel.Margins.Right = 10; tempPanel.Margins.Bottom = 8; tempPanel.ClTagInt = i; clComponent.SetupComponent(tempPanel, '{"BackgroundColor":"#0d1520", "RoundHeight":12, "RoundWidth":12, "BorderColor":"#1a2d42", "BorderWidth":1}'); MyForm.AddNewEvent(tempPanel, tbeOnClick, 'OpenLotDetail'); // Details block tempLayout = MyForm.AddNewLayout(tempPanel, 'lotTextLayout' + IntToStr(i)); tempLayout.Align = alClient; tempLayout.Margins.Left = 15; tempLayout.Margins.Top = 12; tempLabel = MyForm.AddNewLabel(tempLayout, 'lotLblId' + IntToStr(i), lotsQuery.FieldByName('id').AsString); tempLabel.Align = alTop; tempLabel.clProSettings.FontSize = 13; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5'); //tempLabel.TextSettings.StyledSettings = ssFamily; tempLabel2 = MyForm.AddNewLabel(tempLayout, 'lotLblProduct' + IntToStr(i), lotsQuery.FieldByName('product').AsString + ' · ' + lotsQuery.FieldByName('bloc').AsString); tempLabel2.Align = alTop; tempLabel2.clProSettings.FontSize = 10; tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //tempLabel2.TextSettings.StyledSettings = ssFamily; tempLabel2.Margins.Top = 3; // Progress Bar rendering in Clomosy tempProgressBg = MyForm.AddNewProPanel(tempLayout, 'lotProgressBg' + IntToStr(i)); tempProgressBg.Align = alTop; tempProgressBg.Height = 4; tempProgressBg.Margins.Top = 6; clComponent.SetupComponent(tempProgressBg, '{"BackgroundColor":"#1e3552", "RoundHeight":2, "RoundWidth":2}'); tempProgressFg = MyForm.AddNewProPanel(tempProgressBg, 'lotProgressFg' + IntToStr(i)); tempProgressFg.Align = alLeft; tempProgressFg.Width = Round(lotsQuery.FieldByName('progress').AsInteger * 1.5); // scaled width if (lotsQuery.FieldByName('status').AsString == 'production') { clComponent.SetupComponent(tempProgressFg, '{"BackgroundColor":"#60a5fa", "RoundHeight":2, "RoundWidth":2}'); } else if (lotsQuery.FieldByName('status').AsString == 'depot') { clComponent.SetupComponent(tempProgressFg, '{"BackgroundColor":"#4ade80", "RoundHeight":2, "RoundWidth":2}'); } else { clComponent.SetupComponent(tempProgressFg, '{"BackgroundColor":"#fbbf24", "RoundHeight":2, "RoundWidth":2}'); } // Qty block tempLayout = MyForm.AddNewLayout(tempPanel, 'lotQtyLayout' + IntToStr(i)); tempLayout.Align = alRight; tempLayout.Width = 80; tempLayout.Margins.Right = 10; tempLayout.Margins.Top = 12; tempLabel = MyForm.AddNewLabel(tempLayout, 'lotLblQty' + IntToStr(i), lotsQuery.FieldByName('qty').AsString); tempLabel.Align = alTop; tempLabel.clProSettings.FontSize = 13; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5'); //tempLabel.TextSettings.StyledSettings = ssFamily; tempLabel2 = MyForm.AddNewLabel(tempLayout, 'lotLblUnit' + IntToStr(i), lotsQuery.FieldByName('unit').AsString); tempLabel2.Align = alTop; tempLabel2.clProSettings.FontSize = 9; tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //tempLabel2.TextSettings.StyledSettings = ssFamily; tempLabel2.Margins.Top = 2; i = i + 1; lotsQuery.Next; } // Header section for Invoices tempLabel = MyForm.AddNewLabel(prodScrollBox, 'lblInvoicesHeader', 'Factures'); tempLabel.Align = alTop; tempLabel.Margins.Left = 12; tempLabel.Margins.Top = 15; tempLabel.Margins.Bottom = 8; tempLabel.clProSettings.FontSize = 11; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //tempLabel.TextSettings.StyledSettings = ssFamily; // Dynamically load Invoices list invoicesQuery.First; i = 0; while (not invoicesQuery.Eof) { tempPanel = MyForm.AddNewProPanel(prodScrollBox, 'invCard' + IntToStr(i)); tempPanel.Align = alTop; tempPanel.Height = 70; tempPanel.Margins.Left = 10; tempPanel.Margins.Right = 10; tempPanel.Margins.Bottom = 8; tempPanel.ClTagInt = i; clComponent.SetupComponent(tempPanel, '{"BackgroundColor":"#0d1520", "RoundHeight":12, "RoundWidth":12, "BorderColor":"#1a2d42", "BorderWidth":1}'); MyForm.AddNewEvent(tempPanel, tbeOnClick, 'OpenInvoiceDetail'); // Details block tempLayout = MyForm.AddNewLayout(tempPanel, 'invTextLayout' + IntToStr(i)); tempLayout.Align = alClient; tempLayout.Margins.Left = 15; tempLayout.Margins.Top = 12; tempLabel = MyForm.AddNewLabel(tempLayout, 'invLblId' + IntToStr(i), invoicesQuery.FieldByName('id').AsString + ' · ' + invoicesQuery.FieldByName('client').AsString); tempLabel.Align = alTop; tempLabel.clProSettings.FontSize = 12; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5'); //tempLabel.TextSettings.StyledSettings = ssFamily; tempLabel2 = MyForm.AddNewLabel(tempLayout, 'invLblSub' + IntToStr(i), 'Émise le ' + invoicesQuery.FieldByName('date').AsString + ' · Échéance ' + invoicesQuery.FieldByName('due').AsString); tempLabel2.Align = alTop; tempLabel2.clProSettings.FontSize = 10; tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //tempLabel2.TextSettings.StyledSettings = ssFamily; tempLabel2.Margins.Top = 3; // Amount block tempLayout = MyForm.AddNewLayout(tempPanel, 'invAmountLayout' + IntToStr(i)); tempLayout.Align = alRight; tempLayout.Width = 100; tempLayout.Margins.Right = 10; tempLayout.Margins.Top = 12; tempLabel = MyForm.AddNewLabel(tempLayout, 'invLblAmount' + IntToStr(i), invoicesQuery.FieldByName('amount').AsString + ' ' + invoicesQuery.FieldByName('currency').AsString); tempLabel.Align = alTop; tempLabel.clProSettings.FontSize = 13; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5'); //tempLabel.TextSettings.StyledSettings = ssFamily; tempLabel2 = MyForm.AddNewLabel(tempLayout, 'invLblStatus' + IntToStr(i), invoicesQuery.FieldByName('status').AsString); tempLabel2.Align = alTop; tempLabel2.clProSettings.FontSize = 9; if (invoicesQuery.FieldByName('status').AsString == 'payée') { tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4ade80'); } else if (invoicesQuery.FieldByName('status').AsString == 'retard') { tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#fb923c'); } else { tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#fbbf24'); } //tempLabel2.TextSettings.StyledSettings = ssFamily; tempLabel2.Margins.Top = 2; i = i + 1; invoicesQuery.Next; } // Administrator actions for Production Screen prodActionsPanel = MyForm.AddNewProPanel(prodScrollBox, 'prodActionsPanel'); prodActionsPanel.Align = alTop; prodActionsPanel.Height = 140; prodActionsPanel.Margins.Top = 15; prodActionsPanel.Margins.Left = 10; prodActionsPanel.Margins.Right = 10; tempLabel = MyForm.AddNewLabel(prodActionsPanel, 'lblAdminTitle2', 'ACTIONS ADMINISTRATEUR'); tempLabel.Align = alTop; tempLabel.clProSettings.FontSize = 10; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //tempLabel.TextSettings.StyledSettings = ssFamily; tempLabel.Margins.Bottom = 8; btnScanQr = MyForm.AddNewProButton(prodActionsPanel, 'btnCreateLot', 'Créer un nouveau lot'); btnScanQr.Align = alTop; btnScanQr.Height = 44; btnScanQr.Margins.Bottom = 8; btnScanQr.Text = 'Créer un nouveau lot'; clComponent.SetupComponent(btnScanQr, '{"BackgroundColor":"#00d4ff18", "TextColor":"#00d4ff", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#00d4ff30", "BorderWidth":1}'); MyForm.AddNewEvent(btnScanQr, tbeOnClick, 'ActionClick'); // --- Bottom Tab Bar Panel --- tabBarPanel = MyForm.AddNewProPanel(MyForm, 'tabBarPanel'); tabBarPanel.Align = alBottom; tabBarPanel.Height = 60; clComponent.SetupComponent(tabBarPanel, '{"BackgroundColor":"#07101c", "BorderColor":"#1a2d42", "BorderWidth":1}'); btnTabMvt = MyForm.AddNewProButton(tabBarPanel, 'btnTabMvt', 'Stock'); btnTabMvt.Align = alLeft; btnTabMvt.Width = 75; btnTabMvt.Caption = 'Stock'; clComponent.SetupComponent(btnTabMvt, '{"BackgroundColor":"#07101c", "TextColor":"#00d4ff", "RoundHeight":0, "RoundWidth":0}'); MyForm.AddNewEvent(btnTabMvt, tbeOnClick, 'TabClick'); btnTabProd = MyForm.AddNewProButton(tabBarPanel, 'btnTabProd', 'Rapports'); btnTabProd.Align = alLeft; btnTabProd.Width = 75; btnTabProd.Caption = 'Rapports'; clComponent.SetupComponent(btnTabProd, '{"BackgroundColor":"#07101c", "TextColor":"#4a6580", "RoundHeight":0, "RoundWidth":0}'); MyForm.AddNewEvent(btnTabProd, tbeOnClick, 'TabClick'); // --- Detail Overlay Sheet (Modals) --- detailOverlay = MyForm.AddNewProPanel(MyForm, 'detailOverlay'); detailOverlay.Align = alClient; detailOverlay.Visible = False; clComponent.SetupComponent(detailOverlay, '{"BackgroundColor":"#040810d0"}'); // Dismiss overlay clicking the background MyForm.AddNewEvent(detailOverlay, tbeOnClick, 'CloseDetailOverlay'); detailSheet = MyForm.AddNewProPanel(detailOverlay, 'detailSheet'); detailSheet.Align = alBottom; detailSheet.Height = 280; clComponent.SetupComponent(detailSheet, '{"BackgroundColor":"#0c1828", "RoundHeight":20, "RoundWidth":20, "BorderColor":"#1a2d42", "BorderWidth":1}'); // Sheet Header lblDetailTitle = MyForm.AddNewLabel(detailSheet, 'lblDetailTitle', 'MV-081'); lblDetailTitle.Align = alTop; lblDetailTitle.Margins.Left = 20; lblDetailTitle.Margins.Top = 20; lblDetailTitle.clProSettings.FontSize = 18; lblDetailTitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5'); //lblDetailTitle.TextSettings.StyledSettings = ssFamily; lblDetailSubtitle = MyForm.AddNewLabel(detailSheet, 'lblDetailSubtitle', 'Produit A · Bloc A'); lblDetailSubtitle.Align = alTop; lblDetailSubtitle.Margins.Left = 20; lblDetailSubtitle.Margins.Top = 4; lblDetailSubtitle.clProSettings.FontSize = 12; lblDetailSubtitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //lblDetailSubtitle.TextSettings.StyledSettings = ssFamily; // Close Button btnCloseDetail = MyForm.AddNewProButton(detailSheet, 'btnCloseDetail', 'X'); btnCloseDetail.Align = alNone; btnCloseDetail.Width = 30; btnCloseDetail.Height = 30; btnCloseDetail.Position.X = 320; btnCloseDetail.Position.Y = 16; clComponent.SetupComponent(btnCloseDetail, '{"BackgroundColor":"#0d1520", "TextColor":"#4a6580", "RoundHeight":6, "RoundWidth":6, "BorderColor":"#1a2d42", "BorderWidth":1}'); MyForm.AddNewEvent(btnCloseDetail, tbeOnClick, 'CloseDetailOverlay'); // Details Grid Layout pnlDetailGrid = MyForm.AddNewProPanel(detailSheet, 'pnlDetailGrid'); pnlDetailGrid.Align = alTop; pnlDetailGrid.Height = 110; pnlDetailGrid.Margins.Top = 15; pnlDetailGrid.Margins.Left = 20; pnlDetailGrid.Margins.Right = 20; clComponent.SetupComponent(pnlDetailGrid, '{"BackgroundColor":"#0c1828"}'); // Col 1 Row 1 lblGridVal1 = MyForm.AddNewLabel(pnlDetailGrid, 'lblGridVal1', '50 kg'); lblGridVal1.Align = alNone; lblGridVal1.Position.X = 10; lblGridVal1.Position.Y = 10; lblGridVal1.clProSettings.FontSize = 13; lblGridVal1.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5'); //lblGridVal1.TextSettings.StyledSettings = ssFamily; lblGridLbl1 = MyForm.AddNewLabel(pnlDetailGrid, 'lblGridLbl1', 'QUANTITÉ'); lblGridLbl1.Align = alNone; lblGridLbl1.Position.X = 10; lblGridLbl1.Position.Y = 28; lblGridLbl1.clProSettings.FontSize = 9; lblGridLbl1.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //lblGridLbl1.TextSettings.StyledSettings = ssFamily; // Col 2 Row 1 lblGridVal2 = MyForm.AddNewLabel(pnlDetailGrid, 'lblGridVal2', 'LOT001'); lblGridVal2.Align = alNone; lblGridVal2.Position.X = 170; lblGridVal2.Position.Y = 10; lblGridVal2.clProSettings.FontSize = 13; lblGridVal2.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5'); //lblGridVal2.TextSettings.StyledSettings = ssFamily; lblGridLbl2 = MyForm.AddNewLabel(pnlDetailGrid, 'lblGridLbl2', 'LOT'); lblGridLbl2.Align = alNone; lblGridLbl2.Position.X = 170; lblGridLbl2.Position.Y = 28; lblGridLbl2.clProSettings.FontSize = 9; lblGridLbl2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); ///lblGridLbl2.TextSettings.StyledSettings = ssFamily; // Col 1 Row 2 lblGridVal3 = MyForm.AddNewLabel(pnlDetailGrid, 'lblGridVal3', '12/07 14:32'); lblGridVal3.Align = alNone; lblGridVal3.Position.X = 10; lblGridVal3.Position.Y = 60; lblGridVal3.clProSettings.FontSize = 13; lblGridVal3.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5'); //lblGridVal3.TextSettings.StyledSettings = ssFamily; lblGridLbl3 = MyForm.AddNewLabel(pnlDetailGrid, 'lblGridLbl3', 'DATE / HEURE'); lblGridLbl3.Align = alNone; lblGridLbl3.Position.X = 10; lblGridLbl3.Position.Y = 78; lblGridLbl3.clProSettings.FontSize = 9; lblGridLbl3.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //lblGridLbl3.TextSettings.StyledSettings = ssFamily; // Col 2 Row 2 lblGridVal4 = MyForm.AddNewLabel(pnlDetailGrid, 'lblGridVal4', 'Y. Kaya'); lblGridVal4.Align = alNone; lblGridVal4.Position.X = 170; lblGridVal4.Position.Y = 60; lblGridVal4.clProSettings.FontSize = 13; lblGridVal4.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5'); //lblGridVal4.TextSettings.StyledSettings = ssFamily; lblGridLbl4 = MyForm.AddNewLabel(pnlDetailGrid, 'lblGridLbl4', 'OPÉRATEUR'); lblGridLbl4.Align = alNone; lblGridLbl4.Position.X = 170; lblGridLbl4.Position.Y = 78; lblGridLbl4.clProSettings.FontSize = 9; lblGridLbl4.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //lblGridLbl4.TextSettings.StyledSettings = ssFamily; // Detail Actions btnDetailAction1 = MyForm.AddNewProButton(detailSheet, 'btnDetailAction1', 'Voir le QR'); btnDetailAction1.Align = alNone; btnDetailAction1.Width = 160; btnDetailAction1.Height = 44; btnDetailAction1.Position.X = 20; btnDetailAction1.Position.Y = 195; clComponent.SetupComponent(btnDetailAction1, '{"BackgroundColor":"#00d4ff18", "TextColor":"#00d4ff", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#00d4ff30", "BorderWidth":1}'); MyForm.AddNewEvent(btnDetailAction1, tbeOnClick, 'ActionClick'); btnDetailAction2 = MyForm.AddNewProButton(detailSheet, 'btnDetailAction2', 'Annuler'); btnDetailAction2.Align = alNone; btnDetailAction2.Width = 160; btnDetailAction2.Height = 44; btnDetailAction2.Position.X = 195; btnDetailAction2.Position.Y = 195; clComponent.SetupComponent(btnDetailAction2, '{"BackgroundColor":"#f9731618", "TextColor":"#fb923c", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#f9731630", "BorderWidth":1}'); MyForm.AddNewEvent(btnDetailAction2, tbeOnClick, 'ActionClick'); ShowMvtScreen; MyForm.Run; } |
|
![]() |
|
ibrahimBsr
Yeni Üye
Kayıt Tarihi: 23 Haziran 2026 Durum: Aktif Değil Puanlar: 35 |
Mesaj Seçenekleri
Yanıt Yaz
Alıntı ibrahimBsr
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
Teşekkürler(0)
Alıntı Cevapla
Gönderim Zamanı: 2 Saat 37 Dakika Önce Saat 17:09 |
|
Merhaba Barthez hatanı çözdüm sen başlıklarını TCLProLabel olarak kaydetmişsin ama kullanırken AddNewLabel olarak kullanmışsın bundan kaynaklı hata alıyordun kodun doğrusunu atıyorum:
var MyForm: TclForm; mainLayout, screenSwitcherLayout: TclLayout; mvtScreenLayout, prodScreenLayout: TclLayout; btnMvtScreen, btnProdScreen: TclProButton; // Header Panel headerPanel: TclProPanel; lblHeaderTitle, lblHeaderSubtitle: TclProLabel; statsLayout: TclLayout; pnlStat1, pnlStat2: TclProPanel; lblStatVal1, lblStatLbl1, lblStatVal2, lblStatLbl2: TclProLabel; // Mouvements list mvtScrollBox: TclVertScrollBox; mvtQuery: TclJsonQuery; mvtJson: String; // Production lots & Invoices list prodScrollBox: TclVertScrollBox; lotsQuery: TclJsonQuery; lotsJson: String; invoicesQuery: TclJsonQuery; invoicesJson: String; // Actions & Scanner mvtActionsPanel: TclProPanel; prodActionsPanel: TclProPanel; btnScanQr: TclProButton; lblScanResult: TclProLabel; // Bottom Tab Bar tabBarPanel: TclProPanel; btnTabMvt, btnTabProd, btnTabUsers, btnTabReports, btnTabSettings: TclProButton; // Detail Sheets / Overlay detailOverlay: TclProPanel; detailSheet: TclProPanel; lblDetailTitle, lblDetailSubtitle: TclProLabel; pnlDetailGrid: TclProPanel; lblGridVal1, lblGridLbl1, lblGridVal2, lblGridLbl2: TclProLabel; lblGridVal3, lblGridLbl3, lblGridVal4, lblGridLbl4: TclProLabel; btnDetailAction1, btnDetailAction2: TclProButton; btnCloseDetail: TclProButton; // Loop & temporary variables i, clickedIndex: Integer; tempPanel: TclProPanel; tempLayout,HeaderLayout: TclLayout; tempLabel, tempLabel2,label1,label2: TclProLabel; tempProgressBg, tempProgressFg: TclProPanel; tempTypeIcon: TclProPanel; void ShowMvtScreen; { mvtScreenLayout.Visible = True; prodScreenLayout.Visible = False; lblHeaderTitle.Text = 'Mouvements'; lblHeaderSubtitle.Text = '& traçabilité'; lblHeaderSubtitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#00d4ff'); // Switch button styles clComponent.SetupComponent(btnMvtScreen, '{"BackgroundColor":"#0d1520", "TextColor":"#e2eaf5"}'); clComponent.SetupComponent(btnProdScreen, '{"BackgroundColor":"#080d14", "TextColor":"#4a6580"}'); } void ShowProdScreen; { mvtScreenLayout.Visible = False; prodScreenLayout.Visible = True; lblHeaderTitle.Text = 'Production'; lblHeaderSubtitle.Text = '& lots'; lblHeaderSubtitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#60a5fa'); // Switch button styles clComponent.SetupComponent(btnMvtScreen, '{"BackgroundColor":"#080d14", "TextColor":"#4a6580"}'); clComponent.SetupComponent(btnProdScreen, '{"BackgroundColor":"#0d1520", "TextColor":"#e2eaf5"}'); } void OnMvtScreenClick; { ShowMvtScreen; } void OnProdScreenClick; { ShowProdScreen; } void CloseDetailOverlay; { detailOverlay.Visible = False; } void OpenMvtDetail; var idx: Integer; foundMvt: Boolean; { idx = TclProPanel(MyForm.ClSender).ClTagInt; mvtQuery.First; foundMvt = False; i = 0; while (not mvtQuery.Eof) { if (i == idx) { foundMvt = True; Break; } i = i + 1; mvtQuery.Next; } if (foundMvt) { lblDetailTitle.Text = mvtQuery.FieldByName('id').AsString; lblDetailSubtitle.Text = mvtQuery.FieldByName('product').AsString + ' · ' + mvtQuery.FieldByName('bloc').AsString; lblGridLbl1.Text = 'QUANTITÉ'; lblGridVal1.Text = mvtQuery.FieldByName('qty').AsString + ' ' + mvtQuery.FieldByName('unit').AsString; lblGridLbl2.Text = 'LOT'; lblGridVal2.Text = mvtQuery.FieldByName('lot').AsString; lblGridLbl3.Text = 'DATE / HEURE'; lblGridVal3.Text = mvtQuery.FieldByName('date').AsString + ' ' + mvtQuery.FieldByName('time').AsString; lblGridLbl4.Text = 'OPÉRATEUR'; lblGridVal4.Text = mvtQuery.FieldByName('operator').AsString; btnDetailAction1.Caption = 'Voir le QR'; btnDetailAction2.Caption = 'Annuler'; detailOverlay.Visible = True; } } void OpenLotDetail; var idx: Integer; foundLot: Boolean; { idx = TclProPanel(MyForm.ClSender).ClTagInt; lotsQuery.First; foundLot = False; i = 0; while (not lotsQuery.Eof) { if (i == idx) { foundLot = True; Break; } i = i + 1; lotsQuery.Next; } if (foundLot) { lblDetailTitle.Text = lotsQuery.FieldByName('id').AsString; lblDetailSubtitle.Text = lotsQuery.FieldByName('product').AsString + ' · ' + lotsQuery.FieldByName('bloc').AsString; lblGridLbl1.Text = 'QUANTITÉ'; lblGridVal1.Text = lotsQuery.FieldByName('qty').AsString + ' ' + lotsQuery.FieldByName('unit').AsString; lblGridLbl2.Text = 'PROGRESSION'; lblGridVal2.Text = lotsQuery.FieldByName('progress').AsString + '%'; lblGridLbl3.Text = 'DÉBUT'; lblGridVal3.Text = lotsQuery.FieldByName('started').AsString; lblGridLbl4.Text = 'OPÉRATEUR'; lblGridVal4.Text = lotsQuery.FieldByName('operator').AsString; btnDetailAction1.Caption = 'Mettre à jour'; btnDetailAction2.Caption = 'Clôturer le lot'; detailOverlay.Visible = True; } } void OpenInvoiceDetail; var idx: Integer; foundInv: Boolean; { idx = TclProPanel(MyForm.ClSender).ClTagInt; invoicesQuery.First; foundInv = False; i = 0; while (not invoicesQuery.Eof) { if (i == idx) { foundInv = True; Break; } i = i + 1; invoicesQuery.Next; } if (foundInv) { lblDetailTitle.Text = invoicesQuery.FieldByName('id').AsString; lblDetailSubtitle.Text = invoicesQuery.FieldByName('client').AsString; lblGridLbl1.Text = 'MONTANT'; lblGridVal1.Text = invoicesQuery.FieldByName('amount').AsString + ' ' + invoicesQuery.FieldByName('currency').AsString; lblGridLbl2.Text = 'STATUT'; lblGridVal2.Text = invoicesQuery.FieldByName('status').AsString; lblGridLbl3.Text = 'ÉMISE LE'; lblGridVal3.Text = invoicesQuery.FieldByName('date').AsString; lblGridLbl4.Text = 'ÉCHÉANCE'; lblGridVal4.Text = invoicesQuery.FieldByName('due').AsString; btnDetailAction1.Caption = 'Marquer payée'; btnDetailAction2.Caption = 'Exporter PDF'; detailOverlay.Visible = True; } } void RunScanner; { MyForm.CallBarcodeReader(lblScanResult); } void TabClick; var tabName: String; { tabName = TclProButton(MyForm.ClSender).Caption; ShowMessage('Navigation vers : ' + tabName); } void ActionClick; var actName: String; { actName = TclProButton(MyForm.ClSender).Text; ShowMessage('Action déclenchée : ' + actName); } { MyForm = TclForm.Create(Self); MyForm.SetFormColor('#080d14', '#0d1520', clGVertical); // Set window state to full screen on Windows if (not Clomosy.PlatformIsMobile) { MyForm.clSetWindowState(fwsMaximized); } // --- Data Init --- mvtJson = '[{"id":"MV-081","date":"12/07","time":"14:32","type":"entrée","product":"Produit A","lot":"LOT001","bloc":"Bloc A","qty":50,"unit":"kg","operator":"Y. Kaya"},' + '{"id":"MV-082","date":"12/07","time":"11:15","type":"sortie","product":"Produit B","lot":"LOT002","bloc":"Dépôt","qty":-10,"unit":"pcs","operator":"M. Arslan"},' + '{"id":"MV-083","date":"11/07","time":"09:47","type":"entrée","product":"Produit C","lot":"LOT003","bloc":"Bloc B","qty":120,"unit":"unité","operator":"F. Demir"},' + '{"id":"MV-084","date":"11/07","time":"08:05","type":"transfert","product":"Produit D","lot":"LOT001","bloc":"Bloc C","qty":30,"unit":"pcs","operator":"A. Yıldız"}]'; lotsJson = '[{"id":"LOT001","product":"Produit A","bloc":"Bloc A","qty":320,"unit":"kg","status":"production","started":"08/07","operator":"Y. Kaya","progress":72},' + '{"id":"LOT002","product":"Produit B","bloc":"Bloc B","qty":150,"unit":"pcs","status":"depot","started":"05/07","operator":"M. Arslan","progress":100},' + '{"id":"LOT003","product":"Produit C","bloc":"Bloc C","qty":480,"unit":"unité","status":"production","started":"10/07","operator":"F. Demir","progress":45}]'; invoicesJson = '[{"id":"F001","client":"Client A","amount":"250 000","currency":"DA","date":"01/07","due":"15/07","status":"payée"},' + '{"id":"F002","client":"Client B","amount":"120 000","currency":"DA","date":"03/07","due":"17/07","status":"retard"},' + '{"id":"F003","client":"Client C","amount":"85 000","currency":"DA","date":"06/07","due":"20/07","status":"en_attente"}]'; mvtQuery = Clomosy.ClDataSetFromJSON(mvtJson); lotsQuery = Clomosy.ClDataSetFromJSON(lotsJson); invoicesQuery = Clomosy.ClDataSetFromJSON(invoicesJson); // --- Main Layout --- mainLayout = MyForm.AddNewLayout(MyForm, 'mainLayout'); mainLayout.Align = alClient; mainLayout.Margins.Bottom = 60; // Leave space for bottom tab bar // [ ÉTAPE 1 : HEADER GESTION DES MEMBRES ] HeaderLayout = MyForm.AddNewLayout(mainLayout, 'HeaderLayout'); HeaderLayout.Align = alTop; HeaderLayout.Height = 80; // Bouton Retour (Gauche) label1 = MyForm.AddNewProLabel(HeaderLayout, 'label1', 'GESTIONNAIRES DES UTILISATEURS'); label1.Align = alTop; label1.Margins.Left = 14; label1.Margins.Top = 16; label1.clProSettings.FontColor = clAlphaColor.clHexToColor('#446580'); label1.clProSettings.FontSize = 12; label1.clProSettings.TextSettings.Font.Style = [fsBold]; label1.SetclProSettings(label1.clProSettings); // Titre "MEMBRES" (Centre) label2 = MyForm.AddNewProLabel(HeaderLayout, 'label2', 'Utilisateurs & roles'); label2.Align = alTop; label2.Margins.Left = 14; label2.Height = 40; label2.clProSettings.FontColor = clAlphaColor.clHexToColor('#e8eef5'); label2.clProSettings.FontSize = 30; label2.clProSettings.TextSettings.Font.Style = [fsBold]; label2.SetclProSettings(label2.clProSettings); // --- Header Panel --- headerPanel = MyForm.AddNewProPanel(mainLayout, 'headerPanel'); headerPanel.Align = alTop; headerPanel.Height = 110; headerPanel.Margins.Left = 10; headerPanel.Margins.Right = 10; headerPanel.Margins.Top = 10; headerPanel.Padding.Left = 15; headerPanel.Padding.Top = 15; lblHeaderTitle = MyForm.AddNewProLabel(headerPanel, 'lblHeaderTitle', 'Mouvements'); lblHeaderTitle.Align = alTop; lblHeaderTitle.clProSettings.FontSize = 22; lblHeaderTitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5'); lblHeaderTitle.SetclProSettings(lblHeaderTitle.clProSettings); lblHeaderSubtitle = MyForm.AddNewProLabel(headerPanel, 'lblHeaderSubtitle', '& traçabilité'); lblHeaderSubtitle.Align = alTop; lblHeaderSubtitle.clProSettings.FontSize = 18; lblHeaderSubtitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#00d4ff'); lblHeaderSubtitle.Margins.Top = 2; lblHeaderSubtitle.SetclProSettings(lblHeaderSubtitle.clProSettings); // --- Screen Switcher Pill --- screenSwitcherLayout = MyForm.AddNewLayout(mainLayout, 'screenSwitcherLayout'); screenSwitcherLayout.Align = alTop; screenSwitcherLayout.Height = 44; screenSwitcherLayout.Margins.Left = 10; screenSwitcherLayout.Margins.Right = 10; screenSwitcherLayout.Margins.Top = 8; btnMvtScreen = MyForm.AddNewProButton(screenSwitcherLayout, 'btnMvtScreen', 'Mouvements'); btnMvtScreen.Align = alLeft; btnMvtScreen.Width = 170; clComponent.SetupComponent(btnMvtScreen, '{"BackgroundColor":"#0d1520", "TextColor":"#e2eaf5", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#1a2d42", "BorderWidth":1}'); MyForm.AddNewEvent(btnMvtScreen, tbeOnClick, 'OnMvtScreenClick'); btnProdScreen = MyForm.AddNewProButton(screenSwitcherLayout, 'btnProdScreen', 'Production'); btnProdScreen.Align = alRight; btnProdScreen.Width = 170; clComponent.SetupComponent(btnProdScreen, '{"BackgroundColor":"#080d14", "TextColor":"#4a6580", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#1a2d42", "BorderWidth":1}'); MyForm.AddNewEvent(btnProdScreen, tbeOnClick, 'OnProdScreenClick'); // --- Mouvement Screen --- mvtScreenLayout = MyForm.AddNewLayout(mainLayout, 'mvtScreenLayout'); mvtScreenLayout.Align = alClient; mvtScrollBox = MyForm.AddNewVertScrollBox(mvtScreenLayout, 'mvtScrollBox'); mvtScrollBox.Align = alClient; mvtScrollBox.Margins.Top = 10; // Dynamically load Movements list mvtQuery.First; i = 0; while (not mvtQuery.Eof) { tempPanel = MyForm.AddNewProPanel(mvtScrollBox, 'mvtCard' + IntToStr(i)); tempPanel.Align = alTop; tempPanel.Height = 70; tempPanel.Margins.Left = 10; tempPanel.Margins.Right = 10; tempPanel.Margins.Bottom = 8; tempPanel.ClTagInt = i; clComponent.SetupComponent(tempPanel, '{"BackgroundColor":"#0d1520", "RoundHeight":12, "RoundWidth":12, "BorderColor":"#1a2d42", "BorderWidth":1}'); MyForm.AddNewEvent(tempPanel, tbeOnClick, 'OpenMvtDetail'); // Icon panel wrapper tempTypeIcon = MyForm.AddNewProPanel(tempPanel, 'mvtIcon' + IntToStr(i)); tempTypeIcon.Align = alLeft; tempTypeIcon.Width = 40; tempTypeIcon.Margins.Left = 10; tempTypeIcon.Margins.Top = 10; tempTypeIcon.Margins.Bottom = 10; if (mvtQuery.FieldByName('type').AsString == 'entrée') { clComponent.SetupComponent(tempTypeIcon, '{"BackgroundColor":"#22c55e18", "BorderColor":"#22c55e30", "BorderWidth":1, "RoundHeight":8, "RoundWidth":8}'); } else if (mvtQuery.FieldByName('type').AsString == 'sortie') { clComponent.SetupComponent(tempTypeIcon, '{"BackgroundColor":"#f9731618", "BorderColor":"#f9731630", "BorderWidth":1, "RoundHeight":8, "RoundWidth":8}'); } else { clComponent.SetupComponent(tempTypeIcon, '{"BackgroundColor":"#00d4ff14", "BorderColor":"#00d4ff30", "BorderWidth":1, "RoundHeight":8, "RoundWidth":8}'); } // Details block tempLayout = MyForm.AddNewLayout(tempPanel, 'mvtTextLayout' + IntToStr(i)); tempLayout.Align = alClient; tempLayout.Margins.Left = 12; tempLayout.Margins.Top = 12; tempLabel = MyForm.AddNewProLabel(tempLayout, 'mvtLblProd' + IntToStr(i), mvtQuery.FieldByName('product').AsString); tempLabel.Align = alTop; tempLabel.clProSettings.FontSize = 13; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5'); //tempLabel.TextSettings.StyledSettings = ssFamily; tempLabel2 = MyForm.AddNewProLabel(tempLayout, 'mvtLblSub' + IntToStr(i), mvtQuery.FieldByName('date').AsString + ' · ' + mvtQuery.FieldByName('time').AsString + ' · ' + mvtQuery.FieldByName('bloc').AsString); tempLabel2.Align = alTop; tempLabel2.clProSettings.FontSize = 10; tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //tempLabel2.TextSettings.StyledSettings = ssFamily; tempLabel2.Margins.Top = 3; // Qty block tempLayout = MyForm.AddNewLayout(tempPanel, 'mvtQtyLayout' + IntToStr(i)); tempLayout.Align = alRight; tempLayout.Width = 80; tempLayout.Margins.Right = 10; tempLayout.Margins.Top = 12; tempLabel = MyForm.AddNewProLabel(tempLayout, 'mvtLblQty' + IntToStr(i), mvtQuery.FieldByName('qty').AsString); tempLabel.Align = alTop; tempLabel.clProSettings.FontSize = 15; if (mvtQuery.FieldByName('qty').AsInteger > 0) { tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#4ade80'); } else { tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#fb923c'); } //tempLabel.TextSettings.StyledSettings = ssFamily; tempLabel2 = MyForm.AddNewProLabel(tempLayout, 'mvtLblUnit' + IntToStr(i), mvtQuery.FieldByName('unit').AsString); tempLabel2.Align = alTop; tempLabel2.clProSettings.FontSize = 9; tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //tempLabel2.TextSettings.StyledSettings = ssFamily; tempLabel2.Margins.Top = 2; i = i + 1; mvtQuery.Next; } // Administrator actions for Mouvements Screen mvtActionsPanel = MyForm.AddNewProPanel(mvtScrollBox, 'mvtActionsPanel'); mvtActionsPanel.Align = alTop; mvtActionsPanel.Height = 220; mvtActionsPanel.Margins.Top = 15; mvtActionsPanel.Margins.Left = 10; mvtActionsPanel.Margins.Right = 10; tempLabel = MyForm.AddNewProLabel(mvtActionsPanel, 'lblAdminTitle1', 'ACTIONS ADMINISTRATEUR'); tempLabel.Align = alTop; tempLabel.clProSettings.FontSize = 10; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //tempLabel.TextSettings.StyledSettings = ssFamily; tempLabel.Margins.Bottom = 8; btnScanQr = MyForm.AddNewProButton(mvtActionsPanel, 'btnScanQr', 'Scanner un QR code / lot'); btnScanQr.Align = alTop; btnScanQr.Height = 44; btnScanQr.Margins.Bottom = 8; clComponent.SetupComponent(btnScanQr, '{"BackgroundColor":"#00d4ff18", "TextColor":"#00d4ff", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#00d4ff30", "BorderWidth":1}'); MyForm.AddNewEvent(btnScanQr, tbeOnClick, 'RunScanner'); lblScanResult = MyForm.AddNewProLabel(mvtActionsPanel, 'lblScanResult', ''); lblScanResult.Visible = False; // --- Production Screen --- prodScreenLayout = MyForm.AddNewLayout(mainLayout, 'prodScreenLayout'); prodScreenLayout.Align = alClient; prodScreenLayout.Visible = False; // Hide initially prodScrollBox = MyForm.AddNewVertScrollBox(prodScreenLayout, 'prodScrollBox'); prodScrollBox.Align = alClient; prodScrollBox.Margins.Top = 10; // Header section for active Lots tempLabel = MyForm.AddNewProLabel(prodScrollBox, 'lblLotsHeader', 'Suivi de production'); tempLabel.Align = alTop; tempLabel.Margins.Left = 12; tempLabel.Margins.Bottom = 8; tempLabel.clProSettings.FontSize = 11; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //tempLabel.TextSettings.StyledSettings = ssFamily; // Dynamically load Lots list lotsQuery.First; i = 0; while (not lotsQuery.Eof) { tempPanel = MyForm.AddNewProPanel(prodScrollBox, 'lotCard' + IntToStr(i)); tempPanel.Align = alTop; tempPanel.Height = 85; tempPanel.Margins.Left = 10; tempPanel.Margins.Right = 10; tempPanel.Margins.Bottom = 8; tempPanel.ClTagInt = i; clComponent.SetupComponent(tempPanel, '{"BackgroundColor":"#0d1520", "RoundHeight":12, "RoundWidth":12, "BorderColor":"#1a2d42", "BorderWidth":1}'); MyForm.AddNewEvent(tempPanel, tbeOnClick, 'OpenLotDetail'); // Details block tempLayout = MyForm.AddNewLayout(tempPanel, 'lotTextLayout' + IntToStr(i)); tempLayout.Align = alClient; tempLayout.Margins.Left = 15; tempLayout.Margins.Top = 12; tempLabel = MyForm.AddNewProLabel(tempLayout, 'lotLblId' + IntToStr(i), lotsQuery.FieldByName('id').AsString); tempLabel.Align = alTop; tempLabel.clProSettings.FontSize = 13; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5'); //tempLabel.TextSettings.StyledSettings = ssFamily; tempLabel2 = MyForm.AddNewProLabel(tempLayout, 'lotLblProduct' + IntToStr(i), lotsQuery.FieldByName('product').AsString + ' · ' + lotsQuery.FieldByName('bloc').AsString); tempLabel2.Align = alTop; tempLabel2.clProSettings.FontSize = 10; tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //tempLabel2.TextSettings.StyledSettings = ssFamily; tempLabel2.Margins.Top = 3; // Progress Bar rendering in Clomosy tempProgressBg = MyForm.AddNewProPanel(tempLayout, 'lotProgressBg' + IntToStr(i)); tempProgressBg.Align = alTop; tempProgressBg.Height = 4; tempProgressBg.Margins.Top = 6; clComponent.SetupComponent(tempProgressBg, '{"BackgroundColor":"#1e3552", "RoundHeight":2, "RoundWidth":2}'); tempProgressFg = MyForm.AddNewProPanel(tempProgressBg, 'lotProgressFg' + IntToStr(i)); tempProgressFg.Align = alLeft; tempProgressFg.Width = Round(lotsQuery.FieldByName('progress').AsInteger * 1.5); // scaled width if (lotsQuery.FieldByName('status').AsString == 'production') { clComponent.SetupComponent(tempProgressFg, '{"BackgroundColor":"#60a5fa", "RoundHeight":2, "RoundWidth":2}'); } else if (lotsQuery.FieldByName('status').AsString == 'depot') { clComponent.SetupComponent(tempProgressFg, '{"BackgroundColor":"#4ade80", "RoundHeight":2, "RoundWidth":2}'); } else { clComponent.SetupComponent(tempProgressFg, '{"BackgroundColor":"#fbbf24", "RoundHeight":2, "RoundWidth":2}'); } // Qty block tempLayout = MyForm.AddNewLayout(tempPanel, 'lotQtyLayout' + IntToStr(i)); tempLayout.Align = alRight; tempLayout.Width = 80; tempLayout.Margins.Right = 10; tempLayout.Margins.Top = 12; tempLabel = MyForm.AddNewProLabel(tempLayout, 'lotLblQty' + IntToStr(i), lotsQuery.FieldByName('qty').AsString); tempLabel.Align = alTop; tempLabel.clProSettings.FontSize = 13; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5'); //tempLabel.TextSettings.StyledSettings = ssFamily; tempLabel2 = MyForm.AddNewProLabel(tempLayout, 'lotLblUnit' + IntToStr(i), lotsQuery.FieldByName('unit').AsString); tempLabel2.Align = alTop; tempLabel2.clProSettings.FontSize = 9; tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //tempLabel2.TextSettings.StyledSettings = ssFamily; tempLabel2.Margins.Top = 2; i = i + 1; lotsQuery.Next; } // Header section for Invoices tempLabel = MyForm.AddNewProLabel(prodScrollBox, 'lblInvoicesHeader', 'Factures'); tempLabel.Align = alTop; tempLabel.Margins.Left = 12; tempLabel.Margins.Top = 15; tempLabel.Margins.Bottom = 8; tempLabel.clProSettings.FontSize = 11; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //tempLabel.TextSettings.StyledSettings = ssFamily; // Dynamically load Invoices list invoicesQuery.First; i = 0; while (not invoicesQuery.Eof) { tempPanel = MyForm.AddNewProPanel(prodScrollBox, 'invCard' + IntToStr(i)); tempPanel.Align = alTop; tempPanel.Height = 70; tempPanel.Margins.Left = 10; tempPanel.Margins.Right = 10; tempPanel.Margins.Bottom = 8; tempPanel.ClTagInt = i; clComponent.SetupComponent(tempPanel, '{"BackgroundColor":"#0d1520", "RoundHeight":12, "RoundWidth":12, "BorderColor":"#1a2d42", "BorderWidth":1}'); MyForm.AddNewEvent(tempPanel, tbeOnClick, 'OpenInvoiceDetail'); // Details block tempLayout = MyForm.AddNewLayout(tempPanel, 'invTextLayout' + IntToStr(i)); tempLayout.Align = alClient; tempLayout.Margins.Left = 15; tempLayout.Margins.Top = 12; tempLabel = MyForm.AddNewProLabel(tempLayout, 'invLblId' + IntToStr(i), invoicesQuery.FieldByName('id').AsString + ' · ' + invoicesQuery.FieldByName('client').AsString); tempLabel.Align = alTop; tempLabel.clProSettings.FontSize = 12; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5'); //tempLabel.TextSettings.StyledSettings = ssFamily; tempLabel2 = MyForm.AddNewProLabel(tempLayout, 'invLblSub' + IntToStr(i), 'Émise le ' + invoicesQuery.FieldByName('date').AsString + ' · Échéance ' + invoicesQuery.FieldByName('due').AsString); tempLabel2.Align = alTop; tempLabel2.clProSettings.FontSize = 10; tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //tempLabel2.TextSettings.StyledSettings = ssFamily; tempLabel2.Margins.Top = 3; // Amount block tempLayout = MyForm.AddNewLayout(tempPanel, 'invAmountLayout' + IntToStr(i)); tempLayout.Align = alRight; tempLayout.Width = 100; tempLayout.Margins.Right = 10; tempLayout.Margins.Top = 12; tempLabel = MyForm.AddNewProLabel(tempLayout, 'invLblAmount' + IntToStr(i), invoicesQuery.FieldByName('amount').AsString + ' ' + invoicesQuery.FieldByName('currency').AsString); tempLabel.Align = alTop; tempLabel.clProSettings.FontSize = 13; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5'); //tempLabel.TextSettings.StyledSettings = ssFamily; tempLabel2 = MyForm.AddNewProLabel(tempLayout, 'invLblStatus' + IntToStr(i), invoicesQuery.FieldByName('status').AsString); tempLabel2.Align = alTop; tempLabel2.clProSettings.FontSize = 9; if (invoicesQuery.FieldByName('status').AsString == 'payée') { tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4ade80'); } else if (invoicesQuery.FieldByName('status').AsString == 'retard') { tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#fb923c'); } else { tempLabel2.clProSettings.FontColor = clAlphaColor.clHexToColor('#fbbf24'); } //tempLabel2.TextSettings.StyledSettings = ssFamily; tempLabel2.Margins.Top = 2; i = i + 1; invoicesQuery.Next; } // Administrator actions for Production Screen prodActionsPanel = MyForm.AddNewProPanel(prodScrollBox, 'prodActionsPanel'); prodActionsPanel.Align = alTop; prodActionsPanel.Height = 140; prodActionsPanel.Margins.Top = 15; prodActionsPanel.Margins.Left = 10; prodActionsPanel.Margins.Right = 10; tempLabel = MyForm.AddNewProLabel(prodActionsPanel, 'lblAdminTitle2', 'ACTIONS ADMINISTRATEUR'); tempLabel.Align = alTop; tempLabel.clProSettings.FontSize = 10; tempLabel.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //tempLabel.TextSettings.StyledSettings = ssFamily; tempLabel.Margins.Bottom = 8; btnScanQr = MyForm.AddNewProButton(prodActionsPanel, 'btnCreateLot', 'Créer un nouveau lot'); btnScanQr.Align = alTop; btnScanQr.Height = 44; btnScanQr.Margins.Bottom = 8; btnScanQr.Text = 'Créer un nouveau lot'; clComponent.SetupComponent(btnScanQr, '{"BackgroundColor":"#00d4ff18", "TextColor":"#00d4ff", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#00d4ff30", "BorderWidth":1}'); MyForm.AddNewEvent(btnScanQr, tbeOnClick, 'ActionClick'); // --- Bottom Tab Bar Panel --- tabBarPanel = MyForm.AddNewProPanel(MyForm, 'tabBarPanel'); tabBarPanel.Align = alBottom; tabBarPanel.Height = 60; clComponent.SetupComponent(tabBarPanel, '{"BackgroundColor":"#07101c", "BorderColor":"#1a2d42", "BorderWidth":1}'); btnTabMvt = MyForm.AddNewProButton(tabBarPanel, 'btnTabMvt', 'Stock'); btnTabMvt.Align = alLeft; btnTabMvt.Width = 75; btnTabMvt.Caption = 'Stock'; clComponent.SetupComponent(btnTabMvt, '{"BackgroundColor":"#07101c", "TextColor":"#00d4ff", "RoundHeight":0, "RoundWidth":0}'); MyForm.AddNewEvent(btnTabMvt, tbeOnClick, 'TabClick'); btnTabProd = MyForm.AddNewProButton(tabBarPanel, 'btnTabProd', 'Rapports'); btnTabProd.Align = alLeft; btnTabProd.Width = 75; btnTabProd.Caption = 'Rapports'; clComponent.SetupComponent(btnTabProd, '{"BackgroundColor":"#07101c", "TextColor":"#4a6580", "RoundHeight":0, "RoundWidth":0}'); MyForm.AddNewEvent(btnTabProd, tbeOnClick, 'TabClick'); // --- Detail Overlay Sheet (Modals) --- detailOverlay = MyForm.AddNewProPanel(MyForm, 'detailOverlay'); detailOverlay.Align = alClient; detailOverlay.Visible = False; clComponent.SetupComponent(detailOverlay, '{"BackgroundColor":"#040810d0"}'); // Dismiss overlay clicking the background MyForm.AddNewEvent(detailOverlay, tbeOnClick, 'CloseDetailOverlay'); detailSheet = MyForm.AddNewProPanel(detailOverlay, 'detailSheet'); detailSheet.Align = alBottom; detailSheet.Height = 280; clComponent.SetupComponent(detailSheet, '{"BackgroundColor":"#0c1828", "RoundHeight":20, "RoundWidth":20, "BorderColor":"#1a2d42", "BorderWidth":1}'); // Sheet Header lblDetailTitle = MyForm.AddNewProLabel(detailSheet, 'lblDetailTitle', 'MV-081'); lblDetailTitle.Align = alTop; lblDetailTitle.Margins.Left = 20; lblDetailTitle.Margins.Top = 20; lblDetailTitle.clProSettings.FontSize = 18; lblDetailTitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5'); //lblDetailTitle.TextSettings.StyledSettings = ssFamily; lblDetailSubtitle = MyForm.AddNewProLabel(detailSheet, 'lblDetailSubtitle', 'Produit A · Bloc A'); lblDetailSubtitle.Align = alTop; lblDetailSubtitle.Margins.Left = 20; lblDetailSubtitle.Margins.Top = 4; lblDetailSubtitle.clProSettings.FontSize = 12; lblDetailSubtitle.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //lblDetailSubtitle.TextSettings.StyledSettings = ssFamily; // Close Button btnCloseDetail = MyForm.AddNewProButton(detailSheet, 'btnCloseDetail', 'X'); btnCloseDetail.Align = alNone; btnCloseDetail.Width = 30; btnCloseDetail.Height = 30; btnCloseDetail.Position.X = 320; btnCloseDetail.Position.Y = 16; clComponent.SetupComponent(btnCloseDetail, '{"BackgroundColor":"#0d1520", "TextColor":"#4a6580", "RoundHeight":6, "RoundWidth":6, "BorderColor":"#1a2d42", "BorderWidth":1}'); MyForm.AddNewEvent(btnCloseDetail, tbeOnClick, 'CloseDetailOverlay'); // Details Grid Layout pnlDetailGrid = MyForm.AddNewProPanel(detailSheet, 'pnlDetailGrid'); pnlDetailGrid.Align = alTop; pnlDetailGrid.Height = 110; pnlDetailGrid.Margins.Top = 15; pnlDetailGrid.Margins.Left = 20; pnlDetailGrid.Margins.Right = 20; clComponent.SetupComponent(pnlDetailGrid, '{"BackgroundColor":"#0c1828"}'); // Col 1 Row 1 lblGridVal1 = MyForm.AddNewProLabel(pnlDetailGrid, 'lblGridVal1', '50 kg'); lblGridVal1.Align = alNone; lblGridVal1.Position.X = 10; lblGridVal1.Position.Y = 10; lblGridVal1.clProSettings.FontSize = 13; lblGridVal1.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5'); //lblGridVal1.TextSettings.StyledSettings = ssFamily; lblGridLbl1 = MyForm.AddNewProLabel(pnlDetailGrid, 'lblGridLbl1', 'QUANTITÉ'); lblGridLbl1.Align = alNone; lblGridLbl1.Position.X = 10; lblGridLbl1.Position.Y = 28; lblGridLbl1.clProSettings.FontSize = 9; lblGridLbl1.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //lblGridLbl1.TextSettings.StyledSettings = ssFamily; // Col 2 Row 1 lblGridVal2 = MyForm.AddNewProLabel(pnlDetailGrid, 'lblGridVal2', 'LOT001'); lblGridVal2.Align = alNone; lblGridVal2.Position.X = 170; lblGridVal2.Position.Y = 10; lblGridVal2.clProSettings.FontSize = 13; lblGridVal2.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5'); //lblGridVal2.TextSettings.StyledSettings = ssFamily; lblGridLbl2 = MyForm.AddNewProLabel(pnlDetailGrid, 'lblGridLbl2', 'LOT'); lblGridLbl2.Align = alNone; lblGridLbl2.Position.X = 170; lblGridLbl2.Position.Y = 28; lblGridLbl2.clProSettings.FontSize = 9; lblGridLbl2.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); ///lblGridLbl2.TextSettings.StyledSettings = ssFamily; // Col 1 Row 2 lblGridVal3 = MyForm.AddNewProLabel(pnlDetailGrid, 'lblGridVal3', '12/07 14:32'); lblGridVal3.Align = alNone; lblGridVal3.Position.X = 10; lblGridVal3.Position.Y = 60; lblGridVal3.clProSettings.FontSize = 13; lblGridVal3.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5'); //lblGridVal3.TextSettings.StyledSettings = ssFamily; lblGridLbl3 = MyForm.AddNewProLabel(pnlDetailGrid, 'lblGridLbl3', 'DATE / HEURE'); lblGridLbl3.Align = alNone; lblGridLbl3.Position.X = 10; lblGridLbl3.Position.Y = 78; lblGridLbl3.clProSettings.FontSize = 9; lblGridLbl3.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //lblGridLbl3.TextSettings.StyledSettings = ssFamily; // Col 2 Row 2 lblGridVal4 = MyForm.AddNewProLabel(pnlDetailGrid, 'lblGridVal4', 'Y. Kaya'); lblGridVal4.Align = alNone; lblGridVal4.Position.X = 170; lblGridVal4.Position.Y = 60; lblGridVal4.clProSettings.FontSize = 13; lblGridVal4.clProSettings.FontColor = clAlphaColor.clHexToColor('#e2eaf5'); //lblGridVal4.TextSettings.StyledSettings = ssFamily; lblGridLbl4 = MyForm.AddNewProLabel(pnlDetailGrid, 'lblGridLbl4', 'OPÉRATEUR'); lblGridLbl4.Align = alNone; lblGridLbl4.Position.X = 170; lblGridLbl4.Position.Y = 78; lblGridLbl4.clProSettings.FontSize = 9; lblGridLbl4.clProSettings.FontColor = clAlphaColor.clHexToColor('#4a6580'); //lblGridLbl4.TextSettings.StyledSettings = ssFamily; // Detail Actions btnDetailAction1 = MyForm.AddNewProButton(detailSheet, 'btnDetailAction1', 'Voir le QR'); btnDetailAction1.Align = alNone; btnDetailAction1.Width = 160; btnDetailAction1.Height = 44; btnDetailAction1.Position.X = 20; btnDetailAction1.Position.Y = 195; clComponent.SetupComponent(btnDetailAction1, '{"BackgroundColor":"#00d4ff18", "TextColor":"#00d4ff", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#00d4ff30", "BorderWidth":1}'); MyForm.AddNewEvent(btnDetailAction1, tbeOnClick, 'ActionClick'); btnDetailAction2 = MyForm.AddNewProButton(detailSheet, 'btnDetailAction2', 'Annuler'); btnDetailAction2.Align = alNone; btnDetailAction2.Width = 160; btnDetailAction2.Height = 44; btnDetailAction2.Position.X = 195; btnDetailAction2.Position.Y = 195; clComponent.SetupComponent(btnDetailAction2, '{"BackgroundColor":"#f9731618", "TextColor":"#fb923c", "RoundHeight":10, "RoundWidth":10, "BorderColor":"#f9731630", "BorderWidth":1}'); MyForm.AddNewEvent(btnDetailAction2, tbeOnClick, 'ActionClick'); ShowMvtScreen; MyForm.Run; } https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon="{"version":"2024.11.0","token":"439455f3e46c40b98dbd42a2f1a954d8","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}" crossorigin="anonymous">
|
|
![]() |
|
Yanıt Yaz
|
|
| Tweet |
| Forum Atla | Forum İzinleri ![]() Kapalı Foruma Yeni Konu Gönderme Kapalı Forumdaki Konulara Cevap Yazma Kapalı Forumda Cevapları Silme Kapalı Forumdaki Cevapları Düzenleme Kapalı Forumda Anket Açma Kapalı Forumda Anketlerde Oy Kullanma |