![]() |
| 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. |
Unitler arasında data library oluşturulması |
Yanıt Yaz
|
| Yazar | |
M-Guney
Kıdemli Üye
Kayıt Tarihi: 16 Eylül 2025 Konum: Konya, Meram, K Durum: Aktif Değil Puanlar: 131 |
Mesaj Seçenekleri
Teşekkürler(0)
Alıntı Cevapla
Konu: Unitler arasında data library oluşturulmasıGönderim Zamanı: 8 Saat 4 Dakika Önce Saat 11:35 |
|
uDataLib diye kendime veri akışında kullanmak üzere bir unit oluşturdum ve ben bu unit içerisinde json object tutup diğer unitlerden o objeye erişmek istiyorum.
Örnek olarak ürünler ve kategoriler diye iki farklı unitim var ve kullanıcı iki farklı kategoriden ya da aynı kategoriye gir çık yaptığında o siparişler listesini tutmak istiyorum. //uDataLib var // Global Sipariş Sepeti Objesi CurrentOrderList: TCLJSONObject; CurrentOrderListArr: TCLJSONArray; // ====================================================================== // GÜVENLİ ERİŞİM FONKSİYONLARI (Getter Pattern) // ====================================================================== function GetCurrentOrderListArr: TCLJSONArray; { if (CurrentOrderList == nil) { CurrentOrderList = TCLJSONObject.Create; CurrentOrderList.AddArray('items', GetCurrentOrderListArr); } if (CurrentOrderListArr == nil) { CurrentOrderListArr = TCLJSONArray.Create; } Result = CurrentOrderListArr; } function GetCurrentOrderList: TCLJSONObject; { if (CurrentOrderList == nil) { CurrentOrderList = TCLJSONObject.Create; CurrentOrderList.AddArray('items', GetCurrentOrderListArr); } Result = CurrentOrderList; } void FreeOrderContainers { if (CurrentOrderList <> nil) { CurrentOrderList.Free; } // Pointerları tamamen sıfırla CurrentOrderList = nil; CurrentOrderListArr = nil; } // ====================================================================== // DİĞER FONKSİYONLAR // ====================================================================== function IsCurrentOrderListNil: Boolean; { Result = CurrentOrderList <> nil; } function CurrentOrderListArrAmount: Integer; { Result = 0; if (CurrentOrderListArr <> nil) { Result = CurrentOrderListArr.Count; } }
//uItemsPage // uDataLib'i eklemeyi unutmayın uses uDataLib, uAddItems, uEditItems, uHomePage, uWaiterAndChefDetails; var MainForm:TclForm; TitlePnl,NavbarPnl,AdminOpacityPnl,AdminItemsPopUp:TclProPanel; TitleLbl,ItemNameLbl,ItemPriceLbl,ItemPieceLbl,ItemPieceValueLbl,OrderChecklistLbl,PieceLbl:TClProLabel; HomeBtn,BackBtn,AdminManagementBtn,ItemsCloseBtn,EditItemsBtn,AddItemsBtn,OrderChecklistBtn,ShowStockBtn,IncreaseBtn,DecreaseBtn:TClProButton; ItemsCount:Integer; ItemImage:TClImage; role:String; StokStatus,StockVisibility:Boolean; vScroll : TCLVertScrollBox; CategoryId : Integer; CurrentCategoryName : String; TableId, TableName : String; void SetObjectMargins(AObject,AValue) { AObject.Margins.Top = AValue; AObject.Margins.Bottom = AValue; AObject.Margins.Left = AValue; AObject.Margins.Right = AValue; } void TitlePnlV { TitlePnl = MainForm.AddNewProPanel(MainForm,'TitlePnl'); TitlePnl.Align = alMostTop; TitlePnl.Height = (MainForm.clHeight*18)/100; TitlePnl.Width = (MainForm.clWidth*100)/100; TitlePnl.Margins.Top = (MainForm.clHeight * -0.0715); TitlePnl.Margins.Left = (MainForm.clWidth * -0.0254); TitlePnl.Margins.Right = (MainForm.clWidth * -0.0254); TitlePnl.clProSettings.BorderWidth = 3; TitlePnl.clProSettings.BorderColor = clAlphaColor.clHexToColor('#3a3a3a'); TitlePnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#4caf50'); TitlePnl.SetclProSettings(TitlePnl.clProSettings); TitleLbl = MainForm.AddNewProLabel(TitlePnl,'TitleLbl',''); TitleLbl.Text = CurrentCategoryName; TitleLbl.Align = alCenter; TitleLbl.Width = (MainForm.clWidth * 0.6107); TitleLbl.Height = (MainForm.clHeight * 0.1073); TitleLbl.Margins.Top = (MainForm.clHeight * 0.0715); TitleLbl.clProSettings.FontSize = 35; TitleLbl.clProSettings.FontVertAlign = palcenter; TitleLbl.clProSettings.FontHorzAlign = palcenter; TitleLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#ffffff'); TitleLbl.clProSettings.TextSettings.Font.Style = [fsBold]; TitleLbl.SetclProSettings(TitleLbl.clProSettings); AdminManagementBtn = MainForm.AddNewProButton(TitlePnl,'AdminManagementBtn',''); AdminManagementBtn.Align = alCenter; AdminManagementBtn.Width = (MainForm.clWidth * 0.2036); AdminManagementBtn.Height = (MainForm.clHeight * 0.0953); AdminManagementBtn.margins.Bottom = (MainForm.clHeight * 0.0358); AdminManagementBtn.margins.Left = (MainForm.clWidth * 0.9924); AdminManagementBtn.clProSettings.TextSettings.Font.Style = [fsBold]; AdminManagementBtn.Visible=False; AdminManagementBtn.clProSettings.PictureSource = 'https://resmim.net/cdn/2025/11/10/jaGer6.png'; MainForm.AddNewEvent(AdminManagementBtn,tbeOnClick,'OpenAdminItemsPopUpV'); AdminManagementBtn.SetclProSettings(AdminManagementBtn.clProSettings); ShowStockBtn = MainForm.AddNewProButton(TitlePnl,'ShowStockBtn',''); ShowStockBtn.Align = alCenter; ShowStockBtn.Width = (MainForm.clWidth * 0.2036); ShowStockBtn.Height = (MainForm.clHeight * 0.0953); ShowStockBtn.margins.Bottom = (MainForm.clHeight * 0.0358); ShowStockBtn.margins.Right = (MainForm.clWidth * 0.9669); ShowStockBtn.clProSettings.TextSettings.Font.Style = [fsBold]; ShowStockBtn.clProSettings.PictureSource = 'https://resmim.net/cdn/2025/11/12/jpbk0o.png'; MainForm.AddNewEvent(ShowStockBtn,tbeOnClick,'ChangeImage'); ShowStockBtn.SetclProSettings(ShowStockBtn.clProSettings); } void BtnGoBackClick; { MainForm.Close; } void BtnHomeClick; { Clomosy.RunUnit('uHomePage'); } // Helper Setters void SetTableV(FTableName : String) { TableName = FTableName; } void SetTableIdV(FTableId : String) { TableId = FTableId; } void SetTitleLblV(FCategoryName : String) { CurrentCategoryName = FCategoryName; } void SetCategoryIDV(FCategoryId : String) { CategoryId = StrToIntDef(FCategoryId, 0); } void NavbarPnlV { NavbarPnl = MainForm.AddNewProPanel(MainForm,'NavbarPnl'); NavbarPnl.Align = alMostBottom; NavbarPnl.Height = (MainForm.clHeight*8)/100; NavbarPnl.Width = (MainForm.clWidth*100)/100; NavbarPnl.Margins.Left = (MainForm.clWidth * -0.0254); NavbarPnl.Margins.Right = (MainForm.clWidth * -0.0254); NavbarPnl.Margins.Bottom = (MainForm.clHeight * -0.0119); NavbarPnl.clProSettings.BorderWidth = 3; NavbarPnl.clProSettings.BorderColor = clAlphaColor.clHexToColor('#3a3a3a'); NavbarPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#4caf50'); NavbarPnl.SetclProSettings(NavbarPnl.clProSettings); HomeBtn = MainForm.AddNewProButton(NavbarPnl,'HomeBtn',''); HomeBtn.Align = alCenter; HomeBtn.Height = (NavbarPnl.Height*105)/100; HomeBtn.Width = (NavbarPnl.Width*30)/100; HomeBtn.Margins.Top = (MainForm.clHeight * -0.0596); HomeBtn.clProSettings.PictureSource = uHomePage.IconSelect('HomePageBtnUI'); HomeBtn.SetclProSettings(HomeBtn.clProSettings); MainForm.AddNewEvent(HomeBtn,tbeOnClick,'BtnHomeClick'); BackBtn = MainForm.AddNewProButton(NavbarPnl,'BackBtn',''); BackBtn.Align = alCenter; BackBtn.Height = (NavbarPnl.Height*105)/100; BackBtn.Width = (NavbarPnl.Width*30)/100; BackBtn.Margins.Top = (MainForm.clHeight * -0.0596); BackBtn.Margins.Right = (MainForm.clWidth * -0.6361); BackBtn.clProSettings.PictureSource = uHomePage.IconSelect('BackArrowBtnUI'); BackBtn.SetclProSettings(BackBtn.clProSettings); MainForm.AddNewEvent(BackBtn,tbeOnClick,'BtnGoBackClick'); OrderChecklistBtn = MainForm.AddNewProButton(NavbarPnl,'OrderChecklistBtn',''); OrderChecklistBtn.Align = alCenter; OrderChecklistBtn.Height = (NavbarPnl.Height*105)/100; OrderChecklistBtn.Width = (NavbarPnl.Width*30)/100; OrderChecklistBtn.Margins.Top = (MainForm.clHeight * -0.0596); OrderChecklistBtn.Margins.Left = (MainForm.clWidth * -0.6361); OrderChecklistBtn.clProSettings.PictureSource = uHomePage.IconSelect('OrderChecklistBtnUI'); OrderChecklistBtn.SetclProSettings(OrderChecklistBtn.clProSettings); MainForm.AddNewEvent(OrderChecklistBtn,tbeOnClick,'goToOrderList'); OrderChecklistLbl = MainForm.AddNewProLabel(OrderChecklistBtn,'OrderChecklistLbl','0'); OrderChecklistLbl.Align = alCenter; OrderChecklistLbl.Height = (MainForm.clHeight * 0.0238); OrderChecklistLbl.Width = (MainForm.clWidth * 0.0509); OrderChecklistLbl.clProSettings.FontSize = 12; OrderChecklistLbl.Margins.Left = (MainForm.clWidth * 0.0636); OrderChecklistLbl.Margins.Bottom = (MainForm.clHeight * 0.0298); OrderChecklistLbl.clProSettings.FontVertAlign = palcenter; OrderChecklistLbl.clProSettings.FontHorzAlign = palcenter; OrderChecklistLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#ffffff'); OrderChecklistLbl.clProSettings.TextSettings.Font.Style = [fsBold]; OrderChecklistLbl.SetclProSettings(OrderChecklistLbl.clProSettings); } void MainPnlV { vScroll = MainForm.AddNewVertScrollBox(MainForm,'vScroll'); vScroll.Align = alCenter; vScroll.Height = (MainForm.clHeight*80)/100; vScroll.Width = (MainForm.clWidth*95)/100; vScroll.Margins.Bottom = (MainForm.clHeight * 0.0715); } function GetItemImage(FId: String): TclMemoryStream var LRest: TCLRest; { LRest = uDataLib.GetImageWithRes('items/' + FId + '/image'); LRest.Execute; if ( LRest.StreamResponse.size < 100){ Result = nil; }else Result = LRest.StreamResponse; } void FillItemsPnlV(FQry: TCLJSONQuery) var I: Integer; TempItemNameLbl, TempItemPriceLbl, TempItemPieceValueLbl: TclProLabel; TempItemImage: TClImage; LMemStream: TCLMemoryStream; { I = 1; try LMemStream = TCLMemoryStream.Create; with FQry do { if (Found) { First; while (not EOF) { try TempItemNameLbl = MainForm.clFindComponent('ItemNameLbl' + IntToStr(I)); TempItemPriceLbl = MainForm.clFindComponent('ItemPriceLbl' + IntToStr(I)); TempItemPieceValueLbl = MainForm.clFindComponent('ItemPieceValueLbl' + IntToStr(I)); TempItemImage = MainForm.clFindComponent('ItemImage' + IntToStr(I)); if (TempItemNameLbl <> nil){ TempItemNameLbl.Text = FieldByName('name').AsString; TempItemNameLbl.Cltagint = FieldByName('id').AsInteger; } if (TempItemPriceLbl <> nil) TempItemPriceLbl.Text = FieldByName('price').AsString + ' TL'; if (TempItemPieceValueLbl <> nil) TempItemPieceValueLbl.Text = FieldByName('stock').AsString; if (TempItemImage <> nil) { LMemStream = GetItemImage(FieldByName('id').AsString); if (LMemStream <> nil) { TempItemImage.Bitmap.LoadFromStream(LMemStream); LMemStream.Free; } else{ MainForm.setImage(TempItemImage,'https://clomosy.com/learn/clomosy.png'); LMemStream.Free; } } Next; Inc(I); except ShowMessage('FillItems Satır Hatası ' + IntToStr(I) + ': ' + LastExceptionMessage); Next; Inc(I); } } } } except ShowMessage('FillItemsPnlV Genel Hatası: ' + LastExceptionMessage); } } void ItemsPnlV var I:integer; { for (I = 1 to ItemsCount) { ItemsPnl = MainForm.addnewpropanel(vScroll,'ItemsPnl'+IntToStr(I)); ItemsPnl.Align = alTop; ItemsPnl.Height = (MainForm.clHeight * 0.0930); SetObjectMargins(ItemsPnl,7); ItemsPnl.Margins.Left = (MainForm.clWidth * 0.0382); ItemsPnl.Margins.Right = (MainForm.clWidth * 0.0382); ItemsPnl.clProSettings.BorderWidth = 2; ItemsPnl.clProSettings.RoundHeight=3.5; ItemsPnl.clProSettings.RoundWidth=3.5; ItemsPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#1e1e1e'); ItemsPnl.clProSettings.BorderColor = clAlphaColor.clHexToColor('#3a3a3a'); ItemsPnl.SetclProSettings(ItemsPnl.clProSettings); ItemImage = MainForm.AddNewImage(ItemsPnl,'ItemImage'+IntToStr(I)); ItemImage.Align = alCenter; ItemImage.Height = (MainForm.clHeight * 0.0775); ItemImage.Width = (MainForm.clWidth * 0.1654); ItemImage.Margins.Right = (MainForm.clWidth * 0.6743); MainForm.setImage(ItemImage,'https://clomosy.com/learn/clomosy.png'); ItemNameLbl = MainForm.AddNewProLabel(ItemsPnl,'ItemNameLbl'+IntToStr(I),'...'); ItemNameLbl.Align = alCenter; ItemNameLbl.Width = (MainForm.clWidth * 0.3817); ItemNameLbl.Height = (MainForm.clHeight * 0.0358); ItemNameLbl.Margins.Bottom = (MainForm.clHeight * 0.0417); ItemNameLbl.Margins.Right = (MainForm.clWidth * 0.0382); ItemNameLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#ffffff'); ItemNameLbl.clProSettings.FontSize = 14; ItemNameLbl.clProSettings.FontVertAlign = palcenter; ItemNameLbl.clProSettings.FontHorzAlign = palleading; ItemNameLbl.clProSettings.TextSettings.Font.Style = [fsBold]; ItemNameLbl.SetclProSettings(ItemNameLbl.clProSettings); ItemPriceLbl = MainForm.AddNewProLabel(ItemsPnl,'ItemPriceLbl'+IntToStr(I),'...'); ItemPriceLbl.Align = alCenter; ItemPriceLbl.Width = (MainForm.clWidth * 0.3053); ItemPriceLbl.Height = (MainForm.clHeight * 0.0358); ItemPriceLbl.Margins.Top = (MainForm.clHeight * 0.0417); ItemPriceLbl.Margins.Right = (MainForm.clWidth * 0.1145); ItemPriceLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#ffffff'); ItemPriceLbl.clProSettings.FontSize = 14; ItemPriceLbl.clProSettings.FontVertAlign = palcenter; ItemPriceLbl.clProSettings.FontHorzAlign = palleading; ItemPriceLbl.clProSettings.TextSettings.Font.Style = [fsBold]; ItemPriceLbl.SetclProSettings(ItemPriceLbl.clProSettings); ItemPriceLbl.Cltagstr= 'ItemPriceLbl'+IntToStr(I); ItemPieceLbl = MainForm.AddNewProLabel(ItemsPnl,'ItemPieceLbl'+IntToStr(I),'ADET:'); ItemPieceLbl.Align = alCenter; ItemPieceLbl.Width = (MainForm.clWidth * 0.1018); ItemPieceLbl.Height = (MainForm.clHeight * 0.0358); ItemPieceLbl.Margins.Top = (MainForm.clHeight * 0.0536); ItemPieceLbl.Margins.Left = (MainForm.clWidth * 0.3944); ItemPieceLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#ffffff'); ItemPieceLbl.clProSettings.FontSize = 14; ItemPieceLbl.Visible=True; ItemPieceLbl.clProSettings.FontVertAlign = palcenter; ItemPieceLbl.clProSettings.FontHorzAlign = palleading; ItemPieceLbl.clProSettings.TextSettings.Font.Style = [fsBold]; ItemPieceLbl.SetclProSettings(ItemPieceLbl.clProSettings); ItemPieceLbl.Cltagstr= 'ItemPieceLbl'+IntToStr(I); ItemPieceValueLbl = MainForm.AddNewProLabel(ItemsPnl,'ItemPieceValueLbl'+IntToStr(I),'0'); ItemPieceValueLbl.Align = alCenter; ItemPieceValueLbl.Width = (MainForm.clWidth * 0.2036); ItemPieceValueLbl.Height = (MainForm.clHeight * 0.0358); ItemPieceValueLbl.Margins.Top = (MainForm.clHeight * 0.0536); ItemPieceValueLbl.Margins.Left = (MainForm.clWidth * 0.7125); ItemPieceValueLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#ffffff'); ItemPieceValueLbl.clProSettings.FontSize = 14; ItemPieceValueLbl.Visible=True; ItemPieceValueLbl.clProSettings.FontVertAlign = palcenter; ItemPieceValueLbl.clProSettings.FontHorzAlign = palleading; ItemPieceValueLbl.clProSettings.TextSettings.Font.Style = [fsBold]; ItemPieceValueLbl.SetclProSettings(ItemPieceValueLbl.clProSettings); ItemPieceValueLbl.Cltagstr= 'ItemPieceValueLbl'+IntToStr(I); IncreaseBtn = MainForm.AddNewProButton(ItemsPnl,'IncreaseBtn'+IntToStr(I),'+'); IncreaseBtn.Align=alCenter; IncreaseBtn.Width = (MainForm.clWidth * 0.1272); IncreaseBtn.Height = (MainForm.clHeight * 0.0596); IncreaseBtn.Margins.Bottom = (MainForm.clHeight * 0.0238); IncreaseBtn.Margins.Left = (MainForm.clWidth * 0.7125); IncreaseBtn.Visible = False; IncreaseBtn.clProSettings.BorderWidth = 2; IncreaseBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#1e1e1e'); IncreaseBtn.clProSettings.BorderColor = clAlphaColor.clHexToColor('#3a3a3a'); IncreaseBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#ffffff'); IncreaseBtn.clProSettings.FontSize = 20; MainForm.AddNewEvent(IncreaseBtn,tbeOnClick,'ItemIncreaseV'); IncreaseBtn.SetclProSettings(IncreaseBtn.clProSettings); IncreaseBtn.Cltagstr= 'PieceLbl'+IntToStr(I); DecreaseBtn = MainForm.AddNewProButton(ItemsPnl,'DecreaseBtn'+IntToStr(I),'-'); DecreaseBtn.Align=alCenter; DecreaseBtn.Width = (MainForm.clWidth * 0.1272); DecreaseBtn.Height = (MainForm.clHeight * 0.0596); DecreaseBtn.Margins.Bottom = (MainForm.clHeight * 0.0238); DecreaseBtn.Margins.Left = (MainForm.clWidth * 0.4453); DecreaseBtn.Visible = False; DecreaseBtn.clProSettings.BorderWidth = 2; DecreaseBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#1e1e1e'); DecreaseBtn.clProSettings.BorderColor = clAlphaColor.clHexToColor('#3a3a3a'); DecreaseBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#ffffff'); DecreaseBtn.clProSettings.FontSize = 20; DecreaseBtn.SetclProSettings(DecreaseBtn.clProSettings); MainForm.AddNewEvent(DecreaseBtn,tbeOnClick,'ItemDecreaseV'); DecreaseBtn.Cltagstr= 'PieceLbl'+IntToStr(I); PieceLbl = MainForm.AddNewProLabel(ItemsPnl,'PieceLbl'+IntToStr(I),'x0'); PieceLbl.Align=alCenter; PieceLbl.Width = (MainForm.clWidth * 0.1018); PieceLbl.Height = (MainForm.clHeight * 0.0477); PieceLbl.Margins.Left = (MainForm.clWidth * 0.6361); PieceLbl.Margins.top = (MainForm.clHeight * 0.0596); PieceLbl.Visible= False; PieceLbl.clProSettings.FontSize = 16; PieceLbl.clProSettings.FontVertAlign = palcenter; PieceLbl.clProSettings.FontHorzAlign = palLeading; PieceLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#ffffff'); PieceLbl.clProSettings.TextSettings.Font.Style = [fsBold]; PieceLbl.SetclProSettings(PieceLbl.clProSettings); PieceLbl.Cltagstr= 'PieceLbl'+IntToStr(I); } } void AdminItemsPopUpV { AdminOpacityPnl= MainForm.AddNewProPanel(MainForm,'AdminOpacityPnl'); AdminOpacityPnl.Align=alCenter; AdminOpacityPnl.Width= (MainForm.clWidth); AdminOpacityPnl.Height = (MainForm.clHeight*1.2); AdminOpacityPnl.Visible=False; AdminOpacityPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#000000'); AdminOpacityPnl.opacity=0.6; AdminOpacityPnl.SetclProSettings(AdminOpacityPnl.clProSettings); AdminItemsPopUp= MainForm.AddNewProPanel(MainForm,'AdminItemsPopUp'); AdminItemsPopUp.Align=alCenter; AdminItemsPopUp.Width = (MainForm.clWidth * 0.8957); AdminItemsPopUp.Height = (MainForm.clHeight * 0.4195); AdminItemsPopUp.margins.bottom = (MainForm.clHeight * 0.0596); AdminItemsPopUp.Visible=False; AdminItemsPopUp.clProSettings.BorderColor = clAlphaColor.clHexToColor('#3a3a3a'); AdminItemsPopUp.clProSettings.BorderWidth = 2; AdminItemsPopUp.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#2a2a2a'); AdminItemsPopUp.SetclProSettings(AdminItemsPopUp.clProSettings); ItemsCloseBtn = MainForm.AddNewProButton(AdminItemsPopUp,'ItemsCloseBtn',''); ItemsCloseBtn.Align = alMostTop; ItemsCloseBtn.Width = (MainForm.clWidth * 0.1018); ItemsCloseBtn.Height = (MainForm.clHeight * 0.0477); ItemsCloseBtn.margins.top = (MainForm.clHeight * 0.0119); ItemsCloseBtn.margins.right = (MainForm.clWidth * -0.7506); ItemsCloseBtn.clProSettings.TextSettings.Font.Style = [fsBold]; ItemsCloseBtn.clProSettings.PictureSource = 'https://resmim.net/cdn/2025/11/04/jno9tH.png'; MainForm.AddNewEvent(ItemsCloseBtn,tbeOnClick,'CloseAdminItemsPopUpV'); ItemsCloseBtn.SetclProSettings(ItemsCloseBtn.clProSettings); AddItemsBtn = MainForm.AddNewProButton(AdminItemsPopUp,'AddItemsBtn','ÜRÜN EKLEME'); AddItemsBtn.Align=alTop; AddItemsBtn.Height = (MainForm.clHeight * 0.1073); AddItemsBtn.Width = (MainForm.clWidth * 0.8651); SetObjectMargins(AddItemsBtn,15); AddItemsBtn.margins.top = (MainForm.clHeight * 0.0358); AddItemsBtn.clProSettings.TextSettings.Font.Style = [fsBold]; AddItemsBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#4caf50'); AddItemsBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#ffffff'); AddItemsBtn.clProSettings.FontSize = 25; AddItemsBtn.clProSettings.RoundHeight=5; AddItemsBtn.clProSettings.RoundWidth=5; AddItemsBtn.clProSettings.WordWrap=true; MainForm.AddNewEvent(AddItemsBtn,tbeOnClick,'gotouAddItems'); AddItemsBtn.SetclProSettings(AddItemsBtn.clProSettings); EditItemsBtn = MainForm.AddNewProButton(AdminItemsPopUp,'EditItemsBtn','ÜRÜN DÜZENLEME'); EditItemsBtn.Align=alTop; EditItemsBtn.Height = (MainForm.clHeight * 0.1073); EditItemsBtn.Width = (MainForm.clWidth * 0.8651); SetObjectMargins(EditItemsBtn,15); EditItemsBtn.clProSettings.TextSettings.Font.Style = [fsBold]; EditItemsBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#4caf50'); EditItemsBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#ffffff'); EditItemsBtn.clProSettings.FontSize = 25; EditItemsBtn.clProSettings.RoundHeight=5; EditItemsBtn.clProSettings.RoundWidth=5; MainForm.AddNewEvent(EditItemsBtn,tbeOnClick,'gotouEditItems'); EditItemsBtn.SetclProSettings(EditItemsBtn.clProSettings); } void ChangeItemAmountV(APieces : Integer) var TempPieceLbl : TclProLabel; LPieceStr, LComponentName : String; LPieceInt : Integer; { LComponentName = TclProButton(MainForm.Clsender).clTagStr; TempPieceLbl = MainForm.clFindComponent(LComponentName) as TclProLabel; if (TempPieceLbl <> nil) { LPieceStr = TempPieceLbl.Text; Delete(LPieceStr,1,1); //Delete x letter from piecesLbl LPieceInt = StrToInt(LPieceStr); if((APieces == -1)&&(LPieceInt>0)) Dec(LPieceInt); else if(APieces == 1) Inc(LPieceInt); LPieceStr = IntToStr(LPieceInt); Insert('x', LPieceStr,0);// Add x TempPieceLbl.Text = LPieceStr; } else ShowMessage(LComponentName +'is null'); } void ItemDecreaseV var J: integer; TempPieceLbl: TclProLabel; PieceValue, Total: integer; { ChangeItemAmountV(-1); Total = 0; for (J = 1 to ItemsCount) { TempPieceLbl = MainForm.clFindComponent('PieceLbl' + IntToStr(J)); if (TempPieceLbl <> nil) { PieceValue = StrToInt(Copy(TempPieceLbl.Text, 2, Length(TempPieceLbl.Text) - 1)); Total = Total + PieceValue; } } OrderChecklistLbl.Text = IntToStr(Total); } void ItemIncreaseV var J: integer; TempPieceLbl: TclProLabel; PieceValue, Total: integer; { ChangeItemAmountV(1); Total = 0; for (J = 1 to ItemsCount) { TempPieceLbl = MainForm.clFindComponent('PieceLbl' + IntToStr(J)); if (TempPieceLbl <> nil) { PieceValue = StrToInt(Copy(TempPieceLbl.Text, 2, Length(TempPieceLbl.Text) - 1)); Total = Total + PieceValue; } } OrderChecklistLbl.Text = IntToStr(Total); } void addToOrderlistArr var Item: TCLJSONObject; TempItemNameLbl, TempItemPriceLbl, TempItemPieceLbl: TclProLabel; I, UnitPrice: Integer; LItemPriceStr, LPieceStr : String; OrderListRef: TCLJSONObject; OrderListArrRef: TCLJSONArray; { try // Eski verileri temizle uDataLib.FreeOrderContainers; // Güvenli referansları al OrderListRef = uDataLib.GetCurrentOrderList; OrderListArrRef = uDataLib.GetCurrentOrderListArr; OrderListRef.AddPair('table_id', TCLJSONValue.Str(TableId)); for (I = 1 to ItemsCount) { TempItemNameLbl = MainForm.clFindComponent('ItemNameLbl' + IntToStr(I)); TempItemPieceLbl = MainForm.clFindComponent('PieceLbl' + IntToStr(I)); // adet TempItemPriceLbl = MainForm.clFindComponent('ItemPriceLbl' + IntToStr(I)); // UnitPrice if (TempItemPieceLbl <> nil) { LPieceStr = TempItemPieceLbl.Text; Delete(LPieceStr, 1, 1);// 'x' harfini sil if (StrToInt(LPieceStr) > 0) { Item = TCLJSONObject.Create; Item.AddPair('amount', TCLJSONValue.Int(StrToInt(LPieceStr))); if (TempItemNameLbl <> nil) { Item.AddPair('item_name', TCLJSONValue.Str(TempItemNameLbl.Text)); Item.AddPair('item_id', TCLJSONValue.Int(TempItemNameLbl.Cltagint)); } if (TempItemPriceLbl <> nil) { LItemPriceStr = TempItemPriceLbl.Text; Delete(LItemPriceStr, Length(LItemPriceStr) - 1, 2); // ' TL' sil Item.AddPair('unit_price', TCLJSONValue.Int(StrToInt(Trim(LItemPriceStr)))); } // --- DÜZELTME BURADA YAPILDI --- OrderListArrRef.AddObject(Item); // Item.Free; <-- BU SATIR SİLİNDİ! ASLA BURADA FREE YAPMAYIN. // Neden? Çünkü AddObject ile sahiplik diziye geçti. Dizi silinince Item da silinecek. } } } except ShowMessage('addToOrderlistArr Hatası: ' + LastExceptionMessage); } } void goToOrderList var OrderListRef: TCLJSONObject; OrderListArrRef: TCLJSONArray; { OrderListRef = uDataLib.GetCurrentOrderList; OrderListArrRef = uDataLib.GetCurrentOrderListArr; // Liste boşsa yeniden doldurmayı dene if (uDataLib.CurrentOrderListArrAmount == 0) { addToOrderlistArr; } // Referansları güncelle (addToOrderlistArr içinde Free/Create yapılmış olabilir) OrderListRef = uDataLib.GetCurrentOrderList; OrderListArrRef = uDataLib.GetCurrentOrderListArr; if (OrderListArrRef.Count > 0) { Clomosy.RunUnit('uWaiterAndChefDetails'); uWaiterAndChefDetails.SetTitleV(TableName); ShowMessage('Sipariş Listesi : '+OrderListRef.ToJSONString); uWaiterAndChefDetails.SetCreatingOrder(OrderListRef); uWaiterAndChefDetails.DetailsPnlV(OrderListArrRef); uWaiterAndChefDetails.FillDetailsPnlV(OrderListArrRef); uWaiterAndChefDetails.CalculateTotalPrice(OrderListArrRef); } else { ShowMessage('Sipariş listesi boş. Lütfen devam etmeden önce ürün ekleyin.'); } } void gotouEditItems { uEditItems.SetCategoryIDV(CategoryId); Clomosy.RunUnit('uEditItems'); } void gotouAddItems { uAddItems.SetCategoryIDV(CategoryId); Clomosy.RunUnit('uAddItems'); } void OpenAdminItemsPopUpV { AdminItemsPopUp.visible=true; AdminOpacityPnl.visible=true; } void CloseAdminItemsPopUpV { AdminItemsPopUp.visible=False; AdminOpacityPnl.visible=False; } void CheckAdmin { if role == 'Admin' { AdminManagementBtn.Visible=true; } } void ChangeImage var I: integer; TempItemPieceLbl, TempItemPieceValueLbl, TempPieceLbl: TclProLabel; TempIncreaseBtn, TempDecreaseBtn: TclProButton; { if (StokStatus == False) { MainForm.setImage(ShowStockBtn,'https://resmim.net/cdn/2025/11/12/jpbk0o.png'); for (I = 1 to ItemsCount) { TempItemPieceLbl= MainForm.clFindComponent('ItemPieceLbl'+IntToStr(I)); if (TempItemPieceLbl <> nil) TempItemPieceLbl.Visible = false; TempItemPieceValueLbl= MainForm.clFindComponent('ItemPieceValueLbl'+IntToStr(I)); if (TempItemPieceValueLbl <> nil) TempItemPieceValueLbl.Visible = false; TempIncreaseBtn= MainForm.clFindComponent('IncreaseBtn'+IntToStr(I)); if (TempIncreaseBtn <> nil) TempIncreaseBtn.Visible = true; TempDecreaseBtn= MainForm.clFindComponent('DecreaseBtn'+IntToStr(I)); if (TempDecreaseBtn <> nil) TempDecreaseBtn.Visible = true; TempPieceLbl= MainForm.clFindComponent('PieceLbl'+IntToStr(I)); if (TempPieceLbl <> nil) TempPieceLbl.Visible = true; } } else { MainForm.setImage(ShowStockBtn,'https://resmim.net/cdn/2025/11/13/jpAsex.png'); for (I = 1 to ItemsCount) { TempItemPieceLbl= MainForm.clFindComponent('ItemPieceLbl'+IntToStr(I)); if (TempItemPieceLbl <> nil) TempItemPieceLbl.Visible = true; TempItemPieceValueLbl= MainForm.clFindComponent('ItemPieceValueLbl'+IntToStr(I)); if (TempItemPieceValueLbl <> nil) TempItemPieceValueLbl.Visible = true; TempIncreaseBtn= MainForm.clFindComponent('IncreaseBtn'+IntToStr(I)); if (TempIncreaseBtn <> nil) TempIncreaseBtn.Visible = false; TempDecreaseBtn= MainForm.clFindComponent('DecreaseBtn'+IntToStr(I)); if (TempDecreaseBtn <> nil) TempDecreaseBtn.Visible = false; TempPieceLbl= MainForm.clFindComponent('PieceLbl'+IntToStr(I)); if (TempPieceLbl <> nil) TempPieceLbl.Visible = false; } } StokStatus = not StokStatus; } void GetItemsCompletedV(Sender) var jsonResponse: String; FQry: TCLJSONQuery; { jsonResponse = TCLRest(Sender).Response; FQry = TCLJSONQuery.Create(nil); try FQry = Clomosy.ClDataSetFromJSON(jsonResponse); if (FQry.Found) { ItemsCount = FQry.RecordCount; ItemsPnlV; FillItemsPnlV(FQry); } else { ShowMessage('Bu kategoride ürün bulunamadı.'); ItemsCount = 0; } except ShowMessage('Veri işleme hatası: ' + LastExceptionMessage); } TCLRest(Sender).ClearBody; TCLRest(Sender).free; } void GetItems var LRest : TCLRest; { LRest = uDataLib.GetWithRes('items?categoryId='+ IntToStr(CategoryId)); LRest.OnCompleted = 'GetItemsCompletedV'; LRest.ExecuteAsync; } { MainForm = tclForm.Create(self); ItemsCount = 0; StokStatus = False; StockVisibility = false; //Default olarak hızlı satış SetTableIdV('0'); SetTableV('Hızlı Satış'); TitlePnlV; MainPnlV; NavbarPnlV; CheckAdmin; AdminItemsPopUpV; GetItems; MainForm.SetFormColor('#121212','',clGNone); MainForm.FormWaiting.Visible = False; MainForm.BtnFormMenu.Visible = False; MainForm.BtnGoBack.Visible = False; MainForm.run; } |
|
![]() |
|
M-Guney
Kıdemli Üye
Kayıt Tarihi: 16 Eylül 2025 Konum: Konya, Meram, K Durum: Aktif Değil Puanlar: 131 |
Mesaj Seçenekleri
Teşekkürler(0)
Alıntı Cevapla
Gönderim Zamanı: 7 Saat 60 Dakika Önce Saat 11:39 |
|
OrderChecklistBtn' una tıkladığımda AccessViolation hatası alıyorum.
Access violation at address 00D336F8 in modüle 'ClomosyLearn.exe' (offset A836F8). Read of address 00000018. https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" 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">
|
|
![]() |
|
Emr.Erkmn
Moderatör
Kayıt Tarihi: 28 Şubat 2025 Durum: Aktif Değil Puanlar: 469 |
Mesaj Seçenekleri
Yanıt Yaz
Alıntı Emr.Erkmn
Bu mesaj kurallara aykırıysa buradan yöneticileri bilgilendirebilirsiniz.
Teşekkürler(0)
Alıntı Cevapla
Gönderim Zamanı: 5 Saat 39 Dakika Önce Saat 14:00 |
|
Hatanın sebebi;
genellikle oluşturulmamış bir nesnenin özelliğine erişmeye çalışıldığın da meydana gelmektedir. Yüksek ihtimalle hatanın geldiği yer addToOrderlistArr fonksiyonunda ki fiyat temizleme işlemişinden.https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" 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"> Eğer TempItemPriceLbl.Text boşsa veya beklenen formatta değilse (mesela TL yoksa), Length 0 veya küçük dönebilir. Delete fonksiyonuna negatif veya geçersiz bir başlangıç indeksi vermek Access Violation hatasına sebep olabilir. |
|
![]() |
|
M-Guney
Kıdemli Üye
Kayıt Tarihi: 16 Eylül 2025 Konum: Konya, Meram, K Durum: Aktif Değil Puanlar: 131 |
Mesaj Seçenekleri
Teşekkürler(1)
Alıntı Cevapla
Gönderim Zamanı: 2 Saat 57 Dakika Önce Saat 16:42 |
|
Evet doğru ne kadar da CurrentOrderListArrAmount 'nın içerisinde nil kontrolü olsada access hatası veriyordu onu bir üst koşul (IsCurrentOrderListNil) ekleyerek çözdüm. if(not uDataLib.IsCurrentOrderListNil) { ShowMessage('Yeni oluşturuluyor'); addToOrderlistArr; } else if (uDataLib.CurrentOrderListArrAmount == 0) { ShowMessage('bulundu'); ShowMessage('miktar ' + IntToStr(uDataLib.CurrentOrderListArrAmount) + 'oldugundan yeni oluşuyor'); addToOrderlistArr; ShowMessage('oluştu'); } https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" 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 |