Clomosy | Forum Ana Sayfa
Forum Anasayfa Forum Anasayfa > Genel Programlama > Clomosy ile değişken kullanımı
  Aktif Konular Aktif Konular RSS - Unitler arasında data library oluşturulması
  SSS SSS  Forumu Ara   Etkinlikler   Kayıt Ol Kayıt Ol  Giriş Giriş

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 Yanıt Yaz
Yazar
Mesaj
  Konu Arama Konu Arama  Topic Seçenekleri Topic Seçenekleri
M-Guney Açılır Kutu İzle
Kıdemli Üye
Kıdemli Üye


Kayıt Tarihi: 16 Eylül 2025
Konum: Konya, Meram, K
Durum: Aktif Değil
Puanlar: 131
Mesaj Seçenekleri Mesaj Seçenekleri   Teşekkürler (0) Teşekkürler(0)   Alıntı M-Guney Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Konu: Unitler arasında data library oluşturulması
    Gönderim Zamanı: 14 Saat 28 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;
}
Yukarı Dön
M-Guney Açılır Kutu İzle
Kıdemli Üye
Kıdemli Üye


Kayıt Tarihi: 16 Eylül 2025
Konum: Konya, Meram, K
Durum: Aktif Değil
Puanlar: 131
Mesaj Seçenekleri Mesaj Seçenekleri   Teşekkürler (0) Teşekkürler(0)   Alıntı M-Guney Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Gönderim Zamanı: 14 Saat 24 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">
Yukarı Dön
Emr.Erkmn Açılır Kutu İzle
Moderatör
Moderatör


Kayıt Tarihi: 28 Şubat 2025
Durum: Aktif Değil
Puanlar: 469
Mesaj Seçenekleri Mesaj Seçenekleri   Teşekkürler (0) Teşekkürler(0)   Alıntı Emr.Erkmn Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Gönderim Zamanı: 12 Saat 3 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. 

Yukarı Dön
M-Guney Açılır Kutu İzle
Kıdemli Üye
Kıdemli Üye


Kayıt Tarihi: 16 Eylül 2025
Konum: Konya, Meram, K
Durum: Aktif Değil
Puanlar: 131
Mesaj Seçenekleri Mesaj Seçenekleri   Teşekkürler (1) Teşekkürler(1)   Alıntı M-Guney Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Gönderim Zamanı: 9 Saat 21 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">
Yukarı Dön
 Yanıt Yaz Yanıt Yaz

Forum Atla Forum İzinleri Açılır Kutu İzle

Forum Software by Web Wiz Forums® version 12.07
Copyright ©2001-2024 Web Wiz Ltd.

Bu Sayfa 0,032 Saniyede Yüklendi.