Sayfayı Yazdır | Pencereyi Kapat

Unitler arasında data library oluşturulması

Nereden Yazdırıldığı: Clomosy | Forum
Kategori: Genel Programlama
Forum Adı: Clomosy ile değişken kullanımı
Forum Tanımlaması: TRObject dili ile değişken tanımlaması ve ekranda gösterme
URL: https://forum.clomosy.com.tr/forum_posts.asp?TID=1240
Tarih: 05 Aralık 2025 Saat 13:29
Program Versiyonu: Web Wiz Forums 12.07 - https://www.webwizforums.com


Konu: Unitler arasında data library oluşturulması
Mesajı Yazan: M-Guney
Konu: Unitler arasında data library oluşturulması
Mesaj Tarihi: 05 Aralık 2025 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" rel="nofollow - 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" rel="nofollow - 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" rel="nofollow - 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" rel="nofollow - 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" rel="nofollow - 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" rel="nofollow - 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" rel="nofollow - 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;
}



Cevaplar:
Mesajı Yazan: M-Guney
Mesaj Tarihi: 05 Aralık 2025 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" rel="nofollow - 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">



Sayfayı Yazdır | Pencereyi Kapat

Forum Software by Web Wiz Forums® version 12.07 - https://www.webwizforums.com
Copyright ©2001-2024 Web Wiz Ltd. - https://www.webwiz.net