Clomosy | Forum Ana Sayfa
Forum Anasayfa Forum Anasayfa > Genel Programlama > Genel İşlemler
  Aktif Konular Aktif Konular RSS - Bunun nasıl daha hızlı çalışmasını sağlayabiliriz?
  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.

Bunun nasıl daha hızlı çalışmasını sağlayabiliriz?

 Yanıt Yaz Yanıt Yaz
Yazar
Mesaj
  Konu Arama Konu Arama  Topic Seçenekleri Topic Seçenekleri
ibrahimBsr Açılır Kutu İzle
Yeni Üye
Yeni Üye
Simge

Kayıt Tarihi: 23 Haziran 2026
Durum: Aktif Değil
Puanlar: 20
Mesaj Seçenekleri Mesaj Seçenekleri   Teşekkürler (0) Teşekkürler(0)   Alıntı ibrahimBsr Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Konu: Bunun nasıl daha hızlı çalışmasını sağlayabiliriz?
    Gönderim Zamanı: 2 Saat 58 Dakika Önce Saat 10:11
//uses Main;

var
  Form1: TCLForm;
  ScaledLayout: TclScaledLayout;
  
  HeaderPnl, LogoLeftPnl, ActionRightPnl, PageTitlePnl, DividerPnl, SearchWrapPnl, SearchPnl, CountPnl, BottomMenuPnl: TclProPanel;
  TitleLbl, SubTitleLbl, PageTitleLbl, CountLbl: TclProLabel;
  SearchEdt: TclProEdit;
  ProfileBtn, ViewToggleBtn, LSummaryBtn, SearchBtn: TclProButton;
  NotifBtn: TclProImage; 
  CatalogBtn, BorrowedBtn, QrBtn, MyListBtn, SettingsBtn: TclProButton;
  
  FiltersPnl: TclProPanel;
  FiltersScrollBox: TclHorzScrollBox;
  FilterAllBtn, FilterRomanBtn, FilterBilimBtn, FilterTarihBtn, FilterFelsefeBtn, FilterCocukBtn, FilterGelisimBtn: TclProButton;
  
  BooksScrollBox, DetailScrollBox: TclVertScrollBox;
  GlobalBookCount: Integer;
  
  GlobalNotifMsg: String; 
  GlobalNotifCount: Integer; 

  GlobalViewMode: String;
  GlobalGridColCount: Integer;
  GlobalGridRowPnl: TclProPanel;

  DetailOverlayPnl, DetailContentPnl, DetailHeaderPnl, DetailFooterPnl: TclProPanel;
  DetailTitleLbl, DetailAuthorLbl, DetailDescLbl: TclProLabel;
  DetailCloseBtn, DetailFavBtn, DetailBorrowBtn: TclProButton;

  AlertOverlayPnl, AlertBoxPnl: TclProPanel;
  AlertMsgLbl: TclProLabel;
  AlertOkBtn: TclProButton;

  GlobalActionTimer, OpenDetailTimer: TclTimer;
  GlobalActionType, GlobalSelectedBookID, GlobalFilterGenre: String;
  GlobalCurrentStock: Integer;
  GlobalBooksList: TclStringList;

void GoToBorrowed; { Clomosy.RunUnit('uOdunc'); }
void GoToQR; { Clomosy.RunUnit('uQR'); }
void GoToListe; { Clomosy.RunUnit('uListe'); }
void GoToSettings; { Clomosy.RunUnit('uAyarlar'); }

void CloseDetail;
{
  DetailOverlayPnl.Visible = False;
  DetailContentPnl.Visible = False;
}

void ToggleViewMode;
var
  clRest: TclRest;
  jsonBody: String;
{
  if (GlobalViewMode == 'list') GlobalViewMode = 'grid';
  else GlobalViewMode = 'list';
  
  if (Clomosy.GlobalVariableString <> '')
  {
    clRest = TclRest.Create;
    clRest.BaseURL = 'https://deneme-a6346-default-rtdb.firebaseio.com/settings/'+Clomosy.GlobalVariableString+'/viewMode.json';
    clRest.Method = rmPUT;
    clRest.Accept = 'application/json';
    jsonBody = '"' + GlobalViewMode + '"';
    clRest.AddBody(jsonBody, 'application/json');
    clRest.Execute;
    clRest.Free;
  }
  Clomosy.RunUnit('uKatalog');
}

void SendNotification(AUser: String; AMsg: String);
var
  clRest: TclRest;
  notifID, jsonBody: String;
{
  notifID = FormatDateTime('yymmddhhnnsszzz', Now);
  clRest = TclRest.Create;
  clRest.BaseURL = 'https://deneme-a6346-default-rtdb.firebaseio.com/notifications/' + AUser + '/' + notifID + '.json';
  clRest.Method = rmPUT;
  clRest.Accept = 'application/json';
  jsonBody = '{"msg":"' + AMsg + '"}';
  clRest.AddBody(jsonBody, 'application/json');
  clRest.Execute;
  clRest.Free;
  
  if (AUser == Clomosy.GlobalVariableString)
  {
    GlobalNotifCount = GlobalNotifCount + 1;
    GlobalNotifMsg = GlobalNotifMsg + '- ' + AMsg + #13#10;
    if (NotifBtn <> nil)
    {
      NotifBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#D81B60'); 
      NotifBtn.SetclProSettings(NotifBtn.clProSettings);
    }
  }
}

void UpdateModalButtonsStatus(ABookID: String);
var
  clRest: TclRest;
  bData, currentUser, bookStr, stockStr: String;
  pStart, pEnd, totalStock: Integer;
  userAlreadyBorrowed: Boolean;
{
  currentUser = Clomosy.GlobalVariableString;
  
  DetailBorrowBtn.Text = 'Ödünç Al';
  DetailBorrowBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#36212E');
  DetailBorrowBtn.Enabled = True;
  DetailBorrowBtn.SetclProSettings(DetailBorrowBtn.clProSettings);
  
  DetailFavBtn.Text = 'Listeme Ekle';
  DetailFavBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#36212E');
  DetailFavBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF');
  DetailFavBtn.clProSettings.BorderWidth = 0;
  DetailFavBtn.SetclProSettings(DetailFavBtn.clProSettings);
  
  if (currentUser == '') Exit;
  
  clRest = TclRest.Create;
  clRest.BaseURL = 'https://deneme-a6346-default-rtdb.firebaseio.com/books/' + ABookID + '.json';
  clRest.Method = rmGET;
  clRest.Execute;
  bookStr = clRest.Response;
  clRest.Free;
  
  totalStock = 0;
  if ((bookStr <> 'null') && (bookStr <> '') && (bookStr <> '{}'))
  {
     pStart = Pos('"stock":"', bookStr);
     if (pStart > 0)
     {
        pStart = pStart + 9;
        pEnd = Pos('"', Copy(bookStr, pStart, Length(bookStr)));
        stockStr = Copy(bookStr, pStart, pEnd - 1);
        if (stockStr <> '') totalStock = StrToIntDef(stockStr, 0);
     }
  }
  GlobalCurrentStock = totalStock;
  
  clRest = TclRest.Create;
  clRest.BaseURL = 'https://deneme-a6346-default-rtdb.firebaseio.com/borrowed/' + ABookID + '.json';
  clRest.Method = rmGET;
  clRest.Execute;
  bData = clRest.Response;
  clRest.Free;
  
  userAlreadyBorrowed = False;
  if ((bData <> 'null') && (bData <> '') && (bData <> '{}'))
  {
     if (Pos('"' + currentUser + '"', bData) > 0) userAlreadyBorrowed = True;
  }
  
  if (userAlreadyBorrowed)
  {
      DetailBorrowBtn.Text = 'Zaten Ödünç Aldınız';
      DetailBorrowBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#4CAF50');
      DetailBorrowBtn.Enabled = False;
      DetailBorrowBtn.SetclProSettings(DetailBorrowBtn.clProSettings);
  }
  else if (totalStock <= 0)
  {
      DetailBorrowBtn.Text = 'Stokta Yok';
      DetailBorrowBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#888888');
      DetailBorrowBtn.Enabled = False;
      DetailBorrowBtn.SetclProSettings(DetailBorrowBtn.clProSettings);
  }
  
  clRest = TclRest.Create;
  clRest.BaseURL = 'https://deneme-a6346-default-rtdb.firebaseio.com/favorites/' + currentUser + '/' + ABookID + '.json';
  clRest.Method = rmGET;
  clRest.Execute;
  bData = clRest.Response;
  clRest.Free;
  if ((bData <> 'null') && (bData <> '') && (bData <> '{}'))
  {
    DetailFavBtn.Text = 'Listemde (Çıkar)';
    DetailFavBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FFFFFF');
    DetailFavBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#D81B60');
    DetailFavBtn.clProSettings.BorderColor = clAlphaColor.clHexToColor('#D81B60');
    DetailFavBtn.clProSettings.BorderWidth = 1;
    DetailFavBtn.SetclProSettings(DetailFavBtn.clProSettings);
  }
}

void BorrowBookClick;
var currentUser: String;
{
  if (DetailBorrowBtn.Text <> 'Ödünç Al') Exit;
  currentUser = Clomosy.GlobalVariableString;
  if (currentUser == '') { ShowMessage('Lütfen giriş yapın.'); Exit; }
  
  GlobalActionType = 'BORROW';
  Form1.FormWaiting.Visible = True;
  GlobalActionTimer.Enabled = True;
}

void FavBookClick;
var currentUser: String;
{
  currentUser = Clomosy.GlobalVariableString;
  if (currentUser == '') { ShowMessage('Lütfen giriş yapın.'); Exit; }
  
  if (DetailFavBtn.Text == 'Listeme Ekle') GlobalActionType = 'ADD_FAV';
  else GlobalActionType = 'DEL_FAV';
  
  Form1.FormWaiting.Visible = True;
  GlobalActionTimer.Enabled = True;
}

void OnOpenDetailTimer;
var
  SourceTitleLbl, SourceAuthorLbl, SourceSummaryLbl, SourceUrlLbl, SourceGenreLbl: TclProLabel;
  clRestCache: TclRest;
  jsonBody, bCoverUrl: String;
{
  OpenDetailTimer.Enabled = False;
  
  SourceTitleLbl = TclProLabel(Form1.clFindComponent('Title_' + GlobalSelectedBookID));
  SourceAuthorLbl = TclProLabel(Form1.clFindComponent('Author_' + GlobalSelectedBookID));
  SourceSummaryLbl = TclProLabel(Form1.clFindComponent('Desc_' + GlobalSelectedBookID));
  SourceUrlLbl = TclProLabel(Form1.clFindComponent('CoverUrl_' + GlobalSelectedBookID)); 
  SourceGenreLbl = TclProLabel(Form1.clFindComponent('Genre_' + GlobalSelectedBookID)); 

  if (SourceTitleLbl <> nil) DetailTitleLbl.Text = SourceTitleLbl.Text;
  if (SourceAuthorLbl <> nil) DetailAuthorLbl.Text = SourceAuthorLbl.Text;
  if (SourceSummaryLbl <> nil) DetailDescLbl.Text = SourceSummaryLbl.Text;
  else DetailDescLbl.Text = 'Bu kitap için özet bilgisi bulunamadı.';
  
  bCoverUrl = '';
  if (SourceUrlLbl <> nil) bCoverUrl = SourceUrlLbl.Text;
  
  if ((GlobalSelectedBookID <> '') && (Pos('OL', GlobalSelectedBookID) > 0))
  {
    clRestCache = TclRest.Create;
    clRestCache.BaseURL = 'https://deneme-a6346-default-rtdb.firebaseio.com/books/'+GlobalSelectedBookID+'.json';
    clRestCache.Method = rmGET;
    clRestCache.Execute;
    
    // Kitap veritabanında yoksa YENİ EKLE
    if ((clRestCache.Response == 'null') || (clRestCache.Response == '') || (clRestCache.Response == '{}'))
    {
       clRestCache.Free; 
       
       clRestCache = TclRest.Create; 
       clRestCache.BaseURL = 'https://deneme-a6346-default-rtdb.firebaseio.com/books/'+GlobalSelectedBookID+'.json';
       clRestCache.Method = rmPUT;
       clRestCache.Accept = 'application/json';
       
       // BURAYA YENİ KİTAPLAR İÇİN "stock":"0" BİLGİSİ EKLENDİ
       jsonBody = '{"id":"'+GlobalSelectedBookID+'", "title":"'+DetailTitleLbl.Text+'", "author":"'+DetailAuthorLbl.Text+'", "color":"#2E4053", "summary":"OpenLibrary API Kaydı", "cover":"'+bCoverUrl+'", "genre":"'+SourceGenreLbl.Text+'", "stock":"0"}';
       
       clRestCache.AddBody(jsonBody, 'application/json');
       clRestCache.Execute;
       clRestCache.Free;
    }
    else
    {
       clRestCache.Free;
    }
  }
  
  // Modal butonlarını güncelle (Eğer stok 0 ise "Stokta Yok" diyecektir)
  if (GlobalSelectedBookID <> '') UpdateModalButtonsStatus(GlobalSelectedBookID);
  
  DetailOverlayPnl.Visible = True;
  DetailContentPnl.Visible = True;
  DetailContentPnl.BringToFront;
  Form1.FormWaiting.Visible = False;
}

void OpenDetail;
var ClickedPnl: TclProPanel;
{
  ClickedPnl = TclProPanel(Form1.clSender);
  GlobalSelectedBookID = ClickedPnl.clTagStr; 
  DetailContentPnl.clTagStr = GlobalSelectedBookID;
  
  Form1.FormWaiting.Visible = True;
  OpenDetailTimer.Enabled = True;
}

void CreateBookCard(AID: String; ATitle: String; AAuthor: String; ARating: String; AColor: String; ASummary: String; ACoverUrl: String; AGenre: String);
var
  LCardPnl, LCoverPnl, LInfoPnl: TclProPanel;
  LTitleLbl, LAuthorLbl, LRatingLbl, LSummaryLbl, LUrlLbl, LGenreLbl: TclProLabel;
  LCoverImg: TclProImage;
{
  if (GlobalViewMode == 'grid')
  {
    if (GlobalGridColCount == 0)
    {
      GlobalGridRowPnl = Form1.AddNewProPanel(BooksScrollBox, 'GridRow_' + AID);
      GlobalGridRowPnl.Align = alTop; GlobalGridRowPnl.Height = 160; GlobalGridRowPnl.Margins.Left = 10; GlobalGridRowPnl.Margins.Right = 10; GlobalGridRowPnl.Margins.Top = 10;
      GlobalGridRowPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');
      GlobalGridRowPnl.SetclProSettings(GlobalGridRowPnl.clProSettings);
    }
    
    LCardPnl = Form1.AddNewProPanel(GlobalGridRowPnl, 'Card_' + AID);
    LCardPnl.Align = alLeft; LCardPnl.Width = 100; LCardPnl.Margins.Left = 5; LCardPnl.Margins.Right = 5;
    LCardPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FFFFFF'); LCardPnl.clProSettings.BorderColor = clAlphaColor.clHexToColor('#E2DED5'); LCardPnl.clProSettings.BorderWidth = 1; LCardPnl.clProSettings.RoundHeight = 8; LCardPnl.clProSettings.RoundWidth = 8;
    LCardPnl.SetclProSettings(LCardPnl.clProSettings);
    LCardPnl.clTagStr = AID; Form1.AddNewEvent(LCardPnl, tbeOnClick, 'OpenDetail');
    
    LUrlLbl = Form1.AddNewProLabel(LCardPnl, 'CoverUrl_' + AID, ACoverUrl); LUrlLbl.Visible = False;
    LSummaryLbl = Form1.AddNewProLabel(LCardPnl, 'Desc_' + AID, ASummary); LSummaryLbl.Visible = False;
    LGenreLbl = Form1.AddNewProLabel(LCardPnl, 'Genre_' + AID, AGenre); LGenreLbl.Visible = False;
    LAuthorLbl = Form1.AddNewProLabel(LCardPnl, 'Author_' + AID, AAuthor); LAuthorLbl.Visible = False;

    LCoverPnl = Form1.AddNewProPanel(LCardPnl, 'Cover_' + AID);
    LCoverPnl.Align = alTop; LCoverPnl.Height = 100; LCoverPnl.Margins.Left = 5; LCoverPnl.Margins.Top = 5; LCoverPnl.Margins.Right = 5;
    LCoverPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor(AColor); LCoverPnl.clProSettings.RoundHeight = 5; LCoverPnl.clProSettings.RoundWidth = 5;
    LCoverPnl.SetclProSettings(LCoverPnl.clProSettings);
    LCoverPnl.clTagStr = AID; Form1.AddNewEvent(LCoverPnl, tbeOnClick, 'OpenDetail');
    
    if (ACoverUrl <> '')
    {
      LCoverImg = Form1.AddNewProImage(LCoverPnl, 'CoverImg_' + AID);
      LCoverImg.Align = alClient; LCoverImg.Margins.Left = 2; LCoverImg.Margins.Right = 2; LCoverImg.Margins.Top = 2; LCoverImg.Margins.Bottom = 2;
      LCoverImg.clProSettings.PictureSource = ACoverUrl; LCoverImg.clProSettings.PictureAutoFit = True;
      LCoverImg.SetclProSettings(LCoverImg.clProSettings);
      LCoverImg.clTagStr = AID; Form1.AddNewEvent(LCoverImg, tbeOnClick, 'OpenDetail');
    }
    
    LTitleLbl = Form1.AddNewProLabel(LCardPnl, 'Title_' + AID, ATitle);
    LTitleLbl.Align = alBottom; LTitleLbl.Height = 40; LTitleLbl.Margins.Left = 5; LTitleLbl.Margins.Right = 5; LTitleLbl.Margins.Bottom = 5;
    LTitleLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#002B36'); LTitleLbl.clProSettings.FontSize = 11; LTitleLbl.clProSettings.TextSettings.Font.Style = [fsBold]; LTitleLbl.clProSettings.WordWrap = True;
    LTitleLbl.SetclProSettings(LTitleLbl.clProSettings);
    LTitleLbl.clTagStr = AID; Form1.AddNewEvent(LTitleLbl, tbeOnClick, 'OpenDetail');
    
    GlobalGridColCount = GlobalGridColCount + 1;
    if (GlobalGridColCount >= 3) GlobalGridColCount = 0;
  }
  else
  {
    LCardPnl = Form1.AddNewProPanel(BooksScrollBox, 'Card_' + AID);
    LCardPnl.Align = alTop; LCardPnl.Height = 110; LCardPnl.Margins.Left = 15; LCardPnl.Margins.Right = 15; LCardPnl.Margins.Bottom = 10;
    LCardPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FFFFFF'); LCardPnl.clProSettings.BorderColor = clAlphaColor.clHexToColor('#E2DED5'); LCardPnl.clProSettings.BorderWidth = 1;
    LCardPnl.SetclProSettings(LCardPnl.clProSettings);
    
    LUrlLbl = Form1.AddNewProLabel(LCardPnl, 'CoverUrl_' + AID, ACoverUrl); LUrlLbl.Visible = False;
    LSummaryLbl = Form1.AddNewProLabel(LCardPnl, 'Desc_' + AID, ASummary); LSummaryLbl.Visible = False;
    LGenreLbl = Form1.AddNewProLabel(LCardPnl, 'Genre_' + AID, AGenre); LGenreLbl.Visible = False;

    LCoverPnl = Form1.AddNewProPanel(LCardPnl, 'Cover_' + AID);
    LCoverPnl.Align = alLeft; LCoverPnl.Width = 65; LCoverPnl.Margins.Left = 10; LCoverPnl.Margins.Top = 10; LCoverPnl.Margins.Bottom = 10;
    LCoverPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor(AColor);
    LCoverPnl.SetclProSettings(LCoverPnl.clProSettings);
    
    if (ACoverUrl <> '')
    {
      LCoverImg = Form1.AddNewProImage(LCoverPnl, 'CoverImg_' + AID);
      LCoverImg.Align = alClient; LCoverImg.Margins.Left = 2; LCoverImg.Margins.Right = 2; LCoverImg.Margins.Top = 2; LCoverImg.Margins.Bottom = 2;
      LCoverImg.clProSettings.PictureSource = ACoverUrl; LCoverImg.clProSettings.PictureAutoFit = True;
      LCoverImg.SetclProSettings(LCoverImg.clProSettings);
    }
    
    LRatingLbl = Form1.AddNewProLabel(LCardPnl, 'Rating_' + AID, ARating + ' ★' );
    LRatingLbl.Align = alRight; LRatingLbl.Width = 45; LRatingLbl.Margins.Top = 10; LRatingLbl.Margins.Right = 10;
    LRatingLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#B8860B');
    LRatingLbl.SetclProSettings(LRatingLbl.clProSettings);
    
    LSummaryBtn = Form1.AddNewProButton(LCardPnl, 'Summary_' + AID, 'Bilgiler');
    LSummaryBtn.Align = alRight; LSummaryBtn.Width = 60; LSummaryBtn.Margins.Top = 50; LSummaryBtn.Margins.Bottom = 25; LSummaryBtn.Margins.Right = -25;
    LSummaryBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF'); LSummaryBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#36212E');
    LSummaryBtn.SetclProSettings(LSummaryBtn.clProSettings);
    LSummaryBtn.clTagStr = AID; Form1.AddNewEvent(LSummaryBtn, tbeOnClick, 'OpenDetail');
    
    LInfoPnl = Form1.AddNewProPanel(LCardPnl, 'Info_' + AID);
    LInfoPnl.Align = alClient; LInfoPnl.Margins.Left = 15;

    LTitleLbl = Form1.AddNewProLabel(LInfoPnl, 'Title_' + AID, ATitle);
    LTitleLbl.Align = alTop; LTitleLbl.Height = 25; LTitleLbl.Margins.Top = 15;
    LTitleLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000'); LTitleLbl.clProSettings.FontSize = 16; LTitleLbl.clProSettings.TextSettings.Font.Style = [fsBold];
    LTitleLbl.SetclProSettings(LTitleLbl.clProSettings);

    LAuthorLbl = Form1.AddNewProLabel(LInfoPnl, 'Author_' + AID, AAuthor);
    LAuthorLbl.Align = alTop; LAuthorLbl.Height = 20;
    LAuthorLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#666666');
    LAuthorLbl.SetclProSettings(LAuthorLbl.clProSettings);
  }
  GlobalBookCount = GlobalBookCount + 1;
}

void DrawBooks;
var
  i: Integer;
  clQueryItem: TClJSONQuery;
  jsonArrStr, itemID, itemTitle, itemAuthor, itemRating, itemColor, itemSummary, itemCover, itemGenre: String;
{
  if (BooksScrollBox <> nil) BooksScrollBox.Free;
  BooksScrollBox = Form1.AddNewVertScrollBox(ScaledLayout, 'BooksScrollBox_' + FormatDateTime('hhnnsszzz', Now));
  BooksScrollBox.Align = alClient;
  
  GlobalBookCount = 0; GlobalGridColCount = 0;
  if (GlobalBooksList == nil) Exit;

  jsonArrStr = '[';
  for i = 0 to GlobalBooksList.Count - 1
  {
     jsonArrStr = jsonArrStr + GlobalBooksList.Strings;
     if (i < GlobalBooksList.Count - 1) jsonArrStr = jsonArrStr + ',';
  }
  jsonArrStr = jsonArrStr + ']';
  
  if (jsonArrStr <> '[]')
  {
      clQueryItem = Clomosy.ClDataSetFromJSON(jsonArrStr);
      if (clQueryItem <> nil)
      {
         clQueryItem.First;
         while (not clQueryItem.Eof)
         {
            itemGenre = clQueryItem.FieldByName('genre').AsString;
            if ((GlobalFilterGenre == 'Tümü') || (GlobalFilterGenre == '') || (Pos(GlobalFilterGenre, itemGenre) > 0))
            {
               itemID = clQueryItem.FieldByName('id').AsString;
               itemTitle = clQueryItem.FieldByName('title').AsString;
               itemAuthor = clQueryItem.FieldByName('author').AsString;
               itemRating = clQueryItem.FieldByName('rating').AsString;
               itemColor = clQueryItem.FieldByName('color').AsString;
               itemSummary = clQueryItem.FieldByName('summary').AsString;
               itemCover = clQueryItem.FieldByName('cover').AsString;
               CreateBookCard(itemID, itemTitle, itemAuthor, itemRating, itemColor, itemSummary, itemCover, itemGenre);
            }
            clQueryItem.Next;
         }
         clQueryItem.Free;
      }
  }
  CountLbl.Text = IntToStr(GlobalBookCount) + ' kitap';
}

void FilterClick;
var ClickedBtn: TclProButton;
{
  ClickedBtn = TclProButton(Form1.clSender);
  GlobalFilterGenre = ClickedBtn.Text;
  
  FilterAllBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterAllBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');
  FilterRomanBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterRomanBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');
  FilterBilimBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterBilimBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');
  FilterTarihBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterTarihBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');
  FilterFelsefeBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterFelsefeBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');
  FilterCocukBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterCocukBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');
  FilterGelisimBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterGelisimBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');

  ClickedBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#D29054');
  ClickedBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF');
  
  FilterAllBtn.SetclProSettings(FilterAllBtn.clProSettings); FilterRomanBtn.SetclProSettings(FilterRomanBtn.clProSettings); FilterBilimBtn.SetclProSettings(FilterBilimBtn.clProSettings);
  FilterTarihBtn.SetclProSettings(FilterTarihBtn.clProSettings); FilterFelsefeBtn.SetclProSettings(FilterFelsefeBtn.clProSettings); FilterCocukBtn.SetclProSettings(FilterCocukBtn.clProSettings); FilterGelisimBtn.SetclProSettings(FilterGelisimBtn.clProSettings);

  DrawBooks;
}

void FetchBooksFromFirebase;
var
  clRestSettings, clRest, clRestBorrowed, clRestReviews, clRestNotif: TclRest;
  clQuery: TClJSONQuery;
  bookID, valStr, ratingStr, currentUser, respStr, retDateStr, bCoverUrl: String;
  bTitle, bAuthor, bColor, bSummary, bGenre: String;
  pStart, pEnd, totalRating, reviewCount, daysLeft: Integer;
  avgRating: Double;
  allBorrowedStr, allReviewsStr, bookBorrowBlock, bookRevBlock: String;
{
  currentUser = Clomosy.GlobalVariableString;
  GlobalNotifMsg = ''; GlobalNotifCount = 0; GlobalGridColCount = 0; 
  
  if (GlobalBooksList <> nil) GlobalBooksList.Free;
  GlobalBooksList = Clomosy.StringListNew;
  
  if (currentUser <> '')
  {
    clRestSettings = TclRest.Create; clRestSettings.BaseURL = 'https://deneme-a6346-default-rtdb.firebaseio.com/settings/'+currentUser+'/viewMode.json'; clRestSettings.Method = rmGET; clRestSettings.Execute;
    if (Pos('"grid"', clRestSettings.Response) > 0) GlobalViewMode = 'grid'; else GlobalViewMode = 'list';
    clRestSettings.Free;
    
    if (ViewToggleBtn <> nil)
    {
      if (GlobalViewMode == 'grid') ViewToggleBtn.Text = 'Liste'; else ViewToggleBtn.Text = 'Izgara';
    }
  
    clRestNotif = TclRest.Create; clRestNotif.BaseURL = 'https://deneme-a6346-default-rtdb.firebaseio.com/notifications/' + currentUser + '.json'; clRestNotif.Method = rmGET; clRestNotif.Execute;
    respStr = clRestNotif.Response; clRestNotif.Free;
    if ((respStr <> 'null') && (respStr <> '') && (respStr <> '{}'))
    {
      pStart = Pos('"msg":"', respStr);
      while (pStart > 0)
      {
        GlobalNotifCount = GlobalNotifCount + 1; 
        respStr = Copy(respStr, pStart + 7, Length(respStr));
        GlobalNotifMsg = GlobalNotifMsg + '- ' + Copy(respStr, 1, Pos('"', respStr) - 1) + #13#10;
        pStart = Pos('"msg":"', respStr);
      }
    }
  } else GlobalViewMode = 'list';

  clRestBorrowed = TclRest.Create; clRestBorrowed.BaseURL = 'https://deneme-a6346-default-rtdb.firebaseio.com/borrowed.json'; clRestBorrowed.Method = rmGET; clRestBorrowed.Execute; allBorrowedStr = clRestBorrowed.Response; clRestBorrowed.Free;
  clRestReviews = TclRest.Create; clRestReviews.BaseURL = 'https://deneme-a6346-default-rtdb.firebaseio.com/reviews.json'; clRestReviews.Method = rmGET; clRestReviews.Execute; allReviewsStr = clRestReviews.Response; clRestReviews.Free;

  clRest = TclRest.Create; clRest.BaseURL = 'https://deneme-a6346-default-rtdb.firebaseio.com/books.json'; clRest.Method = rmGET; clRest.Accept = 'application/json'; clRest.Execute;
  
  if ((clRest.Response <> 'null') && (clRest.Response <> '') && (clRest.Response <> '{}'))
  {
    if ((Pos('":{"', clRest.Response) == 0) && (Pos('": {"', clRest.Response) == 0))
    {
       clRest.Method = rmDELETE; clRest.Execute; ShowMessage('Sistem Uyarısı: Veritabanı sıfırlandı.');
    }
    else
    {
      clQuery = Clomosy.ClDataSetFromJSON(clRest.Response);
      if (clQuery <> nil)
      {
        clQuery.First;
        while (not clQuery.Eof)
        {
          bookID = ''; try bookID = clQuery.FieldByName('id').AsString; except bookID = ''; }
          
          if (bookID <> '')
          {
            bTitle = 'Bilinmeyen Kitap'; try bTitle = clQuery.FieldByName('title').AsString; except bTitle = 'Bilinmeyen Kitap'; }
            bAuthor = 'Bilinmeyen Yazar'; try bAuthor = clQuery.FieldByName('author').AsString; except bAuthor = 'Bilinmeyen Yazar'; }
            bColor = '#2E4053'; try bColor = clQuery.FieldByName('color').AsString; except bColor = '#2E4053'; }
            bSummary = 'Açıklama bulunmuyor.'; try bSummary = clQuery.FieldByName('summary').AsString; except bSummary = 'Açıklama bulunmuyor.'; }
            bCoverUrl = ''; try bCoverUrl = clQuery.FieldByName('cover').AsString; except bCoverUrl = ''; }
            bGenre = 'Roman'; try bGenre = clQuery.FieldByName('genre').AsString; except bGenre = 'Roman'; }

            if ((currentUser <> '') && (allBorrowedStr <> 'null') && (allBorrowedStr <> ''))
            {
               pStart = Pos('"' + bookID + '":', allBorrowedStr);
               if (pStart > 0)
               {
                  bookBorrowBlock = Copy(allBorrowedStr, pStart, 1500);
                  pEnd = Pos('}}', bookBorrowBlock);
                  if (pEnd > 0) bookBorrowBlock = Copy(bookBorrowBlock, 1, pEnd);
                  
                  if (Pos('"' + currentUser + '"', bookBorrowBlock) > 0)
                  {
                     retDateStr = ''; pStart = Pos('"returnDate":"', bookBorrowBlock);
                     if (pStart > 0)
                     {
                        pStart = pStart + 14;
                        pEnd = Pos('"', Copy(bookBorrowBlock, pStart, Length(bookBorrowBlock)));
                        if (pEnd > 0) retDateStr = Copy(bookBorrowBlock, pStart, pEnd - 1);
                     }
                     if (retDateStr <> '')
                     {
                        daysLeft = Trunc(StrToDate(retDateStr)) - Trunc(Now);
                        if (daysLeft < 0) { GlobalNotifCount = GlobalNotifCount + 1; GlobalNotifMsg = GlobalNotifMsg + '- "' + bTitle + '" iadesi ' + IntToStr(Abs(daysLeft)) + ' gün gecikti!' + #13#10; }
                        else if (daysLeft <= 2) { GlobalNotifCount = GlobalNotifCount + 1; GlobalNotifMsg = GlobalNotifMsg + '- "' + bTitle + '" iadesine ' + IntToStr(daysLeft) + ' gün kaldı!' + #13#10; }
                     }
                  }
               }
            }
            
            totalRating = 0; reviewCount = 0;
            if ((allReviewsStr <> 'null') && (allReviewsStr <> ''))
            {
               pStart = Pos('"' + bookID + '":', allReviewsStr);
               if (pStart > 0)
               {
                  bookRevBlock = Copy(allReviewsStr, pStart, 1500);
                  pEnd = Pos('}}', bookRevBlock);
                  if (pEnd > 0) bookRevBlock = Copy(bookRevBlock, 1, pEnd);
                  
                  pStart = Pos('"rating":', bookRevBlock);
                  while (pStart > 0)
                  {
                     pStart = pStart + 9; valStr = Copy(bookRevBlock, pStart, 1); if (valStr == ' ') valStr = Copy(bookRevBlock, pStart + 1, 1);
                     totalRating = totalRating + StrToIntDef(valStr, 0); reviewCount = reviewCount + 1;
                     bookRevBlock = Copy(bookRevBlock, pStart + 1, Length(bookRevBlock)); pStart = Pos('"rating":', bookRevBlock);
                  }
               }
            }
            if (reviewCount > 0) { avgRating = (totalRating * 1.0) / reviewCount; ratingStr = FloatToStr(avgRating); if (Length(ratingStr) > 3) ratingStr = Copy(ratingStr, 1, 3); }
            else ratingStr = '0';
          
            GlobalBooksList.Add('{"id":"'+bookID+'","title":"'+bTitle+'","author":"'+bAuthor+'", "rating":"'+ratingStr+'", "color":"'+bColor+'", "summary":"'+bSummary+'", "cover":"'+bCoverUrl+'", "genre":"'+bGenre+'"}');
          }
          clQuery.Next;
        }
        clQuery.Free; 
      }
    }
  }
  clRest.Free;
  
  if (GlobalNotifCount > 0) { NotifBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#D81B60'); NotifBtn.SetclProSettings(NotifBtn.clProSettings); }
  else { NotifBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); NotifBtn.SetclProSettings(NotifBtn.clProSettings); }
  
  DrawBooks;
}

void SearchOpenLibrary;
var
  clRestAPI: TclRest;
  queryStr, jsonResult, docStr, guidStr, valStr, subStr: String;
  pStart, pEnd, docEnd, pSub, i: Integer;
  bKey, bTitle, bAuthor, bCover, bCoverUrl, bGenre: String;
{
  queryStr = SearchEdt.Text;
  if (queryStr == '')
  {
    if (GlobalBooksList <> nil) GlobalBooksList.Free;
    GlobalBooksList = Clomosy.StringListNew;
    FetchBooksFromFirebase;
    Exit;
  }
  
  for i = 1 to Length(queryStr) { if (Copy(queryStr, i, 1) == ' ') queryStr = Copy(queryStr, 1, i-1) + '+' + Copy(queryStr, i+1, Length(queryStr)); }

  if (GlobalBooksList <> nil) GlobalBooksList.Free;
  GlobalBooksList = Clomosy.StringListNew;
  CountLbl.Text = 'API Aranıyor...';
  
  GlobalFilterGenre = 'Tümü'; 
  FilterAllBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#D29054'); FilterAllBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF');
  FilterRomanBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterRomanBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');
  FilterBilimBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterBilimBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');
  FilterTarihBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterTarihBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');
  FilterFelsefeBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterFelsefeBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');
  FilterCocukBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterCocukBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');
  FilterGelisimBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterGelisimBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');
  FilterAllBtn.SetclProSettings(FilterAllBtn.clProSettings); FilterRomanBtn.SetclProSettings(FilterRomanBtn.clProSettings); FilterBilimBtn.SetclProSettings(FilterBilimBtn.clProSettings); FilterTarihBtn.SetclProSettings(FilterTarihBtn.clProSettings); FilterFelsefeBtn.SetclProSettings(FilterFelsefeBtn.clProSettings); FilterCocukBtn.SetclProSettings(FilterCocukBtn.clProSettings); FilterGelisimBtn.SetclProSettings(FilterGelisimBtn.clProSettings);

  // API Yükünü hafifletmek için &fields parametresi eklendi
  clRestAPI = TclRest.Create; 
  clRestAPI.BaseURL = 'https://openlibrary.org/search.json?q=' + queryStr + '&limit=15&fields=key,title,author_name,cover_i,subject'; 
  clRestAPI.Method = rmGET; clRestAPI.Accept = 'application/json'; clRestAPI.Execute;
  jsonResult = clRestAPI.Response; clRestAPI.Free;
  
  if ((jsonResult <> '') && (Pos('"docs":', jsonResult) > 0))
  {
     pStart = Pos('"docs":[', jsonResult);
     if (pStart > 0) jsonResult = Copy(jsonResult, pStart + 8, Length(jsonResult));
     
     pStart = Pos('{', jsonResult);
     while (pStart > 0)
     {
        docEnd = Pos('},{', jsonResult);
        if (docEnd == 0) docEnd = Pos('}]', jsonResult);
        if (docEnd == 0) Break;
        
        docStr = Copy(jsonResult, pStart, docEnd - pStart + 1);
        
        bKey = ''; pSub = Pos('"key":"', docStr);
        if (pSub > 0) { pSub = pSub + 7; pEnd = Pos('"', Copy(docStr, pSub, Length(docStr))); bKey = Copy(docStr, pSub, pEnd - 1); if (Length(bKey) > 7) bKey = Copy(bKey, 8, Length(bKey)); }
        
        bTitle = 'Bilinmeyen Kitap'; pSub = Pos('"title":"', docStr);
        if (pSub > 0) { pSub = pSub + 9; pEnd = Pos('"', Copy(docStr, pSub, Length(docStr))); bTitle = Copy(docStr, pSub, pEnd - 1); }
        
        bAuthor = 'Bilinmeyen Yazar'; pSub = Pos('"author_name":["', docStr);
        if (pSub > 0) { pSub = pSub + 16; pEnd = Pos('"', Copy(docStr, pSub, Length(docStr))); bAuthor = Copy(docStr, pSub, pEnd - 1); }
        
        bCoverUrl = ''; pSub = Pos('"cover_i":', docStr);
        if (pSub > 0) {
           pSub = pSub + 10; pEnd = 0; bCover = '';
           while (pSub + pEnd <= Length(docStr))
           {
             valStr = Copy(docStr, pSub + pEnd, 1);
             if ((valStr >= '0') && (valStr <= '9')) { bCover = bCover + valStr; pEnd = pEnd + 1; } else Break;
           }
           if (bCover <> '') bCoverUrl = 'https://covers.openlibrary.org/b/id/' + bCover + '-M.jpg';
        }
        
        // --- TÜRLERİN (GENRE) KUSURSUZ AYRIŞTIRILMASI ---
        bGenre = 'Roman'; 
        pSub = Pos('"subject":[', docStr);
        if (pSub > 0) {
           pSub = pSub + 11; pEnd = Pos(']', Copy(docStr, pSub, Length(docStr))); subStr = AnsiLowerCase(Copy(docStr, pSub, pEnd - 1));
           
           bGenre = '';
           if (Pos('science fiction', subStr) > 0) bGenre = bGenre + 'Bilim Kurgu, ';
           if (Pos('history', subStr) > 0) bGenre = bGenre + 'Tarih, ';
           if (Pos('philosophy', subStr) > 0) bGenre = bGenre + 'Felsefe, ';
           if ((Pos('children', subStr) > 0) || (Pos('juvenile', subStr) > 0)) bGenre = bGenre + 'Çocuk, ';
           if ((Pos('self-help', subStr) > 0) || (Pos('personal growth', subStr) > 0)) bGenre = bGenre + 'Kişisel Gelişim, ';
           if ((Pos('fiction', subStr) > 0) || (Pos('novel', subStr) > 0) || (Pos('magic', subStr) > 0) || (Pos('fantasy', subStr) > 0)) bGenre = bGenre + 'Roman, ';
           
           if (bGenre == '') bGenre = 'Roman'; else bGenre = Copy(bGenre, 1, Length(bGenre) - 2); 
        }
        
        if (bKey <> '') GlobalBooksList.Add('{"id":"'+bKey+'","title":"'+bTitle+'","author":"'+bAuthor+'", "rating":"0", "color":"#2E4053", "summary":"OpenLibrary API Kaydı", "cover":"'+bCoverUrl+'", "genre":"'+bGenre+'"}');
        
        jsonResult = Copy(jsonResult, docEnd + 2, Length(jsonResult));
        pStart = Pos('{', jsonResult);
     }
  }
  else
  {
     ShowMessage('Arama sonucu bulunamadı. Arşiv veritabanınıza geri dönülüyor.');
     SearchEdt.Text = '';
     if (GlobalBooksList <> nil) GlobalBooksList.Free;
     GlobalBooksList = Clomosy.StringListNew;
     FetchBooksFromFirebase;
     Exit;
  }
  
  DrawBooks;
}

void DoSearchBooks;
{
  Form1.FormWaiting.Visible = True;
  GlobalActionType = 'SEARCH';
  GlobalActionTimer.Enabled = True;
}

void OnGlobalActionTimer;
var
  clRest: TclRest;
  bookID, currentUser, jsonBody, returnDate: String;
{
  GlobalActionTimer.Enabled = False;
  bookID = DetailContentPnl.clTagStr; 
  currentUser = Clomosy.GlobalVariableString;
  
  if (GlobalActionType == 'BORROW')
  {
      returnDate = FormatDateTime('dd.mm.yyyy', Now + 14);
      clRest = TclRest.Create;
      clRest.Accept = 'application/json';
      clRest.BaseURL = 'https://deneme-a6346-default-rtdb.firebaseio.com/borrowed/'+bookID+'.json';
      clRest.Method = rmPUT;
      jsonBody = '{"user":"'+currentUser+'", "returnDate":"'+returnDate+'", "id":"'+bookID+'"}';
      clRest.AddBody(jsonBody, 'application/json');
      clRest.Execute;
      clRest.Free;
      
      clRest = TclRest.Create;
      clRest.Accept = 'application/json';
      clRest.BaseURL = 'https://deneme-a6346-default-rtdb.firebaseio.com/borrow_history/'+bookID+'.json';
      clRest.Method = rmPOST; 
      jsonBody = '{"user":"'+currentUser+'", "date":"'+FormatDateTime('dd.mm.yyyy', Now)+'"}';
      clRest.AddBody(jsonBody, 'application/json');
      clRest.Execute;
      clRest.Free;
      
      if (GlobalCurrentStock > 0)
      {
         GlobalCurrentStock = GlobalCurrentStock - 1;
         clRest = TclRest.Create;
         clRest.Accept = 'application/json';
         clRest.BaseURL = 'https://deneme-a6346-default-rtdb.firebaseio.com/books/'+bookID+'/stock.json';
         clRest.Method = rmPUT;
         clRest.AddBody('"' + IntToStr(GlobalCurrentStock) + '"', 'application/json');
         clRest.Execute;
         clRest.Free;
      }
      
      DetailBorrowBtn.Text = 'Zaten Ödünç Aldınız';
      DetailBorrowBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#4CAF50');
      DetailBorrowBtn.Enabled = False;
      DetailBorrowBtn.SetclProSettings(DetailBorrowBtn.clProSettings);
      
      SendNotification(currentUser, '"' + DetailTitleLbl.Text + '" adlı kitabı ödünç aldınız.');
      ShowMessage(DetailTitleLbl.Text + ' adlı kitabı ödünç aldınız!');
  }
  else if (GlobalActionType == 'ADD_FAV')
  {
      clRest = TclRest.Create;
      clRest.Accept = 'application/json';
      clRest.BaseURL = 'https://deneme-a6346-default-rtdb.firebaseio.com/favorites/'+currentUser+'/'+bookID+'.json';
      clRest.Method = rmPUT;
      jsonBody = '{"added":"true", "addedDate":"' + FormatDateTime('dd.mm.yyyy', Now) + '"}';
      clRest.AddBody(jsonBody, 'application/json');
      clRest.Execute;
      clRest.Free;
      
      clRest = TclRest.Create;
      clRest.Accept = 'application/json';
      clRest.BaseURL = 'https://deneme-a6346-default-rtdb.firebaseio.com/book_favorites/'+bookID+'/'+currentUser+'.json';
      clRest.Method = rmPUT;
      clRest.AddBody('{"user":"'+currentUser+'"}', 'application/json');
      clRest.Execute;
      clRest.Free;
      
      DetailFavBtn.Text = 'Listemde (Çıkar)';
      DetailFavBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FFFFFF');
      DetailFavBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#D81B60');
      DetailFavBtn.clProSettings.BorderColor = clAlphaColor.clHexToColor('#D81B60');
      DetailFavBtn.clProSettings.BorderWidth = 1;
      DetailFavBtn.SetclProSettings(DetailFavBtn.clProSettings);
      
      SendNotification(currentUser, '"' + DetailTitleLbl.Text + '" kitabını okuma listenize eklediniz.');
      ShowMessage('Kitap favorilerinize eklendi!');
  }
  else if (GlobalActionType == 'DEL_FAV')
  {
      clRest = TclRest.Create;
      clRest.BaseURL = 'https://deneme-a6346-default-rtdb.firebaseio.com/favorites/'+currentUser+'/'+bookID+'.json';
      clRest.Method = rmDELETE;
      clRest.Execute;
      clRest.Free;
      
      clRest = TclRest.Create;
      clRest.BaseURL = 'https://deneme-a6346-default-rtdb.firebaseio.com/book_favorites/'+bookID+'/'+currentUser+'.json';
      clRest.Method = rmDELETE;
      clRest.Execute;
      clRest.Free;
      
      DetailFavBtn.Text = 'Listeme Ekle';
      DetailFavBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#36212E');
      DetailFavBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF');
      DetailFavBtn.clProSettings.BorderWidth = 0;
      DetailFavBtn.SetclProSettings(DetailFavBtn.clProSettings);
      ShowMessage('Kitap favorilerinizden çıkarıldı.');
  }
  else if (GlobalActionType == 'SEARCH')
  {
      SearchOpenLibrary;
  }
  
  Form1.FormWaiting.Visible = False;
}

void CloseCustomAlert;
{
  if (AlertBoxPnl <> nil) { AlertBoxPnl.Free; AlertBoxPnl = nil; }
  if (AlertOverlayPnl <> nil) { AlertOverlayPnl.Free; AlertOverlayPnl = nil; }
}

void ShowCustomAlert(AMessage: String);
{
  AlertOverlayPnl = Form1.AddNewProPanel(Form1, 'AlertOverlayPnl'); 
  AlertOverlayPnl.Align = alClient; AlertOverlayPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#000000'); AlertOverlayPnl.Opacity = 0.6;
  AlertOverlayPnl.SetclProSettings(AlertOverlayPnl.clProSettings); AlertOverlayPnl.BringToFront; 

  AlertBoxPnl = Form1.AddNewProPanel(Form1, 'AlertBoxPnl');
  AlertBoxPnl.Align = alCenter; AlertBoxPnl.Width = 280; AlertBoxPnl.Height = 220; AlertBoxPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); 
  AlertBoxPnl.clProSettings.RoundHeight = 15; AlertBoxPnl.clProSettings.RoundWidth = 15; AlertBoxPnl.clProSettings.BorderColor = clAlphaColor.clHexToColor('#36212E'); AlertBoxPnl.clProSettings.BorderWidth = 2;
  AlertBoxPnl.SetclProSettings(AlertBoxPnl.clProSettings); AlertBoxPnl.BringToFront; 

  AlertMsgLbl = Form1.AddNewProLabel(AlertBoxPnl, 'AlertMsgLbl', AMessage);
  AlertMsgLbl.Align = alTop; AlertMsgLbl.Height = 120; AlertMsgLbl.Margins.Top = 20; AlertMsgLbl.Margins.Left = 15; AlertMsgLbl.Margins.Right = 15;
  AlertMsgLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#002B36'); AlertMsgLbl.clProSettings.FontSize = 14; AlertMsgLbl.clProSettings.TextSettings.Font.Style = [fsBold]; AlertMsgLbl.clProSettings.WordWrap = True; 
  AlertMsgLbl.SetclProSettings(AlertMsgLbl.clProSettings);

  AlertOkBtn = Form1.AddNewProButton(AlertBoxPnl, 'AlertOkBtn', 'Tamam');
  AlertOkBtn.Align = alBottom; AlertOkBtn.Height = 40; AlertOkBtn.Margins.Bottom = 15; AlertOkBtn.Margins.Left = 60; AlertOkBtn.Margins.Right = 60;
  AlertOkBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#D29054'); AlertOkBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF'); AlertOkBtn.clProSettings.RoundHeight = 8; AlertOkBtn.clProSettings.RoundWidth = 8;
  AlertOkBtn.SetclProSettings(AlertOkBtn.clProSettings);
  Form1.AddNewEvent(AlertOkBtn, tbeOnClick, 'CloseCustomAlert');
}

void ShowNotifications;
var clRest: TclRest;
{
  if (GlobalNotifCount == 0) ShowCustomAlert('Şu an için yeni bir bildiriminiz bulunmuyor.');
  else
  {
    ShowCustomAlert('BİLDİRİMLERİNİZ:'#13#10 + GlobalNotifMsg);
    if (Clomosy.GlobalVariableString <> '')
    {
      clRest = TclRest.Create; clRest.BaseURL = 'https://deneme-a6346-default-rtdb.firebaseio.com/notifications/' + Clomosy.GlobalVariableString + '.json'; clRest.Method = rmDELETE; clRest.Execute; clRest.Free;
    }
    NotifBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); 
    NotifBtn.SetclProSettings(NotifBtn.clProSettings);
    GlobalNotifCount = 0;
  }
}

void LoadUserProfileInitials;
var
  clRest: TclRest;
  resp, adStr, soyadStr, initials: String;
  pStart, pEnd: Integer;
{
  initials = 'U';
  
  if (Clomosy.GlobalVariableString <> '')
  {
     clRest = TclRest.Create;
     clRest.BaseURL = 'https://deneme-a6346-default-rtdb.firebaseio.com/users/' + Clomosy.GlobalVariableString + '.json';
     clRest.Method = rmGET;
     clRest.Execute;
     resp = clRest.Response;
     clRest.Free;
     
     if ((resp <> 'null') && (resp <> '') && (resp <> '{}'))
     {
        adStr = ''; soyadStr = '';
        
        pStart = Pos('"ad":"', resp);
        if (pStart > 0)
        {
           pStart = pStart + 6;
           pEnd = Pos('"', Copy(resp, pStart, Length(resp)));
           adStr = Copy(resp, pStart, pEnd - 1);
        }
        
        pStart = Pos('"soyad":"', resp);
        if (pStart > 0)
        {
           pStart = pStart + 9;
           pEnd = Pos('"', Copy(resp, pStart, Length(resp)));
           soyadStr = Copy(resp, pStart, pEnd - 1);
        }
        
        initials = '';
        if (adStr <> '') initials = initials + Copy(adStr, 1, 1);
        if (soyadStr <> '') initials = initials + Copy(soyadStr, 1, 1);
        
        if (initials == '') initials = Copy(Clomosy.GlobalVariableString, 1, 2);
     }
  }
  
  if (ProfileBtn <> nil)
  {
     ProfileBtn.Text = AnsiUpperCase(initials);
     ProfileBtn.clProSettings.TextSettings.Font.Style = [fsBold];
     ProfileBtn.clProSettings.FontSize = 15;
     ProfileBtn.SetclProSettings(ProfileBtn.clProSettings);
  }
}

void CreateHeader;
{
  HeaderPnl = Form1.AddNewProPanel(ScaledLayout, 'HeaderPnl');
  HeaderPnl.Align = alTop; HeaderPnl.Height = 70; HeaderPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');
  HeaderPnl.SetclProSettings(HeaderPnl.clProSettings);
  
  LogoLeftPnl = Form1.AddNewProPanel(HeaderPnl, 'LogoLeftPnl');
  LogoLeftPnl.Align = alLeft; LogoLeftPnl.Width = 200; LogoLeftPnl.Margins.Left = 20; LogoLeftPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');
  LogoLeftPnl.SetclProSettings(LogoLeftPnl.clProSettings);

  TitleLbl = Form1.AddNewProLabel(LogoLeftPnl, 'TitleLbl', 'Arşiv');
  TitleLbl.Align = alTop; TitleLbl.Height = 30; TitleLbl.Margins.Top = 15; TitleLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#002B36'); TitleLbl.clProSettings.FontSize = 20; TitleLbl.clProSettings.TextSettings.Font.Style = [fsBold];
  TitleLbl.SetclProSettings(TitleLbl.clProSettings);
  
  SubTitleLbl = Form1.AddNewProLabel(LogoLeftPnl, 'SubTitleLbl', 'KÜTÜPHANESİ');
  SubTitleLbl.Align = alTop; SubTitleLbl.Height = 20; SubTitleLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#888888'); SubTitleLbl.clProSettings.FontSize = 10;
  SubTitleLbl.SetclProSettings(SubTitleLbl.clProSettings);

  ActionRightPnl = Form1.AddNewProPanel(HeaderPnl, 'ActionRightPnl');
  ActionRightPnl.Align = alRight; ActionRightPnl.Width = 100; ActionRightPnl.Margins.Right = 20; ActionRightPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');
  ActionRightPnl.SetclProSettings(ActionRightPnl.clProSettings);

  ProfileBtn = Form1.AddNewProButton(ActionRightPnl, 'ProfileBtn', '');
  ProfileBtn.Align = alRight; ProfileBtn.Width = 40; ProfileBtn.Margins.Top = 15; ProfileBtn.Margins.Bottom = 15; ProfileBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#36212E'); ProfileBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF'); ProfileBtn.clProSettings.RoundHeight = 5; ProfileBtn.clProSettings.RoundWidth = 5;
  ProfileBtn.SetclProSettings(ProfileBtn.clProSettings);

  NotifBtn = Form1.AddNewProImage(ActionRightPnl, 'NotifBtn'); 
  NotifBtn.Align = alRight; NotifBtn.Width = 40; NotifBtn.Margins.Right = 10; NotifBtn.Margins.Top = 15; NotifBtn.Margins.Bottom = 15; NotifBtn.clProSettings.PictureSource = 'https://w7.pngwing.com/pngs/984/292/png-transparent-alarm-bell-essentials-notification-ui-ui-essentials-icon-thumbnail.png'; NotifBtn.clProSettings.PictureAutoFit = True; NotifBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); NotifBtn.clProSettings.RoundHeight = 8; NotifBtn.clProSettings.RoundWidth = 8;
  NotifBtn.SetclProSettings(NotifBtn.clProSettings);
  Form1.AddNewEvent(NotifBtn, tbeOnClick, 'ShowNotifications');
}

void CreateFiltersUI;
{
  FiltersPnl = Form1.AddNewProPanel(ScaledLayout, 'FiltersPnl');
  FiltersPnl.Align = alTop; FiltersPnl.Height = 55; FiltersPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');
  FiltersPnl.SetclProSettings(FiltersPnl.clProSettings);

  FiltersScrollBox = Form1.AddNewHorzScrollBox(FiltersPnl, 'FiltersScrollBox');
  FiltersScrollBox.Align = alClient; FiltersScrollBox.Margins.Left = 10; FiltersScrollBox.Margins.Right = 10; FiltersScrollBox.Margins.Bottom = 5;

  FilterAllBtn = Form1.AddNewProButton(FiltersScrollBox, 'FilterAllBtn', 'Tümü');
  FilterAllBtn.Align = alLeft; FilterAllBtn.Width = 60; FilterAllBtn.Margins.Right = 5; FilterAllBtn.Margins.Top = 5; FilterAllBtn.Margins.Bottom = 5; FilterAllBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#D29054'); FilterAllBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF'); FilterAllBtn.clProSettings.BorderColor = clAlphaColor.clHexToColor('#D29054'); FilterAllBtn.clProSettings.BorderWidth = 1; FilterAllBtn.clProSettings.RoundHeight = 15; FilterAllBtn.clProSettings.RoundWidth = 15; FilterAllBtn.SetclProSettings(FilterAllBtn.clProSettings); Form1.AddNewEvent(FilterAllBtn, tbeOnClick, 'FilterClick');

  FilterRomanBtn = Form1.AddNewProButton(FiltersScrollBox, 'FilterRomanBtn', 'Roman');
  FilterRomanBtn.Align = alLeft; FilterRomanBtn.Width = 70; FilterRomanBtn.Margins.Right = 5; FilterRomanBtn.Margins.Top = 5; FilterRomanBtn.Margins.Bottom = 5; FilterRomanBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterRomanBtn.clProSettings.BorderColor = clAlphaColor.clHexToColor('#D29054'); FilterRomanBtn.clProSettings.BorderWidth = 1; FilterRomanBtn.clProSettings.RoundHeight = 15; FilterRomanBtn.clProSettings.RoundWidth = 15; FilterRomanBtn.SetclProSettings(FilterRomanBtn.clProSettings); Form1.AddNewEvent(FilterRomanBtn, tbeOnClick, 'FilterClick');

  FilterBilimBtn = Form1.AddNewProButton(FiltersScrollBox, 'FilterBilimBtn', 'Bilim Kurgu');
  FilterBilimBtn.Align = alLeft; FilterBilimBtn.Width = 90; FilterBilimBtn.Margins.Right = 5; FilterBilimBtn.Margins.Top = 5; FilterBilimBtn.Margins.Bottom = 5; FilterBilimBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterBilimBtn.clProSettings.BorderColor = clAlphaColor.clHexToColor('#D29054'); FilterBilimBtn.clProSettings.BorderWidth = 1; FilterBilimBtn.clProSettings.RoundHeight = 15; FilterBilimBtn.clProSettings.RoundWidth = 15; FilterBilimBtn.SetclProSettings(FilterBilimBtn.clProSettings); Form1.AddNewEvent(FilterBilimBtn, tbeOnClick, 'FilterClick');

  FilterTarihBtn = Form1.AddNewProButton(FiltersScrollBox, 'FilterTarihBtn', 'Tarih');
  FilterTarihBtn.Align = alLeft; FilterTarihBtn.Width = 70; FilterTarihBtn.Margins.Right = 5; FilterTarihBtn.Margins.Top = 5; FilterTarihBtn.Margins.Bottom = 5; FilterTarihBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterTarihBtn.clProSettings.BorderColor = clAlphaColor.clHexToColor('#D29054'); FilterTarihBtn.clProSettings.BorderWidth = 1; FilterTarihBtn.clProSettings.RoundHeight = 15; FilterTarihBtn.clProSettings.RoundWidth = 15; FilterTarihBtn.SetclProSettings(FilterTarihBtn.clProSettings); Form1.AddNewEvent(FilterTarihBtn, tbeOnClick, 'FilterClick');

  FilterFelsefeBtn = Form1.AddNewProButton(FiltersScrollBox, 'FilterFelsefeBtn', 'Felsefe');
  FilterFelsefeBtn.Align = alLeft; FilterFelsefeBtn.Width = 70; FilterFelsefeBtn.Margins.Right = 5; FilterFelsefeBtn.Margins.Top = 5; FilterFelsefeBtn.Margins.Bottom = 5; FilterFelsefeBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterFelsefeBtn.clProSettings.BorderColor = clAlphaColor.clHexToColor('#D29054'); FilterFelsefeBtn.clProSettings.BorderWidth = 1; FilterFelsefeBtn.clProSettings.RoundHeight = 15; FilterFelsefeBtn.clProSettings.RoundWidth = 15; FilterFelsefeBtn.SetclProSettings(FilterFelsefeBtn.clProSettings); Form1.AddNewEvent(FilterFelsefeBtn, tbeOnClick, 'FilterClick');

  FilterCocukBtn = Form1.AddNewProButton(FiltersScrollBox, 'FilterCocukBtn', 'Çocuk');
  FilterCocukBtn.Align = alLeft; FilterCocukBtn.Width = 70; FilterCocukBtn.Margins.Right = 5; FilterCocukBtn.Margins.Top = 5; FilterCocukBtn.Margins.Bottom = 5; FilterCocukBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterCocukBtn.clProSettings.BorderColor = clAlphaColor.clHexToColor('#D29054'); FilterCocukBtn.clProSettings.BorderWidth = 1; FilterCocukBtn.clProSettings.RoundHeight = 15; FilterCocukBtn.clProSettings.RoundWidth = 15; FilterCocukBtn.SetclProSettings(FilterCocukBtn.clProSettings); Form1.AddNewEvent(FilterCocukBtn, tbeOnClick, 'FilterClick');

  FilterGelisimBtn = Form1.AddNewProButton(FiltersScrollBox, 'FilterGelisimBtn', 'Kişisel Gelişim');
  FilterGelisimBtn.Align = alLeft; FilterGelisimBtn.Width = 100; FilterGelisimBtn.Margins.Right = 5; FilterGelisimBtn.Margins.Top = 5; FilterGelisimBtn.Margins.Bottom = 5; FilterGelisimBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterGelisimBtn.clProSettings.BorderColor = clAlphaColor.clHexToColor('#D29054'); FilterGelisimBtn.clProSettings.BorderWidth = 1; FilterGelisimBtn.clProSettings.RoundHeight = 15; FilterGelisimBtn.clProSettings.RoundWidth = 15; FilterGelisimBtn.SetclProSettings(FilterGelisimBtn.clProSettings); Form1.AddNewEvent(FilterGelisimBtn, tbeOnClick, 'FilterClick');
}

void CreateDetailUI;
{
  DetailOverlayPnl = Form1.AddNewProPanel(Form1, 'DetailOverlayPnl');
  DetailOverlayPnl.Align = alClient; DetailOverlayPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#000000'); DetailOverlayPnl.Opacity = 0.6; DetailOverlayPnl.Visible = False; Form1.AddNewEvent(DetailOverlayPnl, tbeOnClick, 'CloseDetail');

  DetailContentPnl = Form1.AddNewProPanel(Form1, 'DetailContentPnl');
  DetailContentPnl.Align = alCenter; DetailContentPnl.Width = 320; DetailContentPnl.Height = 550; DetailContentPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); DetailContentPnl.clProSettings.BorderColor = clAlphaColor.clHexToColor('#36212E'); DetailContentPnl.clProSettings.BorderWidth = 2; DetailContentPnl.clProSettings.RoundHeight = 10; DetailContentPnl.clProSettings.RoundWidth = 10; DetailContentPnl.SetclProSettings(DetailContentPnl.clProSettings); DetailContentPnl.Visible = False;

  DetailHeaderPnl = Form1.AddNewProPanel(DetailContentPnl, 'DetailHeaderPnl');
  DetailHeaderPnl.Align = alTop; DetailHeaderPnl.Height = 180; DetailHeaderPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#2C3E50'); DetailHeaderPnl.clProSettings.BorderColor = clAlphaColor.clHexToColor('#36212E'); DetailHeaderPnl.clProSettings.BorderWidth = 2; DetailHeaderPnl.clProSettings.RoundHeight = 10; DetailHeaderPnl.clProSettings.RoundWidth = 10; DetailHeaderPnl.SetclProSettings(DetailHeaderPnl.clProSettings);

  DetailTitleLbl = Form1.AddNewProLabel(DetailContentPnl, 'DetailTitleLbl', '-');
  DetailTitleLbl.Align = alTop; DetailTitleLbl.Height = 35; DetailTitleLbl.Margins.Top = 15; DetailTitleLbl.Margins.Left = 15; DetailTitleLbl.Margins.Right = 15; DetailTitleLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000'); DetailTitleLbl.clProSettings.FontSize = 20; DetailTitleLbl.clProSettings.TextSettings.Font.Style = [fsBold]; DetailTitleLbl.SetclProSettings(DetailTitleLbl.clProSettings);

  DetailAuthorLbl = Form1.AddNewProLabel(DetailContentPnl, 'DetailAuthorLbl', '-');
  DetailAuthorLbl.Align = alTop; DetailAuthorLbl.Height = 25; DetailAuthorLbl.Margins.Left = 15; DetailAuthorLbl.Margins.Right = 15; DetailAuthorLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#666666'); DetailAuthorLbl.clProSettings.FontSize = 14; DetailAuthorLbl.SetclProSettings(DetailAuthorLbl.clProSettings);

  DetailScrollBox = Form1.AddNewVertScrollBox(DetailContentPnl, 'DetailScrollBox');
  DetailScrollBox.Align = alClient; DetailScrollBox.Margins.Top = 15; DetailScrollBox.Margins.Left = 15; DetailScrollBox.Margins.Right = 15; DetailScrollBox.Margins.Bottom = 15;

  DetailDescLbl = Form1.AddNewProLabel(DetailScrollBox, 'DetailDescLbl', '');
  DetailDescLbl.Align = alTop; DetailDescLbl.Margins.Bottom = 20; DetailDescLbl.Width = 340; DetailDescLbl.Height = 100; DetailDescLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#444444'); DetailDescLbl.clProSettings.WordWrap = True; DetailDescLbl.clProSettings.AutoSize = True; DetailDescLbl.SetclProSettings(DetailDescLbl.clProSettings);

  DetailFooterPnl = Form1.AddNewProPanel(DetailContentPnl, 'DetailFooterPnl');
  DetailFooterPnl.Align = alBottom; DetailFooterPnl.Height = 160; 
  
  DetailBorrowBtn = Form1.AddNewProButton(DetailFooterPnl, 'DetailBorrowBtn', 'Ödünç Al');
  DetailBorrowBtn.Align = alTop; DetailBorrowBtn.Height = 40; DetailBorrowBtn.Margins.Left = 20; DetailBorrowBtn.Margins.Right = 20; DetailBorrowBtn.Margins.Top = 10; DetailBorrowBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#36212E'); DetailBorrowBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF'); DetailBorrowBtn.clProSettings.RoundHeight = 5; DetailBorrowBtn.clProSettings.RoundWidth = 5; DetailBorrowBtn.SetclProSettings(DetailBorrowBtn.clProSettings); Form1.AddNewEvent(DetailBorrowBtn, tbeOnClick, 'BorrowBookClick');
  
  DetailFavBtn = Form1.AddNewProButton(DetailFooterPnl, 'DetailFavBtn', 'Listeme Ekle');
  DetailFavBtn.Align = alTop; DetailFavBtn.Height = 40; DetailFavBtn.Margins.Left = 20; DetailFavBtn.Margins.Right = 20; DetailFavBtn.Margins.Top = 10; DetailFavBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#36212E'); DetailFavBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF'); DetailFavBtn.clProSettings.RoundHeight = 5; DetailFavBtn.clProSettings.RoundWidth = 5; DetailFavBtn.SetclProSettings(DetailFavBtn.clProSettings); Form1.AddNewEvent(DetailFavBtn, tbeOnClick, 'FavBookClick');
  
  DetailCloseBtn = Form1.AddNewProButton(DetailFooterPnl, 'DetailCloseBtn', 'Kapat');
  DetailCloseBtn.Align = alTop; DetailCloseBtn.Height = 40; DetailCloseBtn.Margins.Left = 20; DetailCloseBtn.Margins.Right = 20; DetailCloseBtn.Margins.Top = 10; DetailCloseBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F9F7F4'); DetailCloseBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#002B36'); DetailCloseBtn.clProSettings.BorderColor = clAlphaColor.clHexToColor('#DDDDDD'); DetailCloseBtn.clProSettings.BorderWidth = 1; DetailCloseBtn.clProSettings.RoundHeight = 5; DetailCloseBtn.clProSettings.RoundWidth = 5; DetailCloseBtn.SetclProSettings(DetailCloseBtn.clProSettings); Form1.AddNewEvent(DetailCloseBtn, tbeOnClick, 'CloseDetail');
}

void SetupUI;
{
  CreateHeader;
  LoadUserProfileInitials;
  CreateDetailUI;

  PageTitlePnl = Form1.AddNewProPanel(ScaledLayout, 'PageTitlePnl');
  PageTitlePnl.Align = alTop; PageTitlePnl.Height = 50; PageTitlePnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); PageTitlePnl.SetclProSettings(PageTitlePnl.clProSettings);

  PageTitleLbl = Form1.AddNewProLabel(PageTitlePnl, 'PageTitleLbl', 'Katalog');
  PageTitleLbl.Align = alLeft; PageTitleLbl.Margins.Left = 20; PageTitleLbl.Width = 200; PageTitleLbl.clProSettings.FontSize = 22; PageTitleLbl.SetclProSettings(PageTitleLbl.clProSettings);

  ViewToggleBtn = Form1.AddNewProButton(PageTitlePnl, 'ViewToggleBtn', '');
  ViewToggleBtn.Align = alRight; ViewToggleBtn.Width = 60; ViewToggleBtn.Margins.Right = 20; ViewToggleBtn.Margins.Top = 10; ViewToggleBtn.Margins.Bottom = 10; ViewToggleBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FFFFFF'); ViewToggleBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#F0EBE1') ViewToggleBtn.clProSettings.RoundHeight = 5; ViewToggleBtn.clProSettings.RoundWidth = 5; ViewToggleBtn.clProSettings.FontSize = 10; ViewToggleBtn.SetclProSettings(ViewToggleBtn.clProSettings); Form1.AddNewEvent(ViewToggleBtn, tbeOnClick, 'ToggleViewMode');
  ViewToggleBtn.enabled = false;
  
  SearchWrapPnl = Form1.AddNewProPanel(ScaledLayout, 'SearchWrapPnl');
  SearchWrapPnl.Align = alTop; SearchWrapPnl.Height = 55; SearchWrapPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); SearchWrapPnl.SetclProSettings(SearchWrapPnl.clProSettings);

  SearchPnl = Form1.AddNewProPanel(SearchWrapPnl, 'SearchPnl');
  SearchPnl.Align = alClient; SearchPnl.Margins.Left = 15; SearchPnl.Margins.Right = 15; SearchPnl.Margins.Bottom = 10; SearchPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FFFFFF'); SearchPnl.clProSettings.BorderColor = clAlphaColor.clHexToColor('#E2DED5'); SearchPnl.clProSettings.BorderWidth = 1; SearchPnl.clProSettings.RoundHeight = 5; SearchPnl.clProSettings.RoundWidth = 5; SearchPnl.SetclProSettings(SearchPnl.clProSettings);

  SearchEdt = Form1.AddNewProEdit(SearchPnl, 'SearchEdt','API veya Arşivde Ara...');
  SearchEdt.Align = alClient; SearchEdt.Margins.Left = 10; SearchEdt.Margins.Right = 10; SearchEdt.Margins.Top = 5; SearchEdt.Margins.Bottom = 5; SearchEdt.SetclProSettings(SearchEdt.clProSettings);

  SearchBtn = Form1.AddNewProButton(SearchPnl, 'SearchBtn', 'Ara');
  SearchBtn.Align = alRight; SearchBtn.Width = 60; SearchBtn.Margins.Right = 5; SearchBtn.Margins.Top = 5; SearchBtn.Margins.Bottom = 5; SearchBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#D29054'); SearchBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF'); SearchBtn.clProSettings.RoundHeight = 5; SearchBtn.clProSettings.RoundWidth = 5; SearchBtn.SetclProSettings(SearchBtn.clProSettings); Form1.AddNewEvent(SearchBtn, tbeOnClick, 'DoSearchBooks');

  CreateFiltersUI;

  CountPnl = Form1.AddNewProPanel(ScaledLayout, 'CountPnl');
  CountPnl.Align = alTop; CountPnl.Height = 30; CountPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); CountPnl.SetclProSettings(CountPnl.clProSettings);
  
  CountLbl = Form1.AddNewProLabel(CountPnl, 'CountLbl', 'Yükleniyor...');
  CountLbl.Align = alLeft; CountLbl.Margins.Left = 20; CountLbl.Width = 100; CountLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#888888'); CountLbl.SetclProSettings(CountLbl.clProSettings);

  DividerPnl = Form1.AddNewProPanel(ScaledLayout, 'DividerPnl');
  DividerPnl.Align = alTop; DividerPnl.Height = 2; DividerPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#E2DED5'); DividerPnl.SetclProSettings(DividerPnl.clProSettings);

  BottomMenuPnl = Form1.AddNewProPanel(ScaledLayout, 'BottomMenuPnl');
  BottomMenuPnl.Align = alBottom; BottomMenuPnl.Height = 60; BottomMenuPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); BottomMenuPnl.clProSettings.BorderColor = clAlphaColor.clHexToColor('#E2DED5'); BottomMenuPnl.clProSettings.BorderWidth = 1; BottomMenuPnl.SetclProSettings(BottomMenuPnl.clProSettings);

  CatalogBtn = Form1.AddNewProButton(BottomMenuPnl, 'CatalogBtn', 'Katalog');
  CatalogBtn.Align = alLeft; CatalogBtn.Width = 70; CatalogBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#D29054'); CatalogBtn.clProSettings.FontSize = 11; CatalogBtn.SetclProSettings(CatalogBtn.clProSettings);
  
  BorrowedBtn = Form1.AddNewProButton(BottomMenuPnl, 'BorrowedBtn', 'Ödünç');
  BorrowedBtn.Align = alLeft; BorrowedBtn.Width = 70; BorrowedBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#888888'); BorrowedBtn.clProSettings.FontSize = 11; BorrowedBtn.SetclProSettings(BorrowedBtn.clProSettings); Form1.AddNewEvent(BorrowedBtn, tbeOnClick, 'GoToBorrowed');

  QrBtn = Form1.AddNewProButton(BottomMenuPnl, 'QrBtn', 'QR Tara');
  QrBtn.Align = alLeft; QrBtn.Width = 70; QrBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#888888'); QrBtn.clProSettings.FontSize = 11; QrBtn.SetclProSettings(QrBtn.clProSettings); Form1.AddNewEvent(QrBtn, tbeOnClick, 'GoToQR');

  MyListBtn = Form1.AddNewProButton(BottomMenuPnl, 'MyListBtn', 'Listem');
  MyListBtn.Align = alLeft; MyListBtn.Width = 70; MyListBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#888888'); MyListBtn.clProSettings.FontSize = 11; MyListBtn.SetclProSettings(MyListBtn.clProSettings); Form1.AddNewEvent(MyListBtn, tbeOnClick, 'GoToListe');

  SettingsBtn = Form1.AddNewProButton(BottomMenuPnl, 'SettingsBtn', 'Ayarlar');
  SettingsBtn.Align = alLeft; SettingsBtn.Width = 70; SettingsBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#888888'); SettingsBtn.clProSettings.FontSize = 11; SettingsBtn.SetclProSettings(SettingsBtn.clProSettings); Form1.AddNewEvent(SettingsBtn, tbeOnClick, 'GoToSettings');

  GlobalActionTimer = Form1.AddNewTimer(Form1, 'GlobalActionTimer', 100);
  Form1.AddNewEvent(GlobalActionTimer, tbeOnTimer, 'OnGlobalActionTimer');
  GlobalActionTimer.Enabled = False;
  
  OpenDetailTimer = Form1.AddNewTimer(Form1, 'OpenDetailTimer', 100);
  Form1.AddNewEvent(OpenDetailTimer, tbeOnTimer, 'OnOpenDetailTimer');
  OpenDetailTimer.Enabled = False;
}

{
  Form1 = TCLForm.Create(Self);
  ScaledLayout = Form1.AddNewScaledLayout(Form1, 'ScaledLayout');
  ScaledLayout.Align = alClient;
  ScaledLayout.OriginalHeight = 750;
  ScaledLayout.OriginalWidth = 350;

  SetupUI;
  GlobalFilterGenre = 'Tümü';
  FetchBooksFromFirebase;
  
  Form1.FormWaiting.Visible = False;
  Form1.BtnFormMenu.Visible = False;
  Form1.BtnGoBack.Visible = False;
  Form1.LytTopBar.Visible = False;
  Form1.Run;
}
https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon="{"version":"2024.11.0","token":"439455f3e46c40b98dbd42a2f1a954d8","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}" crossorigin="anonymous">
Yukarı Dön
kayra12 Açılır Kutu İzle
Deneyimli Üye
Deneyimli Üye


Kayıt Tarihi: 23 Aralık 2024
Durum: Aktif
Puanlar: 54
Mesaj Seçenekleri Mesaj Seçenekleri   Teşekkürler (0) Teşekkürler(0)   Alıntı kayra12 Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Gönderim Zamanı: 2 Dakika Önce Saat 13:07
Merhaba ibrahim projen bulut tabanlı olduğu için ve Firebase bağlı olduğu için şunda daha fazla hızlandırma olmuyor bilginizehttps://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon="{"version":"2024.11.0","token":"439455f3e46c40b98dbd42a2f1a954d8","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}" crossorigin="anonymous">
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,059 Saniyede Yüklendi.