<?xml version="1.0" encoding="iso-8859-9" ?>
<?xml-stylesheet type="text/xsl" href="RSS_xslt_style.asp" version="1.0" ?>
<rss version="2.0" xmlns:WebWizForums="https://syndication.webwiz.net/rss_namespace/">
 <channel>
  <title>Clomosy | Forum : Bunun nasıl daha hızlı çalışmasını sağlayabiliriz?</title>
  <link>https://forum.clomosy.com.tr/</link>
  <description><![CDATA[XML içerik linki; Clomosy | Forum : Genel &#304;&#351;lemler : Bunun nasıl daha hızlı çalışmasını sağlayabiliriz?]]></description>
  <copyright>Copyright (c) 2006-2013 Web Wiz Forums - All Rights Reserved.</copyright>
  <pubDate>Tue, 07 Jul 2026 14:44:53 +0000</pubDate>
  <lastBuildDate>Tue, 07 Jul 2026 13:54:41 +0000</lastBuildDate>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Web Wiz Forums 12.07</generator>
  <ttl>30</ttl>
  <WebWizForums:feedURL>https://forum.clomosy.com.tr/RSS_post_feed.asp?TID=1593</WebWizForums:feedURL>
  <image>
   <title><![CDATA[Clomosy | Forum]]></title>
   <url>https://forum.clomosy.com.tr/forum_images/logo.png</url>
   <link>https://forum.clomosy.com.tr/</link>
  </image>
  <item>
   <title><![CDATA[Bunun nasıl daha hızlı çalışmasını sağlayabiliriz? : Sorunum &#231;&#246;z&#252;lm&#252;&#351;t&#252;r uygulama &#351;uan...]]></title>
   <link>https://forum.clomosy.com.tr/forum_posts.asp?TID=1593&amp;PID=3691#3691</link>
   <description>
    <![CDATA[<strong>Yazar:</strong> <a href="https://forum.clomosy.com.tr/member_profile.asp?PF=468">ibrahimBsr</a><br /><strong>Konu:</strong> 1593<br /><strong>Gönderim Zamanı:</strong> 07&nbsp;Temmuz&nbsp;2026 Saat 13:54<br /><br />Sorunum çözülmüştür uygulama şuan istediğim hızda çalışıyor teşekkür ederim<a href="https://static.cloudflareinsights.com/beac&#111;n.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" target="_blank" rel="nofollow">https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496"</a> integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon="{&quot;version&quot;:&quot;2024.11.0&quot;,&quot;token&quot;:&quot;439455f3e46c40b98dbd42a2f1a954d8&quot;,&quot;r&quot;:1,&quot;server_timing&quot;:{&quot;name&quot;:{&quot;cfCacheStatus&quot;:true,&quot;cfEdge&quot;:true,&quot;cfExtPri&quot;:true,&quot;cfL4&quot;:true,&quot;cfOrigin&quot;:true,&quot;cfSpeedBrain&quot;:true},&quot;location_startswith&quot;:null}}" crossorigin="anonymous">]]>
   </description>
   <pubDate>Tue, 07 Jul 2026 13:54:41 +0000</pubDate>
   <guid isPermaLink="true">https://forum.clomosy.com.tr/forum_posts.asp?TID=1593&amp;PID=3691#3691</guid>
  </item> 
  <item>
   <title><![CDATA[Bunun nasıl daha hızlı çalışmasını sağlayabiliriz? : Tekrar Merhaba &#304;BrahimAnakodun...]]></title>
   <link>https://forum.clomosy.com.tr/forum_posts.asp?TID=1593&amp;PID=3690#3690</link>
   <description>
    <![CDATA[<strong>Yazar:</strong> <a href="https://forum.clomosy.com.tr/member_profile.asp?PF=257">Emr.Erkmn</a><br /><strong>Konu:</strong> 1593<br /><strong>Gönderim Zamanı:</strong> 07&nbsp;Temmuz&nbsp;2026 Saat 13:42<br /><br />Tekrar Merhaba İBrahim&nbsp;<br><br>Anakodun da yer alan kodlar için<br><br>her yeni bir kullanıcı kayıt olurken e-posta,tc gibi alanları daha önce kullanılıp kullanılmadığını kontrol etmek için firebase de kii tüm kullanıcıları ve tüm yöneticileri tamamen cihaza indiriyorsun bu inen veri yığını için de pos araması yapıyorsun bu yaptığın durum hem hız performansını hem de güvenlik açığı oluşturuyor.<br><br>db den 100 veya üzeri kullanıcı olduğunda bu sorgu da mb veri indirmeye çalışıyor bu hem hafıza hem de yüksek internet demek<br>tüm db nin telefona indirilmesi art niyetli kullanıcılar için özel alanların görebilmesi anlamına gelir<br><br><div>void ExecuteLogin;</div><div>var</div><div>&nbsp; clRest: TclRest;</div><div>&nbsp; EmailKey, responseStr: String;</div><div>&nbsp; isAdmin: Boolean;</div><div>{</div><div>&nbsp; EmailKey = EmailEdt.Text;</div><div>&nbsp;&nbsp;</div><div>&nbsp; // FİREBASE UYUMLULUĞU: E-postadaki noktaları alt çizgiye çevir</div><div>&nbsp; while (Pos('.', EmailKey) &gt; 0)</div><div>&nbsp; {</div><div>&nbsp; &nbsp; EmailKey = Copy(EmailKey, 1, Pos('.', EmailKey) - 1) + '_' + Copy(EmailKey, Pos('.', EmailKey) + 1, Length(EmailKey));</div><div>&nbsp; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; isAdmin = False;</div><div>&nbsp; responseStr = '';</div><div>&nbsp;&nbsp;</div><div>&nbsp; clRest = TclRest.Create;</div><div>&nbsp; try</div><div>&nbsp; &nbsp; clRest.Accept = 'application/json';</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; // 1. AŞAMA: Sadece bu e-posta adına sahip "Kullanıcı" verisini çek</div><div>&nbsp; &nbsp; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/users/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/users/</a>'+EmailKey+'.json';</div><div>&nbsp; &nbsp; clRest.Method = rmGET;</div><div>&nbsp; &nbsp; clRest.Execute;</div><div>&nbsp; &nbsp; responseStr = clRest.Response;</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; // 2. AŞAMA: Eğer kullanıcı bulunamadıysa, "Yönetici" tablosuna tekil istek at</div><div>&nbsp; &nbsp; if ((responseStr == 'null') || (responseStr == ''))</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp;clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/admins/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/admins/</a>'+EmailKey+'.json';</div><div>&nbsp; &nbsp; &nbsp; &nbsp;clRest.Execute;</div><div>&nbsp; &nbsp; &nbsp; &nbsp;responseStr = clRest.Response;</div><div>&nbsp; &nbsp; &nbsp; &nbsp;if ((responseStr &lt;&gt; 'null') &amp;&amp; (responseStr &lt;&gt; ''))</div><div>&nbsp; &nbsp; &nbsp; &nbsp;{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isAdmin = True;</div><div>&nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp; &nbsp; }</div><div>&nbsp; finally</div><div>&nbsp; &nbsp; clRest.Free; // Bağlantıyı güvenle kapat</div><div>&nbsp; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; MainForm.FormWaiting.Visible = False;&nbsp;</div><div>&nbsp;&nbsp;</div><div>&nbsp; if ((responseStr == 'null') || (responseStr == ''))</div><div>&nbsp; {</div><div>&nbsp; &nbsp; ShowMessage('Kayıtlı e-posta bulunamadı. Lütfen kayıt olun.');</div><div>&nbsp; }</div><div>&nbsp; else</div><div>&nbsp; {</div><div>&nbsp; &nbsp; if (Pos('"sifre":"'+PasswordEdt.Text+'"', responseStr) &gt; 0)</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; Clomosy.GlobalVariableString = EmailKey;</div><div>&nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; // Son giriş tarihini tekil olarak güncelle (Tüm veritabanı etkilenmez)</div><div>&nbsp; &nbsp; &nbsp; clRest = TclRest.Create;</div><div>&nbsp; &nbsp; &nbsp; try</div><div>&nbsp; &nbsp; &nbsp; &nbsp; if (isAdmin)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/admins/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/admins/</a>'+EmailKey+'/son_giris.json';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; else</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/users/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/users/</a>'+EmailKey+'/son_giris.json';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; clRest.Method = rmPUT;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; clRest.Accept = 'application/json';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; clRest.AddBody('"' + FormatDateTime('dd.mm.yyyy hh:nn:ss', Now) + '"', 'application/json');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; clRest.Execute;</div><div>&nbsp; &nbsp; &nbsp; finally</div><div>&nbsp; &nbsp; &nbsp; &nbsp; clRest.Free;</div><div>&nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; if (isAdmin)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Clomosy.RunUnit('pGenel');&nbsp;</div><div>&nbsp; &nbsp; &nbsp; else</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Clomosy.RunUnit('uKatalog');&nbsp;</div><div>&nbsp; &nbsp; }</div><div>&nbsp; &nbsp; else</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; ShowMessage('Hatalı şifre girdiniz.');</div><div>&nbsp; &nbsp; }</div><div>&nbsp; }</div><div>}</div><div><br></div><div><br></div><div>void ExecuteRegister;</div><div>var</div><div>&nbsp; clRest: TclRest;</div><div>&nbsp; EmailKey, jsonBody, tcVal, phoneVal, emailVal: String;</div><div>&nbsp; isOk, isAdminReg: Boolean;</div><div>&nbsp; emailUserExists, emailAdminExists, tcUserExists, tcAdminExists, phoneUserExists, phoneAdminExists: Boolean;</div><div>{</div><div>&nbsp; tcVal = RegTCEdt.Text;</div><div>&nbsp; phoneVal = RegPhoneEdt.Text;</div><div>&nbsp; emailVal = RegEmailEdt.Text;</div><div>&nbsp; isOk = True;</div><div>&nbsp; EmailKey = emailVal;&nbsp;</div><div>&nbsp; while (Pos('.', EmailKey) &gt; 0)</div><div>&nbsp; {</div><div>&nbsp; &nbsp; EmailKey = Copy(EmailKey, 1, Pos('.', EmailKey) - 1) + '_' + Copy(EmailKey, Pos('.', EmailKey) + 1, Length(EmailKey));</div><div>&nbsp; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; clRest = TclRest.Create;</div><div>&nbsp; try</div><div>&nbsp; &nbsp; clRest.Accept = 'application/json';</div><div>&nbsp; &nbsp; clRest.Method = rmGET;</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; // Normal kullanıcı e-posta kontrolü</div><div>&nbsp; &nbsp; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/users/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/users/</a>' + EmailKey + '.json';</div><div>&nbsp; &nbsp; clRest.Execute;</div><div>&nbsp; &nbsp; emailUserExists = (clRest.Response &lt;&gt; 'null') &amp;&amp; (clRest.Response &lt;&gt; '');</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; // Yönetici e-posta kontrolü</div><div>&nbsp; &nbsp; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/admins/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/admins/</a>' + EmailKey + '.json';</div><div>&nbsp; &nbsp; clRest.Execute;</div><div>&nbsp; &nbsp; emailAdminExists = (clRest.Response &lt;&gt; 'null') &amp;&amp; (clRest.Response &lt;&gt; '');</div><div>&nbsp; finally</div><div>&nbsp; &nbsp; clRest.Free;</div><div>&nbsp; }</div><div>&nbsp; if (emailUserExists || emailAdminExists)</div><div>&nbsp; {</div><div>&nbsp; &nbsp; ShowMessage('Bu e-posta adresi zaten sistemde kayıtlı!');</div><div>&nbsp; &nbsp; isOk = False;</div><div>&nbsp; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; if (isOk)</div><div>&nbsp; {</div><div>&nbsp; &nbsp; clRest = TclRest.Create;</div><div>&nbsp; &nbsp; try</div><div>&nbsp; &nbsp; &nbsp; clRest.Accept = 'application/json';</div><div>&nbsp; &nbsp; &nbsp; clRest.Method = rmGET;</div><div>&nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; // Kullanıcılar arasında TC sorgula</div><div>&nbsp; &nbsp; &nbsp; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/users.js&#111;n?orderBy=" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/users.json?orderBy="</a>tc"&amp;equalTo="' + tcVal + '"';</div><div>&nbsp; &nbsp; &nbsp; clRest.Execute;</div><div>&nbsp; &nbsp; &nbsp; tcUserExists = (clRest.Response &lt;&gt; 'null') &amp;&amp; (clRest.Response &lt;&gt; '{}') &amp;&amp; (clRest.Response &lt;&gt; '');</div><div>&nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; // Yöneticiler arasında TC sorgula</div><div>&nbsp; &nbsp; &nbsp; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/admins.js&#111;n?orderBy=" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/admins.json?orderBy="</a>tc"&amp;equalTo="' + tcVal + '"';</div><div>&nbsp; &nbsp; &nbsp; clRest.Execute;</div><div>&nbsp; &nbsp; &nbsp; tcAdminExists = (clRest.Response &lt;&gt; 'null') &amp;&amp; (clRest.Response &lt;&gt; '{}') &amp;&amp; (clRest.Response &lt;&gt; '');</div><div>&nbsp; &nbsp; finally</div><div>&nbsp; &nbsp; &nbsp; clRest.Free;</div><div>&nbsp; &nbsp; }</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; if (tcUserExists || tcAdminExists)</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; ShowMessage('Bu TC Kimlik Numarası sistemde zaten kayıtlı!');</div><div>&nbsp; &nbsp; &nbsp; isOk = False;</div><div>&nbsp; &nbsp; }</div><div>&nbsp; }</div><div>&nbsp; if (isOk)</div><div>&nbsp; {</div><div>&nbsp; &nbsp; clRest = TclRest.Create;</div><div>&nbsp; &nbsp; try</div><div>&nbsp; &nbsp; &nbsp; clRest.Accept = 'application/json';</div><div>&nbsp; &nbsp; &nbsp; clRest.Method = rmGET;</div><div>&nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; // Kullanıcılar arasında Telefon sorgula</div><div>&nbsp; &nbsp; &nbsp; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/users.js&#111;n?orderBy=" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/users.json?orderBy="</a>telefon"&amp;equalTo="' + phoneVal + '"';</div><div>&nbsp; &nbsp; &nbsp; clRest.Execute;</div><div>&nbsp; &nbsp; &nbsp; phoneUserExists = (clRest.Response &lt;&gt; 'null') &amp;&amp; (clRest.Response &lt;&gt; '{}') &amp;&amp; (clRest.Response &lt;&gt; '');</div><div>&nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; // Yöneticiler arasında Telefon sorgula</div><div>&nbsp; &nbsp; &nbsp; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/admins.js&#111;n?orderBy=" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/admins.json?orderBy="</a>telefon"&amp;equalTo="' + phoneVal + '"';</div><div>&nbsp; &nbsp; &nbsp; clRest.Execute;</div><div>&nbsp; &nbsp; &nbsp; phoneAdminExists = (clRest.Response &lt;&gt; 'null') &amp;&amp; (clRest.Response &lt;&gt; '{}') &amp;&amp; (clRest.Response &lt;&gt; '');</div><div>&nbsp; &nbsp; finally</div><div>&nbsp; &nbsp; &nbsp; clRest.Free;</div><div>&nbsp; &nbsp; }</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; if (phoneUserExists || phoneAdminExists)</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; ShowMessage('Bu telefon numarası sistemde zaten kayıtlı!');</div><div>&nbsp; &nbsp; &nbsp; isOk = False;</div><div>&nbsp; &nbsp; }</div><div>&nbsp; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; if (isOk)</div><div>&nbsp; {</div><div>&nbsp; &nbsp; isAdminReg = False;</div><div>&nbsp; &nbsp; if (RegAdminCodeEdt.Text == '1453')&nbsp;</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp;isAdminReg = True;</div><div>&nbsp; &nbsp; }</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; jsonBody = '{"ad":"'+RegAdEdt.Text+'", "soyad":"'+RegSoyadEdt.Text+'", "yas":"'+RegAgeCombo.Text+'", "tc":"'+tcVal+'", "telefon":"'+phoneVal+'", "adres":"'+RegAddressMemo.Text+'", "sifre":"'+RegPasswordEdt.Text+'", "kayit_tarihi":"'+FormatDateTime('dd.mm.yyyy hh:nn:ss', Now)+'"}';</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; clRest = TclRest.Create;</div><div>&nbsp; &nbsp; try</div><div>&nbsp; &nbsp; &nbsp; if (isAdminReg)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/admins/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/admins/</a>'+EmailKey+'.json';</div><div>&nbsp; &nbsp; &nbsp; else</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/users/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/users/</a>'+EmailKey+'.json';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; clRest.Method = rmPUT;</div><div>&nbsp; &nbsp; &nbsp; clRest.Accept = 'application/json';</div><div>&nbsp; &nbsp; &nbsp; clRest.AddBody(jsonBody, 'application/json');</div><div>&nbsp; &nbsp; &nbsp; clRest.Execute;</div><div>&nbsp; &nbsp; finally</div><div>&nbsp; &nbsp; &nbsp; clRest.Free;&nbsp;</div><div>&nbsp; &nbsp; }</div><div>&nbsp; &nbsp; MainForm.FormWaiting.Visible = False;&nbsp;</div><div>&nbsp; &nbsp; RegMainPnl.Visible = False;</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; if (isAdminReg)</div><div>&nbsp; &nbsp; &nbsp; ShowMessage('SİSTEM YÖNETİCİSİ kaydınız başarıyla oluşturuldu! Lütfen giriş yapınız.');</div><div>&nbsp; &nbsp; else</div><div>&nbsp; &nbsp; &nbsp; ShowMessage('Kayıt işlemi başarıyla eklendi. Lütfen giriş yapınız.');</div><div>&nbsp; }</div><div>&nbsp; else</div><div>&nbsp; {</div><div>&nbsp; &nbsp; MainForm.FormWaiting.Visible = False;&nbsp;</div><div>&nbsp; }</div><div>}</div><a href="https://static.cloudflareinsights.com/beac&#111;n.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" target="_blank" rel="nofollow">https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496"</a> integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon="{&quot;version&quot;:&quot;2024.11.0&quot;,&quot;token&quot;:&quot;439455f3e46c40b98dbd42a2f1a954d8&quot;,&quot;r&quot;:1,&quot;server_timing&quot;:{&quot;name&quot;:{&quot;cfCacheStatus&quot;:true,&quot;cfEdge&quot;:true,&quot;cfExtPri&quot;:true,&quot;cfL4&quot;:true,&quot;cfOrigin&quot;:true,&quot;cfSpeedBrain&quot;:true},&quot;location_startswith&quot;:null}}" crossorigin="anonymous">]]>
   </description>
   <pubDate>Tue, 07 Jul 2026 13:42:23 +0000</pubDate>
   <guid isPermaLink="true">https://forum.clomosy.com.tr/forum_posts.asp?TID=1593&amp;PID=3690#3690</guid>
  </item> 
  <item>
   <title><![CDATA[Bunun nasıl daha hızlı çalışmasını sağlayabiliriz? : Merhaba &#304;brahimYava&#351;l&#305;kta tespit...]]></title>
   <link>https://forum.clomosy.com.tr/forum_posts.asp?TID=1593&amp;PID=3689#3689</link>
   <description>
    <![CDATA[<strong>Yazar:</strong> <a href="https://forum.clomosy.com.tr/member_profile.asp?PF=257">Emr.Erkmn</a><br /><strong>Konu:</strong> 1593<br /><strong>Gönderim Zamanı:</strong> 07&nbsp;Temmuz&nbsp;2026 Saat 13:30<br /><br />Merhaba İbrahim&nbsp;<br><br>Yavaşlıkta tespit ettiklerim&nbsp;<br><br>1Proje de giriş yapılmadığın da gereksiz api istekleri bulunuyor<br>yani kullanıcı giriş yapmasa bile kütüphanede ki tüm ödünç alınan kitapların listesi sunucudan çekiliyor<br>2her yükleme de firebase de kullanıcının görüm modu databasen tekrar çekiyor<br>3api den tarama yaparken gelen json verisi döngü içinde tek tek karakter ayıklıyordu bu durum da cihazda donmayya neden olabilir&nbsp;<br>4.firebaseden books.json çekilirken tüm kitapler tek sefer de geliyordu kitap sayısının artması arayüzü dondurabilir&nbsp;<br><br>aşağıda revize edilmiş 2 prosedür bırakıyorum&nbsp;<br><br><div>void FetchBooksFromFirebase;</div><div>var</div><div>&nbsp; clRestSettings, clRest, clRestBorrowed, clRestReviews, clRestNotif: TclRest;</div><div>&nbsp; clQuery: TClJSONQuery;</div><div>&nbsp; bookID, valStr, ratingStr, currentUser, respStr, retDateStr, bCoverUrl: String;</div><div>&nbsp; bTitle, bAuthor, bColor, bSummary, bCover, bGenre: String;</div><div>&nbsp; pStart, pEnd, totalRating, reviewCount, daysLeft: Integer;</div><div>&nbsp; avgRating: Double;</div><div>&nbsp; allBorrowedStr, allReviewsStr, bookBorrowBlock, bookRevBlock: String;</div><div>{</div><div>&nbsp; currentUser = Clomosy.GlobalVariableString;</div><div>&nbsp; GlobalNotifMsg = ''; GlobalNotifCount = 0; GlobalGridColCount = 0;&nbsp;</div><div>&nbsp;&nbsp;</div><div>&nbsp; if (GlobalBooksList &lt;&gt; nil) GlobalBooksList.Free;</div><div>&nbsp; GlobalBooksList = Clomosy.StringListNew;</div><div>&nbsp;&nbsp;</div><div>&nbsp; if (currentUser &lt;&gt; '')</div><div>&nbsp; {</div><div>&nbsp; &nbsp; // İYİLEŞTİRME 1: ViewMode Firebase'den sadece 1 kez çekilir, sonra lokal önbellek kullanılır.</div><div>&nbsp; &nbsp; if (GlobalViewMode == '')</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; clRestSettings = TclRest.Create;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; clRestSettings.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/settings/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/settings/</a>'+currentUser+'/viewMode.json';&nbsp;</div><div>&nbsp; &nbsp; &nbsp; clRestSettings.Method = rmGET;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; clRestSettings.Execute;</div><div>&nbsp; &nbsp; &nbsp; if (Pos('"grid"', clRestSettings.Response) &gt; 0) GlobalViewMode = 'grid'; else GlobalViewMode = 'list';</div><div>&nbsp; &nbsp; &nbsp; clRestSettings.Free;</div><div>&nbsp; &nbsp; }</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; if (ViewToggleBtn &lt;&gt; nil)</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; if (GlobalViewMode == 'grid') ViewToggleBtn.Text = 'Liste'; else ViewToggleBtn.Text = 'Izgara';</div><div>&nbsp; &nbsp; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; &nbsp; // Bildirimleri çek</div><div>&nbsp; &nbsp; clRestNotif = TclRest.Create;&nbsp;</div><div>&nbsp; &nbsp; clRestNotif.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/notificati&#111;ns/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/notifications/</a>' + currentUser + '.json';&nbsp;</div><div>&nbsp; &nbsp; clRestNotif.Method = rmGET;&nbsp;</div><div>&nbsp; &nbsp; clRestNotif.Execute;</div><div>&nbsp; &nbsp; respStr = clRestNotif.Response;&nbsp;</div><div>&nbsp; &nbsp; clRestNotif.Free;</div><div>&nbsp; &nbsp; if ((respStr &lt;&gt; 'null') &amp;&amp; (respStr &lt;&gt; '') &amp;&amp; (respStr &lt;&gt; '{}'))</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; pStart = Pos('"msg":"', respStr);</div><div>&nbsp; &nbsp; &nbsp; while (pStart &gt; 0)</div><div>&nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; GlobalNotifCount = GlobalNotifCount + 1;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; respStr = Copy(respStr, pStart + 7, Length(respStr));</div><div>&nbsp; &nbsp; &nbsp; &nbsp; GlobalNotifMsg = GlobalNotifMsg + '- ' + Copy(respStr, 1, Pos('"', respStr) - 1) + #13#10;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; pStart = Pos('"msg":"', respStr);</div><div>&nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; }</div><div>&nbsp; } else GlobalViewMode = 'list';</div><div>&nbsp; // İYİLEŞTİRME 2: Giriş yapmamış misafir kullanıcılar için borrowed.json çağrısı yapılmaz.</div><div>&nbsp; allBorrowedStr = '';</div><div>&nbsp; if (currentUser &lt;&gt; '')</div><div>&nbsp; {</div><div>&nbsp; &nbsp; clRestBorrowed = TclRest.Create;&nbsp;</div><div>&nbsp; &nbsp; clRestBorrowed.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/borrowed.js&#111;n" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/borrowed.json</a>';&nbsp;</div><div>&nbsp; &nbsp; clRestBorrowed.Method = rmGET;&nbsp;</div><div>&nbsp; &nbsp; clRestBorrowed.Execute;&nbsp;</div><div>&nbsp; &nbsp; allBorrowedStr = clRestBorrowed.Response;&nbsp;</div><div>&nbsp; &nbsp; clRestBorrowed.Free;</div><div>&nbsp; }</div><div>&nbsp; clRestReviews = TclRest.Create;&nbsp;</div><div>&nbsp; clRestReviews.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/reviews.js&#111;n" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/reviews.json</a>';&nbsp;</div><div>&nbsp; clRestReviews.Method = rmGET;&nbsp;</div><div>&nbsp; clRestReviews.Execute;&nbsp;</div><div>&nbsp; allReviewsStr = clRestReviews.Response;&nbsp;</div><div>&nbsp; clRestReviews.Free;</div><div>&nbsp; // İYİLEŞTİRME 3: Firebase'den tek seferde maks 30 kitap istenir (hızlı yükleme için)</div><div>&nbsp; clRest = TclRest.Create;&nbsp;</div><div>&nbsp; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/books.js&#111;n?orderBy=" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/books.json?orderBy="</a>$key"&amp;limitToFirst=30';&nbsp;</div><div>&nbsp; clRest.Method = rmGET;&nbsp;</div><div>&nbsp; clRest.Accept = 'application/json';&nbsp;</div><div>&nbsp; clRest.Execute;</div><div>&nbsp;&nbsp;</div><div>&nbsp; if ((clRest.Response &lt;&gt; 'null') &amp;&amp; (clRest.Response &lt;&gt; '') &amp;&amp; (clRest.Response &lt;&gt; '{}'))</div><div>&nbsp; {</div><div>&nbsp; &nbsp; if ((Pos('":{"', clRest.Response) == 0) &amp;&amp; (Pos('": {"', clRest.Response) == 0))</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp;clRest.Method = rmDELETE; clRest.Execute; ShowMessage('Sistem Uyarısı: Veritabanı sıfırlandı.');</div><div>&nbsp; &nbsp; }</div><div>&nbsp; &nbsp; else</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; clQuery = Clomosy.ClDataSetFromJSON(clRest.Response);</div><div>&nbsp; &nbsp; &nbsp; if (clQuery &lt;&gt; nil)</div><div>&nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; clQuery.First;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; while (not clQuery.Eof)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bookID = ''; try bookID = clQuery.FieldByName('id').AsString; except bookID = ''; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (bookID &lt;&gt; '')</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bTitle = 'Bilinmeyen Kitap'; try bTitle = clQuery.FieldByName('title').AsString; except bTitle = 'Bilinmeyen Kitap'; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bAuthor = 'Bilinmeyen Yazar'; try bAuthor = clQuery.FieldByName('author').AsString; except bAuthor = 'Bilinmeyen Yazar'; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bColor = '#2E4053'; try bColor = clQuery.FieldByName('color').AsString; except bColor = '#2E4053'; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bSummary = 'Açıklama bulunmuyor.'; try bSummary = clQuery.FieldByName('summary').AsString; except bSummary = 'Açıklama bulunmuyor.'; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bCoverUrl = ''; try bCoverUrl = clQuery.FieldByName('cover').AsString; except bCoverUrl = ''; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bGenre = 'Roman'; try bGenre = clQuery.FieldByName('genre').AsString; except bGenre = 'Roman'; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ((currentUser &lt;&gt; '') &amp;&amp; (allBorrowedStr &lt;&gt; 'null') &amp;&amp; (allBorrowedStr &lt;&gt; ''))</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pStart = Pos('"' + bookID + '":', allBorrowedStr);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (pStart &gt; 0)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bookBorrowBlock = Copy(allBorrowedStr, pStart, 1500);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pEnd = Pos('}}', bookBorrowBlock);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (pEnd &gt; 0) bookBorrowBlock = Copy(bookBorrowBlock, 1, pEnd);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (Pos('"' + currentUser + '"', bookBorrowBlock) &gt; 0)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;retDateStr = ''; pStart = Pos('"returnDate":"', bookBorrowBlock);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (pStart &gt; 0)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pStart = pStart + 14;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pEnd = Pos('"', Copy(bookBorrowBlock, pStart, Length(bookBorrowBlock)));</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (pEnd &gt; 0) retDateStr = Copy(bookBorrowBlock, pStart, pEnd - 1);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (retDateStr &lt;&gt; '')</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; daysLeft = Trunc(StrToDate(retDateStr)) - Trunc(Now);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (daysLeft &lt; 0) { GlobalNotifCount = GlobalNotifCount + 1; GlobalNotifMsg = GlobalNotifMsg + '- "' + bTitle + '" iadesi ' + IntToStr(Abs(daysLeft)) + ' gün gecikti!' + #13#10; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (daysLeft &lt;= 2) { GlobalNotifCount = GlobalNotifCount + 1; GlobalNotifMsg = GlobalNotifMsg + '- "' + bTitle + '" iadesine ' + IntToStr(daysLeft) + ' gün kaldı!' + #13#10; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; totalRating = 0; reviewCount = 0;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ((allReviewsStr &lt;&gt; 'null') &amp;&amp; (allReviewsStr &lt;&gt; ''))</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pStart = Pos('"' + bookID + '":', allReviewsStr);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (pStart &gt; 0)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bookRevBlock = Copy(allReviewsStr, pStart, 1500);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pEnd = Pos('}}', bookRevBlock);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (pEnd &gt; 0) bookRevBlock = Copy(bookRevBlock, 1, pEnd);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pStart = Pos('"rating":', bookRevBlock);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while (pStart &gt; 0)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pStart = pStart + 9; valStr = Copy(bookRevBlock, pStart, 1); if (valStr == ' ') valStr = Copy(bookRevBlock, pStart + 1, 1);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;totalRating = totalRating + StrToIntDef(valStr, 0); reviewCount = reviewCount + 1;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bookRevBlock = Copy(bookRevBlock, pStart + 1, Length(bookRevBlock)); pStart = Pos('"rating":', bookRevBlock);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (reviewCount &gt; 0) { avgRating = (totalRating * 1.0) / reviewCount; ratingStr = FloatToStr(avgRating); if (Length(ratingStr) &gt; 3) ratingStr = Copy(ratingStr, 1, 3); }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else ratingStr = '0';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GlobalBooksList.Add('{"id":"'+bookID+'","title":"'+bTitle+'","author":"'+bAuthor+'", "rating":"'+ratingStr+'", "color":"'+bColor+'", "summary":"'+bSummary+'", "cover":"'+bCoverUrl+'", "genre":"'+bGenre+'"}');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clQuery.Next;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; clQuery.Free;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; }</div><div>&nbsp; }</div><div>&nbsp; clRest.Free;</div><div>&nbsp;&nbsp;</div><div>&nbsp; if (GlobalNotifCount &gt; 0) { NotifBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#D81B60'); NotifBtn.SetclProSettings(NotifBtn.clProSettings); }</div><div>&nbsp; else { NotifBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); NotifBtn.SetclProSettings(NotifBtn.clProSettings); }</div><div>&nbsp;&nbsp;</div><div>&nbsp; DrawBooks;</div><div>}</div><div><br></div><div><br></div><div>void SearchOpenLibrary;</div><div>var</div><div>&nbsp; clRestAPI: TclRest;</div><div>&nbsp; queryStr, jsonResult, docsJsonStr, authorStr, bKey, bTitle, bAuthor, bCover, bCoverUrl, bGenre, subStr: String;</div><div>&nbsp; qry, innerQry: TCLJSONQuery;</div><div>&nbsp; i: Integer;</div><div>{</div><div>&nbsp; queryStr = SearchEdt.Text;</div><div>&nbsp; if (queryStr == '')</div><div>&nbsp; {</div><div>&nbsp; &nbsp; if (GlobalBooksList &lt;&gt; nil) GlobalBooksList.Free;</div><div>&nbsp; &nbsp; GlobalBooksList = Clomosy.StringListNew;</div><div>&nbsp; &nbsp; FetchBooksFromFirebase;</div><div>&nbsp; &nbsp; Exit;</div><div>&nbsp; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; for i = 1 to Length(queryStr) { if (Copy(queryStr, i, 1) == ' ') queryStr = Copy(queryStr, 1, i-1) + '+' + Copy(queryStr, i+1, Length(queryStr)); }</div><div>&nbsp; if (GlobalBooksList &lt;&gt; nil) GlobalBooksList.Free;</div><div>&nbsp; GlobalBooksList = Clomosy.StringListNew;</div><div>&nbsp; CountLbl.Text = 'API Aranıyor...';</div><div>&nbsp;&nbsp;</div><div>&nbsp; GlobalFilterGenre = 'Tümü';&nbsp;</div><div>&nbsp; FilterAllBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#D29054'); FilterAllBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF');</div><div>&nbsp; FilterRomanBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterRomanBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');</div><div>&nbsp; FilterBilimBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterBilimBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');</div><div>&nbsp; FilterTarihBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterTarihBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');</div><div>&nbsp; FilterFelsefeBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterFelsefeBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');</div><div>&nbsp; FilterCocukBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterCocukBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');</div><div>&nbsp; FilterGelisimBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterGelisimBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');</div><div>&nbsp; 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);</div><div>&nbsp; clRestAPI = TclRest.Create;&nbsp;</div><div>&nbsp; clRestAPI.BaseURL = '<a href="https://openlibrary.org/search.js&#111;n?q=" target="_blank" rel="nofollow">https://openlibrary.org/search.json?q=</a>' + queryStr + '&amp;limit=15&amp;fields=key,title,author_name,cover_i,subject';&nbsp;</div><div>&nbsp; clRestAPI.Method = rmGET; clRestAPI.Accept = 'application/json'; clRestAPI.Execute;</div><div>&nbsp; jsonResult = clRestAPI.Response; clRestAPI.Free;</div><div>&nbsp;&nbsp;</div><div>&nbsp; // İYİLEŞTİRME 4: Manuel String parçalama (Pos, Copy) yerine hızlı, çift aşamalı DataSet çözümlemesi yapılıyor.</div><div>&nbsp; if (jsonResult &lt;&gt; '')</div><div>&nbsp; {</div><div>&nbsp; &nbsp; &nbsp;qry = Clomosy.ClDataSetFromJSON(jsonResult);</div><div>&nbsp; &nbsp; &nbsp;if (qry &lt;&gt; nil)</div><div>&nbsp; &nbsp; &nbsp;{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; docsJsonStr = qry.FieldByName('docs').AsString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; qry.Free;</div><div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; if (docsJsonStr &lt;&gt; '')</div><div>&nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;innerQry = Clomosy.ClDataSetFromJSON(docsJsonStr);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (innerQry &lt;&gt; nil)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; innerQry.First;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while (not innerQry.Eof)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bKey = innerQry.FieldByName('key').AsString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (Length(bKey) &gt; 7) bKey = Copy(bKey, 8, Length(bKey));</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bTitle = innerQry.FieldByName('title').AsString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Yazar dizisini güvenli ve hızlı çözümle</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;authorStr = innerQry.FieldByName('author_name').AsString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bAuthor = 'Bilinmeyen Yazar';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (authorStr &lt;&gt; '')</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (Copy(authorStr, 1, 2) == '&#091;"') {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bAuthor = Copy(authorStr, 3, Pos('"', Copy(authorStr, 3, Length(authorStr))) - 1);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bAuthor = authorStr;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bCover = innerQry.FieldByName('cover_i').AsString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bCoverUrl = '';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (bCover &lt;&gt; '') bCoverUrl = '<a href="https://covers.openlibrary.org/b/id/" target="_blank" rel="nofollow">https://covers.openlibrary.org/b/id/</a>' + bCover + '-M.jpg';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Türleri ayrıştır</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;subStr = AnsiLowerCase(innerQry.FieldByName('subject').AsString);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bGenre = 'Roman';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (subStr &lt;&gt; '')</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bGenre = '';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (Pos('science fiction', subStr) &gt; 0) bGenre = bGenre + 'Bilim Kurgu, ';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (Pos('history', subStr) &gt; 0) bGenre = bGenre + 'Tarih, ';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (Pos('philosophy', subStr) &gt; 0) bGenre = bGenre + 'Felsefe, ';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ((Pos('children', subStr) &gt; 0) || (Pos('juvenile', subStr) &gt; 0)) bGenre = bGenre + 'Çocuk, ';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ((Pos('self-help', subStr) &gt; 0) || (Pos('personal growth', subStr) &gt; 0)) bGenre = bGenre + 'Kişisel Gelişim, ';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ((Pos('fiction', subStr) &gt; 0) || (Pos('novel', subStr) &gt; 0) || (Pos('magic', subStr) &gt; 0) || (Pos('fantasy', subStr) &gt; 0)) bGenre = bGenre + 'Roman, ';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (bGenre == '') bGenre = 'Roman'; else bGenre = Copy(bGenre, 1, Length(bGenre) - 2);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (bKey &lt;&gt; '') GlobalBooksList.Add('{"id":"'+bKey+'","title":"'+bTitle+'","author":"'+bAuthor+'", "rating":"0", "color":"#2E4053", "summary":"OpenLibrary API Kaydı", "cover":"'+bCoverUrl+'", "genre":"'+bGenre+'"}');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;innerQry.Next;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; innerQry.Free;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp;}</div><div>&nbsp; }</div><div>&nbsp; else</div><div>&nbsp; {</div><div>&nbsp; &nbsp; &nbsp;ShowMessage('Arama sonucu bulunamadı. Arşiv veritabanınıza geri dönülüyor.');</div><div>&nbsp; &nbsp; &nbsp;SearchEdt.Text = '';</div><div>&nbsp; &nbsp; &nbsp;if (GlobalBooksList &lt;&gt; nil) GlobalBooksList.Free;</div><div>&nbsp; &nbsp; &nbsp;GlobalBooksList = Clomosy.StringListNew;</div><div>&nbsp; &nbsp; &nbsp;FetchBooksFromFirebase;</div><div>&nbsp; &nbsp; &nbsp;Exit;</div><div>&nbsp; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; DrawBooks;</div><div>}</div><div><br></div><a href="https://static.cloudflareinsights.com/beac&#111;n.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" target="_blank" rel="nofollow">https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496"</a> integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon="{&quot;version&quot;:&quot;2024.11.0&quot;,&quot;token&quot;:&quot;439455f3e46c40b98dbd42a2f1a954d8&quot;,&quot;r&quot;:1,&quot;server_timing&quot;:{&quot;name&quot;:{&quot;cfCacheStatus&quot;:true,&quot;cfEdge&quot;:true,&quot;cfExtPri&quot;:true,&quot;cfL4&quot;:true,&quot;cfOrigin&quot;:true,&quot;cfSpeedBrain&quot;:true},&quot;location_startswith&quot;:null}}" crossorigin="anonymous">]]>
   </description>
   <pubDate>Tue, 07 Jul 2026 13:30:44 +0000</pubDate>
   <guid isPermaLink="true">https://forum.clomosy.com.tr/forum_posts.asp?TID=1593&amp;PID=3689#3689</guid>
  </item> 
  <item>
   <title><![CDATA[Bunun nasıl daha hızlı çalışmasını sağlayabiliriz? : var MainForm: TCLForm; ScaledLayout:...]]></title>
   <link>https://forum.clomosy.com.tr/forum_posts.asp?TID=1593&amp;PID=3688#3688</link>
   <description>
    <![CDATA[<strong>Yazar:</strong> <a href="https://forum.clomosy.com.tr/member_profile.asp?PF=468">ibrahimBsr</a><br /><strong>Konu:</strong> 1593<br /><strong>Gönderim Zamanı:</strong> 07&nbsp;Temmuz&nbsp;2026 Saat 13:20<br /><br /><div>var</div><div>&nbsp; MainForm: TCLForm;</div><div>&nbsp; ScaledLayout: TclScaledLayout;</div><div><br></div><div>&nbsp; // --- ASENKRON SİMÜLASYONU İÇİN EKLENENLER ---</div><div>&nbsp; ActionTimer: TClTimer;</div><div>&nbsp; GlobalActionType: String;</div><div><br></div><div>&nbsp; // --- GİRİŞ SAYFASI DEĞİŞKENLERİ ---</div><div>&nbsp; LoginMainPnl, TopPnl, ContentPnl, EmailPnl, PasswordPnl, BottomPnl, RegisterWrapPnl, ForgotPwdPnl: TclProPanel;</div><div>&nbsp; IconImg: TclProImage;</div><div>&nbsp; AppTitleLbl, AppSubTitleLbl, WelcomeLbl, SubWelcomeLbl, EmailTitleLbl, PasswordTitleLbl, RegisterLbl: TclProLabel;</div><div>&nbsp; EmailEdt, PasswordEdt: TclProEdit;</div><div>&nbsp; LoginBtn, RegisterBtn, ForgotPwdBtn: TclProButton;</div><div><br></div><div>&nbsp; // --- KAYIT OL SAYFASI DEĞİŞKENLERİ ---</div><div>&nbsp; RegMainPnl, RegTopPnl, RegTitleWrapPnl, RegBottomPnl: TclProPanel;</div><div>&nbsp; RegScrollBox: TclVertScrollBox;</div><div>&nbsp;&nbsp;</div><div>&nbsp; RegPersonalTitleLbl, RegAccountTitleLbl: TclProLabel;</div><div>&nbsp; RegRow1Pnl, RegAdPnl, RegSoyadPnl, RegTCPnl, RegPhonePnl, RegAddressPnl, RegAgePnl: TclProPanel;</div><div>&nbsp; RegAdLbl, RegSoyadLbl, RegTCLbl, RegPhoneLbl, RegAddressLbl, RegAgeLbl: TclProLabel;</div><div>&nbsp; RegAdEdt, RegSoyadEdt, RegTCEdt, RegPhoneEdt: TclProEdit;</div><div>&nbsp; RegAddressMemo: TclMemo;</div><div>&nbsp; RegAgeCombo: TclComboBox;</div><div><br></div><div>&nbsp; // YÖNETİCİ ALANI İÇİN DEĞİŞKENLER EKLENDİ</div><div>&nbsp; RegEmailPnl, RegPasswordPnl, RegPasswordRepPnl, RegAdminCodePnl: TclProPanel;</div><div>&nbsp; RegEmailLbl, RegPasswordLbl, RegPasswordRepLbl, RegAdminCodeLbl: TclProLabel;</div><div>&nbsp; RegEmailEdt, RegPasswordEdt, RegPasswordRepEdt, RegAdminCodeEdt: TclProEdit;</div><div><br></div><div>&nbsp; RegBackBtn, RegSubmitBtn: TclProButton;</div><div>&nbsp; RegTitleLbl, RegSubTitleLbl: TclProLabel;</div><div><br></div><div><br></div><div>// --- Sadece Sayı Girilmesini Sağlayan Fonksiyon ---</div><div>void OnNumberOnlyChange;</div><div>var</div><div>&nbsp; S, newS, c: String;</div><div>&nbsp; i: Integer;</div><div>&nbsp; Edt: TclProEdit;</div><div>{</div><div>&nbsp; Edt = TclProEdit(MainForm.clSender);</div><div>&nbsp; S = Edt.Text;</div><div>&nbsp; newS = '';</div><div>&nbsp; i = 1;</div><div>&nbsp;&nbsp;</div><div>&nbsp; while (i &lt;= Length(S))</div><div>&nbsp; {</div><div>&nbsp; &nbsp; c = Copy(S, i, 1);</div><div>&nbsp; &nbsp; if ((c &gt;= '0') &amp;&amp; (c &lt;= '9'))</div><div>&nbsp; &nbsp; &nbsp; newS = newS + c;</div><div>&nbsp; &nbsp; i = i + 1;</div><div>&nbsp; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; if (S &lt;&gt; newS)</div><div>&nbsp; {</div><div>&nbsp; &nbsp; Edt.Text = newS;</div><div>&nbsp; }</div><div>}</div><div><br></div><div>void ExecuteLogin;</div><div>var</div><div>&nbsp; clRest: TclRest;</div><div>&nbsp; EmailKey, responseStr: String;</div><div>&nbsp; isAdmin: Boolean;</div><div>{</div><div>&nbsp; EmailKey = EmailEdt.Text;</div><div>&nbsp;&nbsp;</div><div>&nbsp; // FİREBASE KURALI: Klasör isimlerinde nokta olamaz</div><div>&nbsp; while (Pos('.', EmailKey) &gt; 0)</div><div>&nbsp; {</div><div>&nbsp; &nbsp; EmailKey = Copy(EmailKey, 1, Pos('.', EmailKey) - 1) + '_' + Copy(EmailKey, Pos('.', EmailKey) + 1, Length(EmailKey));</div><div>&nbsp; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; isAdmin = False;</div><div>&nbsp;&nbsp;</div><div>&nbsp; // 1. İSTEK: KULLANICILAR (users) TABLOSUNA BAK</div><div>&nbsp; clRest = TclRest.Create;</div><div>&nbsp; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/users/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/users/</a>'+EmailKey+'.json';</div><div>&nbsp; clRest.Method = rmGET;</div><div>&nbsp; clRest.Accept = 'application/json';</div><div>&nbsp; clRest.Execute;</div><div>&nbsp; responseStr = clRest.Response;</div><div>&nbsp; clRest.Free; // BAĞLANTIYI TEMİZLE VE KAPAT</div><div>&nbsp;&nbsp;</div><div>&nbsp; // Eğer users tablosunda yoksa, 2. İSTEK: YÖNETİCİLER (admins) TABLOSUNDA ARA</div><div>&nbsp; if ((responseStr == 'null') || (responseStr == ''))</div><div>&nbsp; {</div><div>&nbsp; &nbsp; &nbsp;clRest = TclRest.Create; // YENİ TERTEMİZ BİR BAĞLANTI AÇ</div><div>&nbsp; &nbsp; &nbsp;clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/admins/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/admins/</a>'+EmailKey+'.json';</div><div>&nbsp; &nbsp; &nbsp;clRest.Method = rmGET;</div><div>&nbsp; &nbsp; &nbsp;clRest.Accept = 'application/json';</div><div>&nbsp; &nbsp; &nbsp;clRest.Execute;</div><div>&nbsp; &nbsp; &nbsp;responseStr = clRest.Response;</div><div>&nbsp; &nbsp; &nbsp;clRest.Free; // BAĞLANTIYI TEMİZLE VE KAPAT</div><div>&nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp;if ((responseStr &lt;&gt; 'null') &amp;&amp; (responseStr &lt;&gt; ''))</div><div>&nbsp; &nbsp; &nbsp;{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; isAdmin = True; // Kişi admins tablosunda bulundu!</div><div>&nbsp; &nbsp; &nbsp;}</div><div>&nbsp; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; MainForm.FormWaiting.Visible = False;&nbsp;</div><div>&nbsp;&nbsp;</div><div>&nbsp; if ((responseStr == 'null') || (responseStr == ''))</div><div>&nbsp; {</div><div>&nbsp; &nbsp; ShowMessage('Kayıtlı e-posta bulunamadı. Lütfen kayıt olun.');</div><div>&nbsp; }</div><div>&nbsp; else</div><div>&nbsp; {</div><div>&nbsp; &nbsp; if (Pos('"sifre":"'+PasswordEdt.Text+'"', responseStr) &gt; 0)</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; Clomosy.GlobalVariableString = EmailKey;</div><div>&nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; // --- SON GİRİŞ TARİHİNİ GÜNCELLE ---</div><div>&nbsp; &nbsp; &nbsp; clRest = TclRest.Create;</div><div>&nbsp; &nbsp; &nbsp; if (isAdmin)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/admins/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/admins/</a>'+EmailKey+'/son_giris.json';</div><div>&nbsp; &nbsp; &nbsp; else</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/users/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/users/</a>'+EmailKey+'/son_giris.json';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; clRest.Method = rmPUT;</div><div>&nbsp; &nbsp; &nbsp; clRest.Accept = 'application/json';</div><div>&nbsp; &nbsp; &nbsp; clRest.AddBody('"' + FormatDateTime('dd.mm.yyyy hh:nn:ss', Now) + '"', 'application/json');</div><div>&nbsp; &nbsp; &nbsp; clRest.Execute;</div><div>&nbsp; &nbsp; &nbsp; clRest.Free;</div><div>&nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; if (isAdmin)</div><div>&nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Clomosy.RunUnit('pGenel');&nbsp;</div><div>&nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; else</div><div>&nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Clomosy.RunUnit('uKatalog');&nbsp;</div><div>&nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; }</div><div>&nbsp; &nbsp; else</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; ShowMessage('Hatalı şifre girdiniz.');</div><div>&nbsp; &nbsp; }</div><div>&nbsp; }</div><div>}</div><div><br></div><div>void ExecuteRegister;</div><div>var</div><div>&nbsp; clRest: TclRest;</div><div>&nbsp; EmailKey, jsonBody, allUsersResp, allAdminsResp, tcVal, phoneVal, emailVal: String;</div><div>&nbsp; isOk, isAdminReg: Boolean;</div><div>{</div><div>&nbsp; tcVal = RegTCEdt.Text;</div><div>&nbsp; phoneVal = RegPhoneEdt.Text;</div><div>&nbsp; emailVal = RegEmailEdt.Text;</div><div>&nbsp; isOk = True;</div><div><br></div><div>&nbsp; EmailKey = emailVal;&nbsp;</div><div>&nbsp;&nbsp;</div><div>&nbsp; while (Pos('.', EmailKey) &gt; 0)</div><div>&nbsp; {</div><div>&nbsp; &nbsp; EmailKey = Copy(EmailKey, 1, Pos('.', EmailKey) - 1) + '_' + Copy(EmailKey, Pos('.', EmailKey) + 1, Length(EmailKey));</div><div>&nbsp; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; clRest = TclRest.Create;</div><div>&nbsp; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/users.js&#111;n" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/users.json</a>';</div><div>&nbsp; clRest.Method = rmGET;</div><div>&nbsp; clRest.Accept = 'application/json';</div><div>&nbsp; clRest.Execute;</div><div>&nbsp; allUsersResp = clRest.Response;</div><div>&nbsp; clRest.Free;&nbsp;</div><div>&nbsp;&nbsp;</div><div>&nbsp; clRest = TclRest.Create;&nbsp;</div><div>&nbsp; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/admins.js&#111;n" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/admins.json</a>';</div><div>&nbsp; clRest.Method = rmGET;</div><div>&nbsp; clRest.Accept = 'application/json';</div><div>&nbsp; clRest.Execute;</div><div>&nbsp; allAdminsResp = clRest.Response;</div><div>&nbsp; clRest.Free;&nbsp;</div><div><br></div><div>&nbsp; if (allUsersResp == 'null') allUsersResp = '';</div><div>&nbsp; if (allAdminsResp == 'null') allAdminsResp = '';</div><div>&nbsp;&nbsp;</div><div>&nbsp; if ((Pos('"' + EmailKey + '":', allUsersResp) &gt; 0) || (Pos('"' + EmailKey + '":', allAdminsResp) &gt; 0))</div><div>&nbsp; {</div><div>&nbsp; &nbsp; ShowMessage('Bu e-posta adresi zaten sistemde kayıtlı!');</div><div>&nbsp; &nbsp; isOk = False;</div><div>&nbsp; }</div><div>&nbsp; else if ((Pos('"tc":"' + tcVal + '"', allUsersResp) &gt; 0) || (Pos('"tc":"' + tcVal + '"', allAdminsResp) &gt; 0))</div><div>&nbsp; {</div><div>&nbsp; &nbsp; ShowMessage('Bu TC Kimlik Numarası sistemde zaten kayıtlı!');</div><div>&nbsp; &nbsp; isOk = False;</div><div>&nbsp; }</div><div>&nbsp; else if ((Pos('"telefon":"' + phoneVal + '"', allUsersResp) &gt; 0) || (Pos('"telefon":"' + phoneVal + '"', allAdminsResp) &gt; 0))</div><div>&nbsp; {</div><div>&nbsp; &nbsp; ShowMessage('Bu telefon numarası sistemde zaten kayıtlı!');</div><div>&nbsp; &nbsp; isOk = False;</div><div>&nbsp; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; if (isOk)</div><div>&nbsp; {</div><div>&nbsp; &nbsp; isAdminReg = False;</div><div>&nbsp; &nbsp; if (RegAdminCodeEdt.Text == '1453')&nbsp;</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp;isAdminReg = True;</div><div>&nbsp; &nbsp; }</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; // --- KAYIT TARİHİ EKLENDİ (kayit_tarihi) ---</div><div>&nbsp; &nbsp; jsonBody = '{"ad":"'+RegAdEdt.Text+'", "soyad":"'+RegSoyadEdt.Text+'", "yas":"'+RegAgeCombo.Text+'", "tc":"'+tcVal+'", "telefon":"'+phoneVal+'", "adres":"'+RegAddressMemo.Text+'", "sifre":"'+RegPasswordEdt.Text+'", "kayit_tarihi":"'+FormatDateTime('dd.mm.yyyy hh:nn:ss', Now)+'"}';</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; clRest = TclRest.Create;</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; if (isAdminReg)</div><div>&nbsp; &nbsp; &nbsp; &nbsp;clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/admins/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/admins/</a>'+EmailKey+'.json';</div><div>&nbsp; &nbsp; else</div><div>&nbsp; &nbsp; &nbsp; &nbsp;clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/users/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/users/</a>'+EmailKey+'.json';</div><div>&nbsp; &nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; clRest.Method = rmPUT;</div><div>&nbsp; &nbsp; clRest.Accept = 'application/json';</div><div>&nbsp; &nbsp; clRest.AddBody(jsonBody, 'application/json');</div><div>&nbsp; &nbsp; clRest.Execute;</div><div>&nbsp; &nbsp; clRest.Free;&nbsp;</div><div><br></div><div>&nbsp; &nbsp; MainForm.FormWaiting.Visible = False;&nbsp;</div><div>&nbsp; &nbsp; RegMainPnl.Visible = False;</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; if (isAdminReg)</div><div>&nbsp; &nbsp; &nbsp; ShowMessage('SİSTEM YÖNETİCİSİ kaydınız başarıyla oluşturuldu! Lütfen giriş yapınız.');</div><div>&nbsp; &nbsp; else</div><div>&nbsp; &nbsp; &nbsp; ShowMessage('Kayıt işlemi başarıyla eklendi. Lütfen giriş yapınız.');</div><div>&nbsp; }</div><div>&nbsp; else</div><div>&nbsp; {</div><div>&nbsp; &nbsp; MainForm.FormWaiting.Visible = False;&nbsp;</div><div>&nbsp; }</div><div>}</div><div><br></div><div>// --- ASENKRON İŞLEM TETİKLEYİCİSİ (TIMER) ---</div><div>void OnActionTimerTick;</div><div>{</div><div>&nbsp; ActionTimer.Enabled = False;&nbsp;</div><div>&nbsp;&nbsp;</div><div>&nbsp; if (GlobalActionType == 'Login')</div><div>&nbsp; {</div><div>&nbsp; &nbsp; ExecuteLogin;</div><div>&nbsp; }</div><div>&nbsp; else if (GlobalActionType == 'Register')</div><div>&nbsp; {</div><div>&nbsp; &nbsp; ExecuteRegister;</div><div>&nbsp; }</div><div>}</div><div><br></div><div><br></div><div>// --- BUTON TIKLAMALARI ---</div><div>void CheckLogin;</div><div>{</div><div>&nbsp; if ((EmailEdt.Text &lt;&gt; '') &amp;&amp; (PasswordEdt.Text &lt;&gt; ''))&nbsp;</div><div>&nbsp; {</div><div>&nbsp; &nbsp; MainForm.FormWaiting.Visible = True;&nbsp;</div><div>&nbsp; &nbsp; GlobalActionType = 'Login';</div><div>&nbsp; &nbsp; ActionTimer.Enabled = True;&nbsp;</div><div>&nbsp; }</div><div>&nbsp; else</div><div>&nbsp; {</div><div>&nbsp; &nbsp; ShowMessage('Lütfen e-posta ve şifrenizi giriniz.');&nbsp;</div><div>&nbsp; }</div><div>}</div><div><br></div><div>void CloseRegister;</div><div>var</div><div>&nbsp; tcVal, phoneVal, emailVal: String;</div><div>&nbsp; tcLen, phoneLen: Integer;</div><div>{</div><div>&nbsp; tcVal = RegTCEdt.Text;</div><div>&nbsp; phoneVal = RegPhoneEdt.Text;</div><div>&nbsp; emailVal = RegEmailEdt.Text;</div><div><br></div><div>&nbsp; tcLen = Length(tcVal);</div><div>&nbsp; phoneLen = Length(phoneVal);</div><div><br></div><div>&nbsp; if ((RegAdEdt.Text &lt;&gt; '') &amp;&amp; (RegSoyadEdt.Text &lt;&gt; '') &amp;&amp; (tcVal &lt;&gt; '') &amp;&amp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; (RegAddressMemo.Text &lt;&gt; '') &amp;&amp; (emailVal &lt;&gt; '') &amp;&amp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; (RegPasswordEdt.Text &lt;&gt; '') &amp;&amp; (RegPasswordEdt.Text == RegPasswordRepEdt.Text))</div><div>&nbsp; {</div><div>&nbsp; &nbsp; if (RegAgeCombo.Text == '')</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp;ShowMessage('Lütfen yaşınızı seçiniz!');</div><div>&nbsp; &nbsp; }</div><div>&nbsp; &nbsp; else if (tcLen &lt;&gt; 11)</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp;ShowMessage('TC Kimlik Numarası 11 haneli olmalıdır!');</div><div>&nbsp; &nbsp; }</div><div>&nbsp; &nbsp; else if (phoneLen &lt;&gt; 10)</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp;ShowMessage('Telefon numarası başında 0 olmadan 10 haneli olmalıdır! Örn: 5551234567');</div><div>&nbsp; &nbsp; }</div><div>&nbsp; &nbsp; else if ((Pos('@', emailVal) == 0) || (Pos('.', emailVal) == 0))</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp;ShowMessage('Lütfen geçerli bir e-posta adresi giriniz!');</div><div>&nbsp; &nbsp; }</div><div>&nbsp; &nbsp; else</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; MainForm.FormWaiting.Visible = True;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; GlobalActionType = 'Register';</div><div>&nbsp; &nbsp; &nbsp; ActionTimer.Enabled = True;&nbsp;</div><div>&nbsp; &nbsp; }</div><div>&nbsp; }</div><div>&nbsp; else</div><div>&nbsp; {</div><div>&nbsp; &nbsp; ShowMessage('Lütfen tüm alanları eksiksiz doldurun ve şifrelerin eşleştiğinden emin olun.');&nbsp;</div><div>&nbsp; }</div><div>}</div><div><br></div><div>void OpenRegister;</div><div>{</div><div>&nbsp; RegMainPnl.Visible = True;</div><div>&nbsp; RegMainPnl.BringToFront;</div><div>}</div><div><br></div><div>void BackOfMain;</div><div>{</div><div>&nbsp; RegMainPnl.Visible = False;</div><div>}</div><div><br></div><div>void SetupRegisterUI;</div><div>var</div><div>&nbsp; ageIndex: Integer;</div><div>{</div><div>&nbsp; RegMainPnl = MainForm.AddNewProPanel(ScaledLayout, 'RegMainPnl');</div><div>&nbsp; RegMainPnl.Align = alClient;</div><div>&nbsp; RegMainPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');</div><div>&nbsp; RegMainPnl.SetclProSettings(RegMainPnl.clProSettings);</div><div>&nbsp; RegMainPnl.Visible = False;&nbsp;</div><div><br></div><div>&nbsp; RegTopPnl = MainForm.AddNewProPanel(RegMainPnl, 'RegTopPnl');</div><div>&nbsp; RegTopPnl.Align = alTop;</div><div>&nbsp; RegTopPnl.Height = 150;</div><div>&nbsp; RegTopPnl.Margins.Top = -30;</div><div>&nbsp; RegTopPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#36212E');</div><div>&nbsp; RegTopPnl.clProSettings.RoundHeight = 40;</div><div>&nbsp; RegTopPnl.clProSettings.RoundWidth = 40;</div><div>&nbsp; RegTopPnl.SetclProSettings(RegTopPnl.clProSettings);</div><div><br></div><div>&nbsp; RegBackBtn = MainForm.AddNewProButton(RegTopPnl, 'RegBackBtn', '&lt; Giriş sayfası');</div><div>&nbsp; RegBackBtn.Align = alLeft;</div><div>&nbsp; RegBackBtn.Width = 120;</div><div>&nbsp; RegBackBtn.Margins.Top = 30;</div><div>&nbsp; RegBackBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF');</div><div>&nbsp; RegBackBtn.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; RegBackBtn.SetclProSettings(RegBackBtn.clProSettings);</div><div>&nbsp; MainForm.AddNewEvent(RegBackBtn, tbeOnClick, 'BackOfMain');</div><div><br></div><div>&nbsp; RegTitleWrapPnl = MainForm.AddNewProPanel(RegTopPnl, 'RegTitleWrapPnl');</div><div>&nbsp; RegTitleWrapPnl.Align = alRight;</div><div>&nbsp; RegTitleWrapPnl.Width = 120;</div><div>&nbsp; RegTitleWrapPnl.Margins.Top = 70;</div><div>&nbsp; RegTitleWrapPnl.Margins.Right = 5;</div><div>&nbsp; RegTitleWrapPnl.clProSettings.RoundHeight = 40;</div><div>&nbsp; RegTitleWrapPnl.clProSettings.RoundWidth = 40;</div><div>&nbsp; RegTitleWrapPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#36212E');</div><div>&nbsp; RegTitleWrapPnl.SetclProSettings(RegTitleWrapPnl.clProSettings);</div><div><br></div><div>&nbsp; RegTitleLbl = MainForm.AddNewProLabel(RegTitleWrapPnl, 'RegTitleLbl', 'Kayıt Ol');</div><div>&nbsp; RegTitleLbl.Align = alTop;</div><div>&nbsp; RegTitleLbl.Height = 25;</div><div>&nbsp; RegTitleLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF');</div><div>&nbsp; RegTitleLbl.clProSettings.FontSize = 22;</div><div>&nbsp; RegTitleLbl.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; RegTitleLbl.SetclProSettings(RegTitleLbl.clProSettings);</div><div><br></div><div>&nbsp; RegSubTitleLbl = MainForm.AddNewProLabel(RegTitleWrapPnl, 'RegSubTitleLbl', 'YENİ ÜYELİK');</div><div>&nbsp; RegSubTitleLbl.Align = alTop;</div><div>&nbsp; RegSubTitleLbl.Height = 20;</div><div>&nbsp; RegSubTitleLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#B09A9E');</div><div>&nbsp; RegSubTitleLbl.clProSettings.FontSize = 10;</div><div>&nbsp; RegSubTitleLbl.SetclProSettings(RegSubTitleLbl.clProSettings);</div><div><br></div><div>&nbsp; RegScrollBox = MainForm.AddNewVertScrollBox(RegMainPnl, 'RegScrollBox');</div><div>&nbsp; RegScrollBox.Align = alClient;</div><div>&nbsp; RegScrollBox.Margins.Left = 30;</div><div>&nbsp; RegScrollBox.Margins.Right = 30;</div><div>&nbsp; RegScrollBox.Margins.Top = 20;</div><div>&nbsp; RegScrollBox.Margins.Bottom = 20;</div><div>&nbsp;&nbsp;</div><div>&nbsp; RegPersonalTitleLbl = MainForm.AddNewProLabel(RegScrollBox, 'RegPersonalTitleLbl', 'KİŞİSEL BİLGİLER');</div><div>&nbsp; RegPersonalTitleLbl.Align = alTop;</div><div>&nbsp; RegPersonalTitleLbl.Height = 25;</div><div>&nbsp; RegPersonalTitleLbl.Margins.Bottom = 10;</div><div>&nbsp; RegPersonalTitleLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#888888');</div><div>&nbsp; RegPersonalTitleLbl.clProSettings.FontSize = 11;</div><div>&nbsp; RegPersonalTitleLbl.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; RegPersonalTitleLbl.SetclProSettings(RegPersonalTitleLbl.clProSettings);</div><div><br></div><div>&nbsp; RegRow1Pnl = MainForm.AddNewProPanel(RegScrollBox, 'RegRow1Pnl');</div><div>&nbsp; RegRow1Pnl.Align = alTop;</div><div>&nbsp; RegRow1Pnl.Height = 80;</div><div>&nbsp; RegRow1Pnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');</div><div>&nbsp; RegRow1Pnl.SetclProSettings(RegRow1Pnl.clProSettings);</div><div><br></div><div>&nbsp; RegAdPnl = MainForm.AddNewProPanel(RegRow1Pnl, 'RegAdPnl');</div><div>&nbsp; RegAdPnl.Align = alLeft;</div><div>&nbsp; RegAdPnl.Width = 140;&nbsp;</div><div>&nbsp; RegAdPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');</div><div>&nbsp; RegAdPnl.SetclProSettings(RegAdPnl.clProSettings);</div><div><br></div><div>&nbsp; RegAdLbl = MainForm.AddNewProLabel(RegAdPnl, 'RegAdLbl', 'AD');</div><div>&nbsp; RegAdLbl.Align = alTop;</div><div>&nbsp; RegAdLbl.Height = 20;</div><div>&nbsp; RegAdLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#888888');</div><div>&nbsp; RegAdLbl.clProSettings.FontSize = 10;</div><div>&nbsp; RegAdLbl.SetclProSettings(RegAdLbl.clProSettings);</div><div><br></div><div>&nbsp; RegAdEdt = MainForm.AddNewProEdit(RegAdPnl, 'RegAdEdt', '');</div><div>&nbsp; RegAdEdt.Align = alClient;</div><div>&nbsp; RegAdEdt.Margins.Bottom = 15;</div><div>&nbsp; RegAdEdt.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FFFFFF');</div><div>&nbsp; RegAdEdt.clProSettings.BorderColor = clAlphaColor.clHexToColor('#DDDDDD');</div><div>&nbsp; RegAdEdt.clProSettings.BorderWidth = 1;</div><div>&nbsp; RegAdEdt.SetclProSettings(RegAdEdt.clProSettings);</div><div><br></div><div>&nbsp; RegSoyadPnl = MainForm.AddNewProPanel(RegRow1Pnl, 'RegSoyadPnl');</div><div>&nbsp; RegSoyadPnl.Align = alClient;</div><div>&nbsp; RegSoyadPnl.Margins.Left = 10;&nbsp;</div><div>&nbsp; RegSoyadPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');</div><div>&nbsp; RegSoyadPnl.SetclProSettings(RegSoyadPnl.clProSettings);</div><div><br></div><div>&nbsp; RegSoyadLbl = MainForm.AddNewProLabel(RegSoyadPnl, 'RegSoyadLbl', 'SOYAD');</div><div>&nbsp; RegSoyadLbl.Align = alTop;</div><div>&nbsp; RegSoyadLbl.Height = 20;</div><div>&nbsp; RegSoyadLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#888888');</div><div>&nbsp; RegSoyadLbl.clProSettings.FontSize = 10;</div><div>&nbsp; RegSoyadLbl.SetclProSettings(RegSoyadLbl.clProSettings);</div><div><br></div><div>&nbsp; RegSoyadEdt = MainForm.AddNewProEdit(RegSoyadPnl, 'RegSoyadEdt', '');</div><div>&nbsp; RegSoyadEdt.Align = alClient;</div><div>&nbsp; RegSoyadEdt.Margins.Bottom = 15;</div><div>&nbsp; RegSoyadEdt.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FFFFFF');</div><div>&nbsp; RegSoyadEdt.clProSettings.BorderColor = clAlphaColor.clHexToColor('#DDDDDD');</div><div>&nbsp; RegSoyadEdt.clProSettings.BorderWidth = 1;</div><div>&nbsp; RegSoyadEdt.SetclProSettings(RegSoyadEdt.clProSettings);</div><div><br></div><div>&nbsp; RegAgePnl = MainForm.AddNewProPanel(RegScrollBox, 'RegAgePnl');</div><div>&nbsp; RegAgePnl.Align = alTop;</div><div>&nbsp; RegAgePnl.Height = 80;</div><div>&nbsp; RegAgePnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');</div><div>&nbsp; RegAgePnl.SetclProSettings(RegAgePnl.clProSettings);</div><div><br></div><div>&nbsp; RegAgeLbl = MainForm.AddNewProLabel(RegAgePnl, 'RegAgeLbl', 'YAŞ');</div><div>&nbsp; RegAgeLbl.Align = alTop;</div><div>&nbsp; RegAgeLbl.Height = 20;</div><div>&nbsp; RegAgeLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#888888');</div><div>&nbsp; RegAgeLbl.clProSettings.FontSize = 10;</div><div>&nbsp; RegAgeLbl.SetclProSettings(RegAgeLbl.clProSettings);</div><div><br></div><div>&nbsp; RegAgeCombo = MainForm.AddNewComboBox(RegAgePnl, 'RegAgeCombo');</div><div>&nbsp; RegAgeCombo.Align = alClient;</div><div>&nbsp; RegAgeCombo.Margins.Bottom = 15;</div><div>&nbsp;&nbsp;</div><div>&nbsp; ageIndex = 10;</div><div>&nbsp; while (ageIndex &lt;= 100)</div><div>&nbsp; {</div><div>&nbsp; &nbsp; RegAgeCombo.AddItem(IntToStr(ageIndex), IntToStr(ageIndex));</div><div>&nbsp; &nbsp; ageIndex = ageIndex + 1;</div><div>&nbsp; }</div><div><br></div><div>&nbsp; RegTCPnl = MainForm.AddNewProPanel(RegScrollBox, 'RegTCPnl');</div><div>&nbsp; RegTCPnl.Align = alTop;</div><div>&nbsp; RegTCPnl.Height = 80;</div><div>&nbsp; RegTCPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');</div><div>&nbsp; RegTCPnl.SetclProSettings(RegTCPnl.clProSettings);</div><div><br></div><div>&nbsp; RegTCLbl = MainForm.AddNewProLabel(RegTCPnl, 'RegTCLbl', 'TC KİMLİK NO');</div><div>&nbsp; RegTCLbl.Align = alTop;</div><div>&nbsp; RegTCLbl.Height = 20;</div><div>&nbsp; RegTCLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#888888');</div><div>&nbsp; RegTCLbl.clProSettings.FontSize = 10;</div><div>&nbsp; RegTCLbl.SetclProSettings(RegTCLbl.clProSettings);</div><div><br></div><div>&nbsp; RegTCEdt = MainForm.AddNewProEdit(RegTCPnl, 'RegTCEdt', '');</div><div>&nbsp; RegTCEdt.Align = alClient;</div><div>&nbsp; RegTCEdt.Margins.Bottom = 15;</div><div>&nbsp; RegTCEdt.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FFFFFF');</div><div>&nbsp; RegTCEdt.clProSettings.BorderColor = clAlphaColor.clHexToColor('#DDDDDD');</div><div>&nbsp; RegTCEdt.clProSettings.BorderWidth = 1;</div><div>&nbsp; RegTCEdt.SetclProSettings(RegTCEdt.clProSettings);</div><div>&nbsp; MainForm.AddNewEvent(RegTCEdt, tbeOnChange, 'OnNumberOnlyChange');</div><div><br></div><div>&nbsp; RegPhonePnl = MainForm.AddNewProPanel(RegScrollBox, 'RegPhonePnl');</div><div>&nbsp; RegPhonePnl.Align = alTop;</div><div>&nbsp; RegPhonePnl.Height = 80;</div><div>&nbsp; RegPhonePnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');</div><div>&nbsp; RegPhonePnl.SetclProSettings(RegPhonePnl.clProSettings);</div><div><br></div><div>&nbsp; RegPhoneLbl = MainForm.AddNewProLabel(RegPhonePnl, 'RegPhoneLbl', 'TELEFON (Başında 0 olmadan 10 haneli)');</div><div>&nbsp; RegPhoneLbl.Align = alTop;</div><div>&nbsp; RegPhoneLbl.Height = 20;</div><div>&nbsp; RegPhoneLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#888888');</div><div>&nbsp; RegPhoneLbl.clProSettings.FontSize = 10;</div><div>&nbsp; RegPhoneLbl.SetclProSettings(RegPhoneLbl.clProSettings);</div><div><br></div><div>&nbsp; RegPhoneEdt = MainForm.AddNewProEdit(RegPhonePnl, 'RegPhoneEdt', '');</div><div>&nbsp; RegPhoneEdt.Align = alClient;</div><div>&nbsp; RegPhoneEdt.Margins.Bottom = 15;</div><div>&nbsp; RegPhoneEdt.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FFFFFF');</div><div>&nbsp; RegPhoneEdt.clProSettings.BorderColor = clAlphaColor.clHexToColor('#DDDDDD');</div><div>&nbsp; RegPhoneEdt.clProSettings.BorderWidth = 1;</div><div>&nbsp; RegPhoneEdt.SetclProSettings(RegPhoneEdt.clProSettings);</div><div>&nbsp; MainForm.AddNewEvent(RegPhoneEdt, tbeOnChange, 'OnNumberOnlyChange');</div><div><br></div><div>&nbsp; RegAddressPnl = MainForm.AddNewProPanel(RegScrollBox, 'RegAddressPnl');</div><div>&nbsp; RegAddressPnl.Align = alTop;</div><div>&nbsp; RegAddressPnl.Height = 120;</div><div>&nbsp; RegAddressPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');</div><div>&nbsp; RegAddressPnl.SetclProSettings(RegAddressPnl.clProSettings);</div><div><br></div><div>&nbsp; RegAddressLbl = MainForm.AddNewProLabel(RegAddressPnl, 'RegAddressLbl', 'ADRES');</div><div>&nbsp; RegAddressLbl.Align = alTop;</div><div>&nbsp; RegAddressLbl.Height = 20;</div><div>&nbsp; RegAddressLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#888888');</div><div>&nbsp; RegAddressLbl.clProSettings.FontSize = 10;</div><div>&nbsp; RegAddressLbl.SetclProSettings(RegAddressLbl.clProSettings);</div><div><br></div><div>&nbsp; RegAddressMemo = MainForm.AddNewMemo(RegAddressPnl, 'RegAddressMemo', '');</div><div>&nbsp; RegAddressMemo.Align = alClient;</div><div>&nbsp; RegAddressMemo.Margins.Bottom = 15;</div><div><br></div><div>&nbsp; RegAccountTitleLbl = MainForm.AddNewProLabel(RegScrollBox, 'RegAccountTitleLbl', 'HESAP BİLGİLERİ');</div><div>&nbsp; RegAccountTitleLbl.Align = alTop;</div><div>&nbsp; RegAccountTitleLbl.Height = 25;</div><div>&nbsp; RegAccountTitleLbl.Margins.Top = 15;</div><div>&nbsp; RegAccountTitleLbl.Margins.Bottom = 10;</div><div>&nbsp; RegAccountTitleLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#888888');</div><div>&nbsp; RegAccountTitleLbl.clProSettings.FontSize = 11;</div><div>&nbsp; RegAccountTitleLbl.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; RegAccountTitleLbl.SetclProSettings(RegAccountTitleLbl.clProSettings);</div><div><br></div><div>&nbsp; RegEmailPnl = MainForm.AddNewProPanel(RegScrollBox, 'RegEmailPnl');</div><div>&nbsp; RegEmailPnl.Align = alTop;</div><div>&nbsp; RegEmailPnl.Height = 80;</div><div>&nbsp; RegEmailPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');</div><div>&nbsp; RegEmailPnl.SetclProSettings(RegEmailPnl.clProSettings);</div><div><br></div><div>&nbsp; RegEmailLbl = MainForm.AddNewProLabel(RegEmailPnl, 'RegEmailLbl', 'E-POSTA');</div><div>&nbsp; RegEmailLbl.Align = alTop;</div><div>&nbsp; RegEmailLbl.Height = 20;</div><div>&nbsp; RegEmailLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#888888');</div><div>&nbsp; RegEmailLbl.clProSettings.FontSize = 10;</div><div>&nbsp; RegEmailLbl.SetclProSettings(RegEmailLbl.clProSettings);</div><div><br></div><div>&nbsp; RegEmailEdt = MainForm.AddNewProEdit(RegEmailPnl, 'RegEmailEdt', '');</div><div>&nbsp; RegEmailEdt.Align = alClient;</div><div>&nbsp; RegEmailEdt.Margins.Bottom = 15;</div><div>&nbsp; RegEmailEdt.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FFFFFF');</div><div>&nbsp; RegEmailEdt.clProSettings.BorderColor = clAlphaColor.clHexToColor('#DDDDDD');</div><div>&nbsp; RegEmailEdt.clProSettings.BorderWidth = 1;</div><div>&nbsp; RegEmailEdt.SetclProSettings(RegEmailEdt.clProSettings);</div><div><br></div><div>&nbsp; RegPasswordPnl = MainForm.AddNewProPanel(RegScrollBox, 'RegPasswordPnl');</div><div>&nbsp; RegPasswordPnl.Align = alTop;</div><div>&nbsp; RegPasswordPnl.Height = 80;</div><div>&nbsp; RegPasswordPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');</div><div>&nbsp; RegPasswordPnl.SetclProSettings(RegPasswordPnl.clProSettings);</div><div><br></div><div>&nbsp; RegPasswordLbl = MainForm.AddNewProLabel(RegPasswordPnl, 'RegPasswordLbl', 'ŞİFRE');</div><div>&nbsp; RegPasswordLbl.Align = alTop;</div><div>&nbsp; RegPasswordLbl.Height = 20;</div><div>&nbsp; RegPasswordLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#888888');</div><div>&nbsp; RegPasswordLbl.clProSettings.FontSize = 10;</div><div>&nbsp; RegPasswordLbl.SetclProSettings(RegPasswordLbl.clProSettings);</div><div><br></div><div>&nbsp; RegPasswordEdt = MainForm.AddNewProEdit(RegPasswordPnl, 'RegPasswordEdt', '');</div><div>&nbsp; RegPasswordEdt.Align = alClient;</div><div>&nbsp; RegPasswordEdt.Margins.Bottom = 15;</div><div>&nbsp; RegPasswordEdt.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FFFFFF');</div><div>&nbsp; RegPasswordEdt.clProSettings.BorderColor = clAlphaColor.clHexToColor('#DDDDDD');</div><div>&nbsp; RegPasswordEdt.clProSettings.BorderWidth = 1;</div><div>&nbsp; RegPasswordEdt.SetclProSettings(RegPasswordEdt.clProSettings);</div><div><br></div><div>&nbsp; RegPasswordRepPnl = MainForm.AddNewProPanel(RegScrollBox, 'RegPasswordRepPnl');</div><div>&nbsp; RegPasswordRepPnl.Align = alTop;</div><div>&nbsp; RegPasswordRepPnl.Height = 80;</div><div>&nbsp; RegPasswordRepPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');</div><div>&nbsp; RegPasswordRepPnl.SetclProSettings(RegPasswordRepPnl.clProSettings);</div><div><br></div><div>&nbsp; RegPasswordRepLbl = MainForm.AddNewProLabel(RegPasswordRepPnl, 'RegPasswordRepLbl', 'ŞİFRE TEKRAR');</div><div>&nbsp; RegPasswordRepLbl.Align = alTop;</div><div>&nbsp; RegPasswordRepLbl.Height = 20;</div><div>&nbsp; RegPasswordRepLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#888888');</div><div>&nbsp; RegPasswordRepLbl.clProSettings.FontSize = 10;</div><div>&nbsp; RegPasswordRepLbl.SetclProSettings(RegPasswordRepLbl.clProSettings);</div><div><br></div><div>&nbsp; RegPasswordRepEdt = MainForm.AddNewProEdit(RegPasswordRepPnl, 'RegPasswordRepEdt', '');</div><div>&nbsp; RegPasswordRepEdt.Align = alClient;</div><div>&nbsp; RegPasswordRepEdt.Margins.Bottom = 15;</div><div>&nbsp; RegPasswordRepEdt.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FFFFFF');</div><div>&nbsp; RegPasswordRepEdt.clProSettings.BorderColor = clAlphaColor.clHexToColor('#DDDDDD');</div><div>&nbsp; RegPasswordRepEdt.clProSettings.BorderWidth = 1;</div><div>&nbsp; RegPasswordRepEdt.SetclProSettings(RegPasswordRepEdt.clProSettings);</div><div><br></div><div>&nbsp; // YÖNETİCİ DAVET KODU EKRANI EKLENDİ</div><div>&nbsp; RegAdminCodePnl = MainForm.AddNewProPanel(RegScrollBox, 'RegAdminCodePnl');</div><div>&nbsp; RegAdminCodePnl.Align = alTop;</div><div>&nbsp; RegAdminCodePnl.Height = 80;</div><div>&nbsp; RegAdminCodePnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');</div><div>&nbsp; RegAdminCodePnl.SetclProSettings(RegAdminCodePnl.clProSettings);</div><div><br></div><div>&nbsp; RegAdminCodeLbl = MainForm.AddNewProLabel(RegAdminCodePnl, 'RegAdminCodeLbl', 'YÖNETİCİ DAVET KODU (Kullanıcı iseniz boş bırakın)');</div><div>&nbsp; RegAdminCodeLbl.Align = alTop;</div><div>&nbsp; RegAdminCodeLbl.Height = 20;</div><div>&nbsp; RegAdminCodeLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#D81B60'); // Dikkat çekmesi için farklı renk</div><div>&nbsp; RegAdminCodeLbl.clProSettings.FontSize = 10;</div><div>&nbsp; RegAdminCodeLbl.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; RegAdminCodeLbl.SetclProSettings(RegAdminCodeLbl.clProSettings);</div><div><br></div><div>&nbsp; RegAdminCodeEdt = MainForm.AddNewProEdit(RegAdminCodePnl, 'RegAdminCodeEdt', '');</div><div>&nbsp; RegAdminCodeEdt.Align = alClient;</div><div>&nbsp; RegAdminCodeEdt.Margins.Bottom = 15;</div><div>&nbsp; RegAdminCodeEdt.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FFFFFF');</div><div>&nbsp; RegAdminCodeEdt.clProSettings.BorderColor = clAlphaColor.clHexToColor('#DDDDDD');</div><div>&nbsp; RegAdminCodeEdt.clProSettings.BorderWidth = 1;</div><div>&nbsp; RegAdminCodeEdt.SetclProSettings(RegAdminCodeEdt.clProSettings);</div><div><br></div><div>&nbsp; RegBottomPnl = MainForm.AddNewProPanel(RegMainPnl, 'RegBottomPnl');</div><div>&nbsp; RegBottomPnl.Align = alBottom;</div><div>&nbsp; RegBottomPnl.Height = 70;</div><div>&nbsp; RegBottomPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');</div><div>&nbsp; RegBottomPnl.SetclProSettings(RegBottomPnl.clProSettings);</div><div><br></div><div>&nbsp; RegSubmitBtn = MainForm.AddNewProButton(RegBottomPnl, 'RegSubmitBtn', 'Kayıt Tamamla');</div><div>&nbsp; RegSubmitBtn.Align = alClient;</div><div>&nbsp; RegSubmitBtn.Margins.Top = 15;</div><div>&nbsp; RegSubmitBtn.Margins.Bottom = 15;</div><div>&nbsp; RegSubmitBtn.Margins.Left = 15;</div><div>&nbsp; RegSubmitBtn.Margins.Right = 15;</div><div>&nbsp; RegSubmitBtn.clProSettings.RoundHeight = 5;</div><div>&nbsp; RegSubmitBtn.clProSettings.RoundWidth = 5;</div><div>&nbsp; RegSubmitBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#36212E');</div><div>&nbsp; RegSubmitBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF');</div><div>&nbsp; RegSubmitBtn.clProSettings.FontSize = 16;</div><div>&nbsp; RegSubmitBtn.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; RegSubmitBtn.SetclProSettings(RegSubmitBtn.clProSettings);</div><div>&nbsp;&nbsp;</div><div>&nbsp; MainForm.AddNewEvent(RegSubmitBtn, tbeOnClick, 'CloseRegister');</div><div>}</div><div><br></div><div>void SetupUI;</div><div>{</div><div>&nbsp; LoginMainPnl = MainForm.AddNewProPanel(ScaledLayout, 'LoginMainPnl');</div><div>&nbsp; LoginMainPnl.Align = alClient;</div><div>&nbsp; LoginMainPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');</div><div>&nbsp; LoginMainPnl.SetclProSettings(LoginMainPnl.clProSettings);</div><div><br></div><div>&nbsp; TopPnl = MainForm.AddNewProPanel(LoginMainPnl, 'TopPnl');</div><div>&nbsp; TopPnl.Align = alTop;</div><div>&nbsp; TopPnl.Margins.Top = -50;</div><div>&nbsp; TopPnl.Height = 300;</div><div>&nbsp; TopPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#36212E');</div><div>&nbsp; TopPnl.clProSettings.RoundHeight = 40;</div><div>&nbsp; TopPnl.clProSettings.RoundWidth = 40;</div><div>&nbsp; TopPnl.SetclProSettings(TopPnl.clProSettings);</div><div><br></div><div>&nbsp; IconImg = MainForm.AddNewProImage(TopPnl, 'IconImg');</div><div>&nbsp; IconImg.Align = alTop;</div><div>&nbsp; IconImg.Height = 50;</div><div>&nbsp; IconImg.Margins.Top = 120;</div><div>&nbsp; IconImg.Margins.Bottom = 20;</div><div>&nbsp; MainForm.SetImage(IconImg, '<a href="https://cdn-ic&#111;ns-png.flatic&#111;n.com/512/3145/3145765.png" target="_blank" rel="nofollow">https://cdn-icons-png.flaticon.com/512/3145/3145765.png</a>');</div><div><br></div><div>&nbsp; AppTitleLbl = MainForm.AddNewProLabel(TopPnl, 'AppTitleLbl', 'Arşiv');</div><div>&nbsp; AppTitleLbl.Align = alTop;</div><div>&nbsp; AppTitleLbl.Height = 40;</div><div>&nbsp; AppTitleLbl.Margins.Top = 10;</div><div>&nbsp; AppTitleLbl.Margins.Left = 135;</div><div>&nbsp; AppTitleLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF');</div><div>&nbsp; AppTitleLbl.clProSettings.FontSize = 32;</div><div>&nbsp; AppTitleLbl.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; AppTitleLbl.SetclProSettings(AppTitleLbl.clProSettings);</div><div><br></div><div>&nbsp; AppSubTitleLbl = MainForm.AddNewProLabel(TopPnl, 'AppSubTitleLbl', 'KÜTÜPHANE SİSTEMİ');</div><div>&nbsp; AppSubTitleLbl.Align = alTop;</div><div>&nbsp; AppSubTitleLbl.Height = 20;</div><div>&nbsp; AppSubTitleLbl.Margins.Top = 5;</div><div>&nbsp; AppSubTitleLbl.Margins.Left = 120;</div><div>&nbsp; AppSubTitleLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#B09A9E');</div><div>&nbsp; AppSubTitleLbl.clProSettings.FontSize = 12;</div><div>&nbsp; AppSubTitleLbl.SetclProSettings(AppSubTitleLbl.clProSettings);</div><div><br></div><div>&nbsp; ContentPnl = MainForm.AddNewProPanel(LoginMainPnl, 'ContentPnl');</div><div>&nbsp; ContentPnl.Align = alClient;</div><div>&nbsp; ContentPnl.Margins.Left = 30;</div><div>&nbsp; ContentPnl.Margins.Right = 30;</div><div>&nbsp; ContentPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');</div><div>&nbsp; ContentPnl.SetclProSettings(ContentPnl.clProSettings);</div><div><br></div><div>&nbsp; WelcomeLbl = MainForm.AddNewProLabel(ContentPnl, 'WelcomeLbl', 'Hoş geldiniz');</div><div>&nbsp; WelcomeLbl.Align = alTop;</div><div>&nbsp; WelcomeLbl.Height = 35;</div><div>&nbsp; WelcomeLbl.Margins.Top = 30;</div><div>&nbsp; WelcomeLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#222222');</div><div>&nbsp; WelcomeLbl.clProSettings.FontSize = 24;</div><div>&nbsp; WelcomeLbl.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; WelcomeLbl.SetclProSettings(WelcomeLbl.clProSettings);</div><div><br></div><div>&nbsp; SubWelcomeLbl = MainForm.AddNewProLabel(ContentPnl, 'SubWelcomeLbl', 'Devam etmek için giriş yapın');</div><div>&nbsp; SubWelcomeLbl.Align = alTop;</div><div>&nbsp; SubWelcomeLbl.Height = 20;</div><div>&nbsp; SubWelcomeLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#888888');</div><div>&nbsp; SubWelcomeLbl.clProSettings.FontSize = 12;</div><div>&nbsp; SubWelcomeLbl.SetclProSettings(SubWelcomeLbl.clProSettings);</div><div><br></div><div>&nbsp; EmailTitleLbl = MainForm.AddNewProLabel(ContentPnl, 'EmailTitleLbl', 'E-POSTA');</div><div>&nbsp; EmailTitleLbl.Align = alTop;</div><div>&nbsp; EmailTitleLbl.Height = 20;</div><div>&nbsp; EmailTitleLbl.Margins.Top = 30;</div><div>&nbsp; EmailTitleLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#888888');</div><div>&nbsp; EmailTitleLbl.clProSettings.FontSize = 10;</div><div>&nbsp; EmailTitleLbl.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; EmailTitleLbl.SetclProSettings(EmailTitleLbl.clProSettings);</div><div><br></div><div>&nbsp; EmailPnl = MainForm.AddNewProPanel(ContentPnl, 'EmailPnl');</div><div>&nbsp; EmailPnl.Align = alTop;</div><div>&nbsp; EmailPnl.Height = 50;</div><div>&nbsp; EmailPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FFFFFF');</div><div>&nbsp; EmailPnl.clProSettings.BorderColor = clAlphaColor.clHexToColor('#DDDDDD');</div><div>&nbsp; EmailPnl.clProSettings.BorderWidth = 1;</div><div>&nbsp; EmailPnl.SetclProSettings(EmailPnl.clProSettings);</div><div><br></div><div>&nbsp; EmailEdt = MainForm.AddNewProEdit(EmailPnl, 'EmailEdt', '');</div><div>&nbsp; EmailEdt.Align = alClient;</div><div>&nbsp; EmailEdt.Margins.Top = 15;</div><div>&nbsp; EmailEdt.Margins.Bottom = 15;</div><div>&nbsp; EmailEdt.Margins.Left = 10;</div><div>&nbsp; EmailEdt.Margins.Right = 10;</div><div>&nbsp; EmailEdt.clProSettings.FontSize = 14;</div><div>&nbsp; EmailEdt.SetclProSettings(EmailEdt.clProSettings);</div><div><br></div><div>&nbsp; PasswordTitleLbl = MainForm.AddNewProLabel(ContentPnl, 'PasswordTitleLbl', 'ŞİFRE');</div><div>&nbsp; PasswordTitleLbl.Align = alTop;</div><div>&nbsp; PasswordTitleLbl.Height = 20;</div><div>&nbsp; PasswordTitleLbl.Margins.Top = 20;</div><div>&nbsp; PasswordTitleLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#888888');</div><div>&nbsp; PasswordTitleLbl.clProSettings.FontSize = 10;</div><div>&nbsp; PasswordTitleLbl.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; PasswordTitleLbl.SetclProSettings(PasswordTitleLbl.clProSettings);</div><div><br></div><div>&nbsp; PasswordPnl = MainForm.AddNewProPanel(ContentPnl, 'PasswordPnl');</div><div>&nbsp; PasswordPnl.Align = alTop;</div><div>&nbsp; PasswordPnl.Height = 50;</div><div>&nbsp; PasswordPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FFFFFF');</div><div>&nbsp; PasswordPnl.clProSettings.BorderColor = clAlphaColor.clHexToColor('#DDDDDD');</div><div>&nbsp; PasswordPnl.clProSettings.BorderWidth = 1;</div><div>&nbsp; PasswordPnl.SetclProSettings(PasswordPnl.clProSettings);</div><div><br></div><div>&nbsp; PasswordEdt = MainForm.AddNewProEdit(PasswordPnl, 'PasswordEdt', '');</div><div>&nbsp; PasswordEdt.Align = alClient;</div><div>&nbsp; PasswordEdt.Margins.Top = 15;</div><div>&nbsp; PasswordEdt.Margins.Bottom = 15;</div><div>&nbsp; PasswordEdt.Margins.Left = 10;</div><div>&nbsp; PasswordEdt.Margins.Right = 10;</div><div>&nbsp; PasswordEdt.clProSettings.FontSize = 14;</div><div>&nbsp; PasswordEdt.SetclProSettings(PasswordEdt.clProSettings);</div><div><br></div><div>&nbsp; ForgotPwdPnl = MainForm.AddNewProPanel(ContentPnl, 'ForgotPwdPnl');</div><div>&nbsp; ForgotPwdPnl.Align = alTop;</div><div>&nbsp; ForgotPwdPnl.Height = 25;</div><div>&nbsp; ForgotPwdPnl.Margins.Top = 5;</div><div>&nbsp; ForgotPwdPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');</div><div>&nbsp; ForgotPwdPnl.SetclProSettings(ForgotPwdPnl.clProSettings);</div><div><br></div><div>&nbsp; ForgotPwdBtn = MainForm.AddNewProButton(ForgotPwdPnl, 'ForgotPwdBtn', 'Şifremi unuttum');</div><div>&nbsp; ForgotPwdBtn.Align = alRight;&nbsp;</div><div>&nbsp; ForgotPwdBtn.Width = 100;</div><div>&nbsp; ForgotPwdBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#B8860B');&nbsp;</div><div>&nbsp; ForgotPwdBtn.clProSettings.FontSize = 11;</div><div>&nbsp; ForgotPwdBtn.SetclProSettings(ForgotPwdBtn.clProSettings);</div><div><br></div><div>&nbsp; BottomPnl = MainForm.AddNewProPanel(ContentPnl, 'BottomPnl');</div><div>&nbsp; BottomPnl.Align = alBottom;</div><div>&nbsp; BottomPnl.Height = 120;</div><div>&nbsp; BottomPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');</div><div>&nbsp; BottomPnl.SetclProSettings(BottomPnl.clProSettings);</div><div><br></div><div>&nbsp; LoginBtn = MainForm.AddNewProButton(BottomPnl, 'LoginBtn', '&#10132; Giriş Yap');</div><div>&nbsp; LoginBtn.Align = alTop;</div><div>&nbsp; LoginBtn.Height = 55;</div><div>&nbsp; LoginBtn.Margins.Top = 15;</div><div>&nbsp; LoginBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#36212E');</div><div>&nbsp; LoginBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF');</div><div>&nbsp; LoginBtn.clProSettings.FontSize = 16;</div><div>&nbsp; LoginBtn.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; LoginBtn.clProSettings.RoundHeight = 5;</div><div>&nbsp; LoginBtn.clProSettings.RoundWidth = 5;</div><div>&nbsp; LoginBtn.SetclProSettings(LoginBtn.clProSettings);</div><div>&nbsp;&nbsp;</div><div>&nbsp; RegisterWrapPnl = MainForm.AddNewProPanel(BottomPnl, 'RegisterWrapPnl');</div><div>&nbsp; RegisterWrapPnl.Align = alTop;</div><div>&nbsp; RegisterWrapPnl.Height = 30;</div><div>&nbsp; RegisterWrapPnl.Margins.Top = 15;</div><div>&nbsp; RegisterWrapPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');&nbsp;</div><div>&nbsp; RegisterWrapPnl.SetclProSettings(RegisterWrapPnl.clProSettings);</div><div><br></div><div>&nbsp; RegisterLbl = MainForm.AddNewProLabel(RegisterWrapPnl, 'RegisterLbl', 'Hesabınız yok mu?');</div><div>&nbsp; RegisterLbl.Align = alLeft;&nbsp;</div><div>&nbsp; RegisterLbl.Width = 110;&nbsp;</div><div>&nbsp; RegisterLbl.Margins.Left = 60;</div><div>&nbsp; RegisterLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#888888');</div><div>&nbsp; RegisterLbl.clProSettings.FontSize = 12;</div><div>&nbsp; RegisterLbl.SetclProSettings(RegisterLbl.clProSettings);</div><div>&nbsp;&nbsp;</div><div>&nbsp; RegisterBtn = MainForm.AddNewProButton(RegisterWrapPnl, 'RegisterBtn', 'Kayıt ol');</div><div>&nbsp; RegisterBtn.Align = alLeft;&nbsp;</div><div>&nbsp; RegisterBtn.Width = 50;&nbsp;</div><div>&nbsp; RegisterBtn.Margins.Bottom = 15;</div><div>&nbsp; RegisterBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#B8860B');&nbsp;</div><div>&nbsp; RegisterBtn.clProSettings.FontSize = 14;</div><div>&nbsp; RegisterBtn.SetclProSettings(RegisterBtn.clProSettings);</div><div>&nbsp;&nbsp;</div><div>&nbsp; MainForm.AddNewEvent(LoginBtn, tbeOnClick, 'CheckLogin');&nbsp;</div><div>&nbsp; MainForm.AddNewEvent(RegisterBtn, tbeOnClick, 'OpenRegister');</div><div><br></div><div>&nbsp; ActionTimer = MainForm.AddNewTimer(MainForm, 'ActionTimer', 100);</div><div>&nbsp; ActionTimer.Enabled = False;</div><div>&nbsp; MainForm.AddNewEvent(ActionTimer, tbeOnTimer, 'OnActionTimerTick');</div><div><br></div><div>&nbsp; SetupRegisterUI;</div><div>}</div><div><br></div><div>{</div><div>&nbsp; MainForm = TCLForm.Create(Self);&nbsp;</div><div>&nbsp; MainForm.SetFormColor('#F0EBE1', '#F0EBE1', clGVertical);</div><div><br></div><div>&nbsp; ScaledLayout = MainForm.AddNewScaledLayout(MainForm, 'ScaledLayout');&nbsp;</div><div>&nbsp; ScaledLayout.Align = alClient;&nbsp;</div><div>&nbsp; ScaledLayout.OriginalHeight = 750;&nbsp;</div><div>&nbsp; ScaledLayout.OriginalWidth = 350;&nbsp;</div><div><br></div><div>&nbsp; SetupUI;</div><div>&nbsp;&nbsp;</div><div>&nbsp; MainForm.FormWaiting.Visible = False;&nbsp;</div><div>&nbsp; MainForm.BtnFormMenu.Visible = False;&nbsp;</div><div>&nbsp; MainForm.BtnGoBack.Visible = False;&nbsp;</div><div>&nbsp; MainForm.LytTopBar.Visible = False;</div><div>&nbsp; MainForm.Run;&nbsp;</div><div>}</div><a href="https://static.cloudflareinsights.com/beac&#111;n.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" target="_blank" rel="nofollow">https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496"</a> integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon="{&quot;version&quot;:&quot;2024.11.0&quot;,&quot;token&quot;:&quot;439455f3e46c40b98dbd42a2f1a954d8&quot;,&quot;r&quot;:1,&quot;server_timing&quot;:{&quot;name&quot;:{&quot;cfCacheStatus&quot;:true,&quot;cfEdge&quot;:true,&quot;cfExtPri&quot;:true,&quot;cfL4&quot;:true,&quot;cfOrigin&quot;:true,&quot;cfSpeedBrain&quot;:true},&quot;location_startswith&quot;:null}}" crossorigin="anonymous">]]>
   </description>
   <pubDate>Tue, 07 Jul 2026 13:20:45 +0000</pubDate>
   <guid isPermaLink="true">https://forum.clomosy.com.tr/forum_posts.asp?TID=1593&amp;PID=3688#3688</guid>
  </item> 
  <item>
   <title><![CDATA[Bunun nasıl daha hızlı çalışmasını sağlayabiliriz? : Merhabaibrahim projen bulut tabanl&#305;...]]></title>
   <link>https://forum.clomosy.com.tr/forum_posts.asp?TID=1593&amp;PID=3687#3687</link>
   <description>
    <![CDATA[<strong>Yazar:</strong> <a href="https://forum.clomosy.com.tr/member_profile.asp?PF=249">kayra12</a><br /><strong>Konu:</strong> 1593<br /><strong>Gönderim Zamanı:</strong> 07&nbsp;Temmuz&nbsp;2026 Saat 13:07<br /><br />Merhaba&nbsp;<span style=": rgb251, 251, 253;"><font face="Arial, Helvetica, sans-serif"><span style="font-size: 15px;"><b>ibrahim projen bulut tabanlı olduğu için ve&nbsp;</b></span></font></span><b -path-to-node="0" -index-in-node="36">Firebase bağlı olduğu için şunda daha fazla hızlandırma olmuyor bilginize</b><a href="https://static.cloudflareinsights.com/beac&#111;n.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" target="_blank" rel="nofollow">https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496"</a> integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon="{&quot;version&quot;:&quot;2024.11.0&quot;,&quot;token&quot;:&quot;439455f3e46c40b98dbd42a2f1a954d8&quot;,&quot;r&quot;:1,&quot;server_timing&quot;:{&quot;name&quot;:{&quot;cfCacheStatus&quot;:true,&quot;cfEdge&quot;:true,&quot;cfExtPri&quot;:true,&quot;cfL4&quot;:true,&quot;cfOrigin&quot;:true,&quot;cfSpeedBrain&quot;:true},&quot;location_startswith&quot;:null}}" crossorigin="anonymous">]]>
   </description>
   <pubDate>Tue, 07 Jul 2026 13:07:35 +0000</pubDate>
   <guid isPermaLink="true">https://forum.clomosy.com.tr/forum_posts.asp?TID=1593&amp;PID=3687#3687</guid>
  </item> 
  <item>
   <title><![CDATA[Bunun nasıl daha hızlı çalışmasını sağlayabiliriz? : //uses Main;var Form1: TCLForm;...]]></title>
   <link>https://forum.clomosy.com.tr/forum_posts.asp?TID=1593&amp;PID=3677#3677</link>
   <description>
    <![CDATA[<strong>Yazar:</strong> <a href="https://forum.clomosy.com.tr/member_profile.asp?PF=468">ibrahimBsr</a><br /><strong>Konu:</strong> 1593<br /><strong>Gönderim Zamanı:</strong> 07&nbsp;Temmuz&nbsp;2026 Saat 10:11<br /><br /><div>//uses Main;</div><div><br></div><div>var</div><div>&nbsp; Form1: TCLForm;</div><div>&nbsp; ScaledLayout: TclScaledLayout;</div><div>&nbsp;&nbsp;</div><div>&nbsp; HeaderPnl, LogoLeftPnl, ActionRightPnl, PageTitlePnl, DividerPnl, SearchWrapPnl, SearchPnl, CountPnl, BottomMenuPnl: TclProPanel;</div><div>&nbsp; TitleLbl, SubTitleLbl, PageTitleLbl, CountLbl: TclProLabel;</div><div>&nbsp; SearchEdt: TclProEdit;</div><div>&nbsp; ProfileBtn, ViewToggleBtn, LSummaryBtn, SearchBtn: TclProButton;</div><div>&nbsp; NotifBtn: TclProImage;&nbsp;</div><div>&nbsp; CatalogBtn, BorrowedBtn, QrBtn, MyListBtn, SettingsBtn: TclProButton;</div><div>&nbsp;&nbsp;</div><div>&nbsp; FiltersPnl: TclProPanel;</div><div>&nbsp; FiltersScrollBox: TclHorzScrollBox;</div><div>&nbsp; FilterAllBtn, FilterRomanBtn, FilterBilimBtn, FilterTarihBtn, FilterFelsefeBtn, FilterCocukBtn, FilterGelisimBtn: TclProButton;</div><div>&nbsp;&nbsp;</div><div>&nbsp; BooksScrollBox, DetailScrollBox: TclVertScrollBox;</div><div>&nbsp; GlobalBookCount: Integer;</div><div>&nbsp;&nbsp;</div><div>&nbsp; GlobalNotifMsg: String;&nbsp;</div><div>&nbsp; GlobalNotifCount: Integer;&nbsp;</div><div><br></div><div>&nbsp; GlobalViewMode: String;</div><div>&nbsp; GlobalGridColCount: Integer;</div><div>&nbsp; GlobalGridRowPnl: TclProPanel;</div><div><br></div><div>&nbsp; DetailOverlayPnl, DetailContentPnl, DetailHeaderPnl, DetailFooterPnl: TclProPanel;</div><div>&nbsp; DetailTitleLbl, DetailAuthorLbl, DetailDescLbl: TclProLabel;</div><div>&nbsp; DetailCloseBtn, DetailFavBtn, DetailBorrowBtn: TclProButton;</div><div><br></div><div>&nbsp; AlertOverlayPnl, AlertBoxPnl: TclProPanel;</div><div>&nbsp; AlertMsgLbl: TclProLabel;</div><div>&nbsp; AlertOkBtn: TclProButton;</div><div><br></div><div>&nbsp; GlobalActionTimer, OpenDetailTimer: TclTimer;</div><div>&nbsp; GlobalActionType, GlobalSelectedBookID, GlobalFilterGenre: String;</div><div>&nbsp; GlobalCurrentStock: Integer;</div><div>&nbsp; GlobalBooksList: TclStringList;</div><div><br></div><div>void GoToBorrowed; { Clomosy.RunUnit('uOdunc'); }</div><div>void GoToQR; { Clomosy.RunUnit('uQR'); }</div><div>void GoToListe; { Clomosy.RunUnit('uListe'); }</div><div>void GoToSettings; { Clomosy.RunUnit('uAyarlar'); }</div><div><br></div><div>void CloseDetail;</div><div>{</div><div>&nbsp; DetailOverlayPnl.Visible = False;</div><div>&nbsp; DetailContentPnl.Visible = False;</div><div>}</div><div><br></div><div>void ToggleViewMode;</div><div>var</div><div>&nbsp; clRest: TclRest;</div><div>&nbsp; jsonBody: String;</div><div>{</div><div>&nbsp; if (GlobalViewMode == 'list') GlobalViewMode = 'grid';</div><div>&nbsp; else GlobalViewMode = 'list';</div><div>&nbsp;&nbsp;</div><div>&nbsp; if (Clomosy.GlobalVariableString &lt;&gt; '')</div><div>&nbsp; {</div><div>&nbsp; &nbsp; clRest = TclRest.Create;</div><div>&nbsp; &nbsp; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/settings/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/settings/</a>'+Clomosy.GlobalVariableString+'/viewMode.json';</div><div>&nbsp; &nbsp; clRest.Method = rmPUT;</div><div>&nbsp; &nbsp; clRest.Accept = 'application/json';</div><div>&nbsp; &nbsp; jsonBody = '"' + GlobalViewMode + '"';</div><div>&nbsp; &nbsp; clRest.AddBody(jsonBody, 'application/json');</div><div>&nbsp; &nbsp; clRest.Execute;</div><div>&nbsp; &nbsp; clRest.Free;</div><div>&nbsp; }</div><div>&nbsp; Clomosy.RunUnit('uKatalog');</div><div>}</div><div><br></div><div>void SendNotification(AUser: String; AMsg: String);</div><div>var</div><div>&nbsp; clRest: TclRest;</div><div>&nbsp; notifID, jsonBody: String;</div><div>{</div><div>&nbsp; notifID = FormatDateTime('yymmddhhnnsszzz', Now);</div><div>&nbsp; clRest = TclRest.Create;</div><div>&nbsp; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/notificati&#111;ns/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/notifications/</a>' + AUser + '/' + notifID + '.json';</div><div>&nbsp; clRest.Method = rmPUT;</div><div>&nbsp; clRest.Accept = 'application/json';</div><div>&nbsp; jsonBody = '{"msg":"' + AMsg + '"}';</div><div>&nbsp; clRest.AddBody(jsonBody, 'application/json');</div><div>&nbsp; clRest.Execute;</div><div>&nbsp; clRest.Free;</div><div>&nbsp;&nbsp;</div><div>&nbsp; if (AUser == Clomosy.GlobalVariableString)</div><div>&nbsp; {</div><div>&nbsp; &nbsp; GlobalNotifCount = GlobalNotifCount + 1;</div><div>&nbsp; &nbsp; GlobalNotifMsg = GlobalNotifMsg + '- ' + AMsg + #13#10;</div><div>&nbsp; &nbsp; if (NotifBtn &lt;&gt; nil)</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; NotifBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#D81B60');&nbsp;</div><div>&nbsp; &nbsp; &nbsp; NotifBtn.SetclProSettings(NotifBtn.clProSettings);</div><div>&nbsp; &nbsp; }</div><div>&nbsp; }</div><div>}</div><div><br></div><div>void UpdateModalButtonsStatus(ABookID: String);</div><div>var</div><div>&nbsp; clRest: TclRest;</div><div>&nbsp; bData, currentUser, bookStr, stockStr: String;</div><div>&nbsp; pStart, pEnd, totalStock: Integer;</div><div>&nbsp; userAlreadyBorrowed: Boolean;</div><div>{</div><div>&nbsp; currentUser = Clomosy.GlobalVariableString;</div><div>&nbsp;&nbsp;</div><div>&nbsp; DetailBorrowBtn.Text = 'Ödünç Al';</div><div>&nbsp; DetailBorrowBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#36212E');</div><div>&nbsp; DetailBorrowBtn.Enabled = True;</div><div>&nbsp; DetailBorrowBtn.SetclProSettings(DetailBorrowBtn.clProSettings);</div><div>&nbsp;&nbsp;</div><div>&nbsp; DetailFavBtn.Text = 'Listeme Ekle';</div><div>&nbsp; DetailFavBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#36212E');</div><div>&nbsp; DetailFavBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF');</div><div>&nbsp; DetailFavBtn.clProSettings.BorderWidth = 0;</div><div>&nbsp; DetailFavBtn.SetclProSettings(DetailFavBtn.clProSettings);</div><div>&nbsp;&nbsp;</div><div>&nbsp; if (currentUser == '') Exit;</div><div>&nbsp;&nbsp;</div><div>&nbsp; clRest = TclRest.Create;</div><div>&nbsp; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/books/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/books/</a>' + ABookID + '.json';</div><div>&nbsp; clRest.Method = rmGET;</div><div>&nbsp; clRest.Execute;</div><div>&nbsp; bookStr = clRest.Response;</div><div>&nbsp; clRest.Free;</div><div>&nbsp;&nbsp;</div><div>&nbsp; totalStock = 0;</div><div>&nbsp; if ((bookStr &lt;&gt; 'null') &amp;&amp; (bookStr &lt;&gt; '') &amp;&amp; (bookStr &lt;&gt; '{}'))</div><div>&nbsp; {</div><div>&nbsp; &nbsp; &nbsp;pStart = Pos('"stock":"', bookStr);</div><div>&nbsp; &nbsp; &nbsp;if (pStart &gt; 0)</div><div>&nbsp; &nbsp; &nbsp;{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; pStart = pStart + 9;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; pEnd = Pos('"', Copy(bookStr, pStart, Length(bookStr)));</div><div>&nbsp; &nbsp; &nbsp; &nbsp; stockStr = Copy(bookStr, pStart, pEnd - 1);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; if (stockStr &lt;&gt; '') totalStock = StrToIntDef(stockStr, 0);</div><div>&nbsp; &nbsp; &nbsp;}</div><div>&nbsp; }</div><div>&nbsp; GlobalCurrentStock = totalStock;</div><div>&nbsp;&nbsp;</div><div>&nbsp; clRest = TclRest.Create;</div><div>&nbsp; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/borrowed/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/borrowed/</a>' + ABookID + '.json';</div><div>&nbsp; clRest.Method = rmGET;</div><div>&nbsp; clRest.Execute;</div><div>&nbsp; bData = clRest.Response;</div><div>&nbsp; clRest.Free;</div><div>&nbsp;&nbsp;</div><div>&nbsp; userAlreadyBorrowed = False;</div><div>&nbsp; if ((bData &lt;&gt; 'null') &amp;&amp; (bData &lt;&gt; '') &amp;&amp; (bData &lt;&gt; '{}'))</div><div>&nbsp; {</div><div>&nbsp; &nbsp; &nbsp;if (Pos('"' + currentUser + '"', bData) &gt; 0) userAlreadyBorrowed = True;</div><div>&nbsp; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; if (userAlreadyBorrowed)</div><div>&nbsp; {</div><div>&nbsp; &nbsp; &nbsp; DetailBorrowBtn.Text = 'Zaten Ödünç Aldınız';</div><div>&nbsp; &nbsp; &nbsp; DetailBorrowBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#4CAF50');</div><div>&nbsp; &nbsp; &nbsp; DetailBorrowBtn.Enabled = False;</div><div>&nbsp; &nbsp; &nbsp; DetailBorrowBtn.SetclProSettings(DetailBorrowBtn.clProSettings);</div><div>&nbsp; }</div><div>&nbsp; else if (totalStock &lt;= 0)</div><div>&nbsp; {</div><div>&nbsp; &nbsp; &nbsp; DetailBorrowBtn.Text = 'Stokta Yok';</div><div>&nbsp; &nbsp; &nbsp; DetailBorrowBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#888888');</div><div>&nbsp; &nbsp; &nbsp; DetailBorrowBtn.Enabled = False;</div><div>&nbsp; &nbsp; &nbsp; DetailBorrowBtn.SetclProSettings(DetailBorrowBtn.clProSettings);</div><div>&nbsp; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; clRest = TclRest.Create;</div><div>&nbsp; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/favorites/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/favorites/</a>' + currentUser + '/' + ABookID + '.json';</div><div>&nbsp; clRest.Method = rmGET;</div><div>&nbsp; clRest.Execute;</div><div>&nbsp; bData = clRest.Response;</div><div>&nbsp; clRest.Free;</div><div>&nbsp; if ((bData &lt;&gt; 'null') &amp;&amp; (bData &lt;&gt; '') &amp;&amp; (bData &lt;&gt; '{}'))</div><div>&nbsp; {</div><div>&nbsp; &nbsp; DetailFavBtn.Text = 'Listemde (Çıkar)';</div><div>&nbsp; &nbsp; DetailFavBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FFFFFF');</div><div>&nbsp; &nbsp; DetailFavBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#D81B60');</div><div>&nbsp; &nbsp; DetailFavBtn.clProSettings.BorderColor = clAlphaColor.clHexToColor('#D81B60');</div><div>&nbsp; &nbsp; DetailFavBtn.clProSettings.BorderWidth = 1;</div><div>&nbsp; &nbsp; DetailFavBtn.SetclProSettings(DetailFavBtn.clProSettings);</div><div>&nbsp; }</div><div>}</div><div><br></div><div>void BorrowBookClick;</div><div>var currentUser: String;</div><div>{</div><div>&nbsp; if (DetailBorrowBtn.Text &lt;&gt; 'Ödünç Al') Exit;</div><div>&nbsp; currentUser = Clomosy.GlobalVariableString;</div><div>&nbsp; if (currentUser == '') { ShowMessage('Lütfen giriş yapın.'); Exit; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; GlobalActionType = 'BORROW';</div><div>&nbsp; Form1.FormWaiting.Visible = True;</div><div>&nbsp; GlobalActionTimer.Enabled = True;</div><div>}</div><div><br></div><div>void FavBookClick;</div><div>var currentUser: String;</div><div>{</div><div>&nbsp; currentUser = Clomosy.GlobalVariableString;</div><div>&nbsp; if (currentUser == '') { ShowMessage('Lütfen giriş yapın.'); Exit; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; if (DetailFavBtn.Text == 'Listeme Ekle') GlobalActionType = 'ADD_FAV';</div><div>&nbsp; else GlobalActionType = 'DEL_FAV';</div><div>&nbsp;&nbsp;</div><div>&nbsp; Form1.FormWaiting.Visible = True;</div><div>&nbsp; GlobalActionTimer.Enabled = True;</div><div>}</div><div><br></div><div>void OnOpenDetailTimer;</div><div>var</div><div>&nbsp; SourceTitleLbl, SourceAuthorLbl, SourceSummaryLbl, SourceUrlLbl, SourceGenreLbl: TclProLabel;</div><div>&nbsp; clRestCache: TclRest;</div><div>&nbsp; jsonBody, bCoverUrl: String;</div><div>{</div><div>&nbsp; OpenDetailTimer.Enabled = False;</div><div>&nbsp;&nbsp;</div><div>&nbsp; SourceTitleLbl = TclProLabel(Form1.clFindComponent('Title_' + GlobalSelectedBookID));</div><div>&nbsp; SourceAuthorLbl = TclProLabel(Form1.clFindComponent('Author_' + GlobalSelectedBookID));</div><div>&nbsp; SourceSummaryLbl = TclProLabel(Form1.clFindComponent('Desc_' + GlobalSelectedBookID));</div><div>&nbsp; SourceUrlLbl = TclProLabel(Form1.clFindComponent('CoverUrl_' + GlobalSelectedBookID));&nbsp;</div><div>&nbsp; SourceGenreLbl = TclProLabel(Form1.clFindComponent('Genre_' + GlobalSelectedBookID));&nbsp;</div><div><br></div><div>&nbsp; if (SourceTitleLbl &lt;&gt; nil) DetailTitleLbl.Text = SourceTitleLbl.Text;</div><div>&nbsp; if (SourceAuthorLbl &lt;&gt; nil) DetailAuthorLbl.Text = SourceAuthorLbl.Text;</div><div>&nbsp; if (SourceSummaryLbl &lt;&gt; nil) DetailDescLbl.Text = SourceSummaryLbl.Text;</div><div>&nbsp; else DetailDescLbl.Text = 'Bu kitap için özet bilgisi bulunamadı.';</div><div>&nbsp;&nbsp;</div><div>&nbsp; bCoverUrl = '';</div><div>&nbsp; if (SourceUrlLbl &lt;&gt; nil) bCoverUrl = SourceUrlLbl.Text;</div><div>&nbsp;&nbsp;</div><div>&nbsp; if ((GlobalSelectedBookID &lt;&gt; '') &amp;&amp; (Pos('OL', GlobalSelectedBookID) &gt; 0))</div><div>&nbsp; {</div><div>&nbsp; &nbsp; clRestCache = TclRest.Create;</div><div>&nbsp; &nbsp; clRestCache.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/books/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/books/</a>'+GlobalSelectedBookID+'.json';</div><div>&nbsp; &nbsp; clRestCache.Method = rmGET;</div><div>&nbsp; &nbsp; clRestCache.Execute;</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; // Kitap veritabanında yoksa YENİ EKLE</div><div>&nbsp; &nbsp; if ((clRestCache.Response == 'null') || (clRestCache.Response == '') || (clRestCache.Response == '{}'))</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp;clRestCache.Free;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp;clRestCache = TclRest.Create;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp;clRestCache.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/books/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/books/</a>'+GlobalSelectedBookID+'.json';</div><div>&nbsp; &nbsp; &nbsp; &nbsp;clRestCache.Method = rmPUT;</div><div>&nbsp; &nbsp; &nbsp; &nbsp;clRestCache.Accept = 'application/json';</div><div>&nbsp; &nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp;// BURAYA YENİ KİTAPLAR İÇİN "stock":"0" BİLGİSİ EKLENDİ</div><div>&nbsp; &nbsp; &nbsp; &nbsp;jsonBody = '{"id":"'+GlobalSelectedBookID+'", "title":"'+DetailTitleLbl.Text+'", "author":"'+DetailAuthorLbl.Text+'", "color":"#2E4053", "summary":"OpenLibrary API Kaydı", "cover":"'+bCoverUrl+'", "genre":"'+SourceGenreLbl.Text+'", "stock":"0"}';</div><div>&nbsp; &nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp;clRestCache.AddBody(jsonBody, 'application/json');</div><div>&nbsp; &nbsp; &nbsp; &nbsp;clRestCache.Execute;</div><div>&nbsp; &nbsp; &nbsp; &nbsp;clRestCache.Free;</div><div>&nbsp; &nbsp; }</div><div>&nbsp; &nbsp; else</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp;clRestCache.Free;</div><div>&nbsp; &nbsp; }</div><div>&nbsp; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; // Modal butonlarını güncelle (Eğer stok 0 ise "Stokta Yok" diyecektir)</div><div>&nbsp; if (GlobalSelectedBookID &lt;&gt; '') UpdateModalButtonsStatus(GlobalSelectedBookID);</div><div>&nbsp;&nbsp;</div><div>&nbsp; DetailOverlayPnl.Visible = True;</div><div>&nbsp; DetailContentPnl.Visible = True;</div><div>&nbsp; DetailContentPnl.BringToFront;</div><div>&nbsp; Form1.FormWaiting.Visible = False;</div><div>}</div><div><br></div><div>void OpenDetail;</div><div>var ClickedPnl: TclProPanel;</div><div>{</div><div>&nbsp; ClickedPnl = TclProPanel(Form1.clSender);</div><div>&nbsp; GlobalSelectedBookID = ClickedPnl.clTagStr;&nbsp;</div><div>&nbsp; DetailContentPnl.clTagStr = GlobalSelectedBookID;</div><div>&nbsp;&nbsp;</div><div>&nbsp; Form1.FormWaiting.Visible = True;</div><div>&nbsp; OpenDetailTimer.Enabled = True;</div><div>}</div><div><br></div><div>void CreateBookCard(AID: String; ATitle: String; AAuthor: String; ARating: String; AColor: String; ASummary: String; ACoverUrl: String; AGenre: String);</div><div>var</div><div>&nbsp; LCardPnl, LCoverPnl, LInfoPnl: TclProPanel;</div><div>&nbsp; LTitleLbl, LAuthorLbl, LRatingLbl, LSummaryLbl, LUrlLbl, LGenreLbl: TclProLabel;</div><div>&nbsp; LCoverImg: TclProImage;</div><div>{</div><div>&nbsp; if (GlobalViewMode == 'grid')</div><div>&nbsp; {</div><div>&nbsp; &nbsp; if (GlobalGridColCount == 0)</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; GlobalGridRowPnl = Form1.AddNewProPanel(BooksScrollBox, 'GridRow_' + AID);</div><div>&nbsp; &nbsp; &nbsp; GlobalGridRowPnl.Align = alTop; GlobalGridRowPnl.Height = 160; GlobalGridRowPnl.Margins.Left = 10; GlobalGridRowPnl.Margins.Right = 10; GlobalGridRowPnl.Margins.Top = 10;</div><div>&nbsp; &nbsp; &nbsp; GlobalGridRowPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');</div><div>&nbsp; &nbsp; &nbsp; GlobalGridRowPnl.SetclProSettings(GlobalGridRowPnl.clProSettings);</div><div>&nbsp; &nbsp; }</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; LCardPnl = Form1.AddNewProPanel(GlobalGridRowPnl, 'Card_' + AID);</div><div>&nbsp; &nbsp; LCardPnl.Align = alLeft; LCardPnl.Width = 100; LCardPnl.Margins.Left = 5; LCardPnl.Margins.Right = 5;</div><div>&nbsp; &nbsp; LCardPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FFFFFF'); LCardPnl.clProSettings.BorderColor = clAlphaColor.clHexToColor('#E2DED5'); LCardPnl.clProSettings.BorderWidth = 1; LCardPnl.clProSettings.RoundHeight = 8; LCardPnl.clProSettings.RoundWidth = 8;</div><div>&nbsp; &nbsp; LCardPnl.SetclProSettings(LCardPnl.clProSettings);</div><div>&nbsp; &nbsp; LCardPnl.clTagStr = AID; Form1.AddNewEvent(LCardPnl, tbeOnClick, 'OpenDetail');</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; LUrlLbl = Form1.AddNewProLabel(LCardPnl, 'CoverUrl_' + AID, ACoverUrl); LUrlLbl.Visible = False;</div><div>&nbsp; &nbsp; LSummaryLbl = Form1.AddNewProLabel(LCardPnl, 'Desc_' + AID, ASummary); LSummaryLbl.Visible = False;</div><div>&nbsp; &nbsp; LGenreLbl = Form1.AddNewProLabel(LCardPnl, 'Genre_' + AID, AGenre); LGenreLbl.Visible = False;</div><div>&nbsp; &nbsp; LAuthorLbl = Form1.AddNewProLabel(LCardPnl, 'Author_' + AID, AAuthor); LAuthorLbl.Visible = False;</div><div><br></div><div>&nbsp; &nbsp; LCoverPnl = Form1.AddNewProPanel(LCardPnl, 'Cover_' + AID);</div><div>&nbsp; &nbsp; LCoverPnl.Align = alTop; LCoverPnl.Height = 100; LCoverPnl.Margins.Left = 5; LCoverPnl.Margins.Top = 5; LCoverPnl.Margins.Right = 5;</div><div>&nbsp; &nbsp; LCoverPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor(AColor); LCoverPnl.clProSettings.RoundHeight = 5; LCoverPnl.clProSettings.RoundWidth = 5;</div><div>&nbsp; &nbsp; LCoverPnl.SetclProSettings(LCoverPnl.clProSettings);</div><div>&nbsp; &nbsp; LCoverPnl.clTagStr = AID; Form1.AddNewEvent(LCoverPnl, tbeOnClick, 'OpenDetail');</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; if (ACoverUrl &lt;&gt; '')</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; LCoverImg = Form1.AddNewProImage(LCoverPnl, 'CoverImg_' + AID);</div><div>&nbsp; &nbsp; &nbsp; LCoverImg.Align = alClient; LCoverImg.Margins.Left = 2; LCoverImg.Margins.Right = 2; LCoverImg.Margins.Top = 2; LCoverImg.Margins.Bottom = 2;</div><div>&nbsp; &nbsp; &nbsp; LCoverImg.clProSettings.PictureSource = ACoverUrl; LCoverImg.clProSettings.PictureAutoFit = True;</div><div>&nbsp; &nbsp; &nbsp; LCoverImg.SetclProSettings(LCoverImg.clProSettings);</div><div>&nbsp; &nbsp; &nbsp; LCoverImg.clTagStr = AID; Form1.AddNewEvent(LCoverImg, tbeOnClick, 'OpenDetail');</div><div>&nbsp; &nbsp; }</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; LTitleLbl = Form1.AddNewProLabel(LCardPnl, 'Title_' + AID, ATitle);</div><div>&nbsp; &nbsp; LTitleLbl.Align = alBottom; LTitleLbl.Height = 40; LTitleLbl.Margins.Left = 5; LTitleLbl.Margins.Right = 5; LTitleLbl.Margins.Bottom = 5;</div><div>&nbsp; &nbsp; LTitleLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#002B36'); LTitleLbl.clProSettings.FontSize = 11; LTitleLbl.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;; LTitleLbl.clProSettings.WordWrap = True;</div><div>&nbsp; &nbsp; LTitleLbl.SetclProSettings(LTitleLbl.clProSettings);</div><div>&nbsp; &nbsp; LTitleLbl.clTagStr = AID; Form1.AddNewEvent(LTitleLbl, tbeOnClick, 'OpenDetail');</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; GlobalGridColCount = GlobalGridColCount + 1;</div><div>&nbsp; &nbsp; if (GlobalGridColCount &gt;= 3) GlobalGridColCount = 0;</div><div>&nbsp; }</div><div>&nbsp; else</div><div>&nbsp; {</div><div>&nbsp; &nbsp; LCardPnl = Form1.AddNewProPanel(BooksScrollBox, 'Card_' + AID);</div><div>&nbsp; &nbsp; LCardPnl.Align = alTop; LCardPnl.Height = 110; LCardPnl.Margins.Left = 15; LCardPnl.Margins.Right = 15; LCardPnl.Margins.Bottom = 10;</div><div>&nbsp; &nbsp; LCardPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FFFFFF'); LCardPnl.clProSettings.BorderColor = clAlphaColor.clHexToColor('#E2DED5'); LCardPnl.clProSettings.BorderWidth = 1;</div><div>&nbsp; &nbsp; LCardPnl.SetclProSettings(LCardPnl.clProSettings);</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; LUrlLbl = Form1.AddNewProLabel(LCardPnl, 'CoverUrl_' + AID, ACoverUrl); LUrlLbl.Visible = False;</div><div>&nbsp; &nbsp; LSummaryLbl = Form1.AddNewProLabel(LCardPnl, 'Desc_' + AID, ASummary); LSummaryLbl.Visible = False;</div><div>&nbsp; &nbsp; LGenreLbl = Form1.AddNewProLabel(LCardPnl, 'Genre_' + AID, AGenre); LGenreLbl.Visible = False;</div><div><br></div><div>&nbsp; &nbsp; LCoverPnl = Form1.AddNewProPanel(LCardPnl, 'Cover_' + AID);</div><div>&nbsp; &nbsp; LCoverPnl.Align = alLeft; LCoverPnl.Width = 65; LCoverPnl.Margins.Left = 10; LCoverPnl.Margins.Top = 10; LCoverPnl.Margins.Bottom = 10;</div><div>&nbsp; &nbsp; LCoverPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor(AColor);</div><div>&nbsp; &nbsp; LCoverPnl.SetclProSettings(LCoverPnl.clProSettings);</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; if (ACoverUrl &lt;&gt; '')</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; LCoverImg = Form1.AddNewProImage(LCoverPnl, 'CoverImg_' + AID);</div><div>&nbsp; &nbsp; &nbsp; LCoverImg.Align = alClient; LCoverImg.Margins.Left = 2; LCoverImg.Margins.Right = 2; LCoverImg.Margins.Top = 2; LCoverImg.Margins.Bottom = 2;</div><div>&nbsp; &nbsp; &nbsp; LCoverImg.clProSettings.PictureSource = ACoverUrl; LCoverImg.clProSettings.PictureAutoFit = True;</div><div>&nbsp; &nbsp; &nbsp; LCoverImg.SetclProSettings(LCoverImg.clProSettings);</div><div>&nbsp; &nbsp; }</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; LRatingLbl = Form1.AddNewProLabel(LCardPnl, 'Rating_' + AID, ARating + ' &#9733;' );</div><div>&nbsp; &nbsp; LRatingLbl.Align = alRight; LRatingLbl.Width = 45; LRatingLbl.Margins.Top = 10; LRatingLbl.Margins.Right = 10;</div><div>&nbsp; &nbsp; LRatingLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#B8860B');</div><div>&nbsp; &nbsp; LRatingLbl.SetclProSettings(LRatingLbl.clProSettings);</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; LSummaryBtn = Form1.AddNewProButton(LCardPnl, 'Summary_' + AID, 'Bilgiler');</div><div>&nbsp; &nbsp; LSummaryBtn.Align = alRight; LSummaryBtn.Width = 60; LSummaryBtn.Margins.Top = 50; LSummaryBtn.Margins.Bottom = 25; LSummaryBtn.Margins.Right = -25;</div><div>&nbsp; &nbsp; LSummaryBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF'); LSummaryBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#36212E');</div><div>&nbsp; &nbsp; LSummaryBtn.SetclProSettings(LSummaryBtn.clProSettings);</div><div>&nbsp; &nbsp; LSummaryBtn.clTagStr = AID; Form1.AddNewEvent(LSummaryBtn, tbeOnClick, 'OpenDetail');</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; LInfoPnl = Form1.AddNewProPanel(LCardPnl, 'Info_' + AID);</div><div>&nbsp; &nbsp; LInfoPnl.Align = alClient; LInfoPnl.Margins.Left = 15;</div><div><br></div><div>&nbsp; &nbsp; LTitleLbl = Form1.AddNewProLabel(LInfoPnl, 'Title_' + AID, ATitle);</div><div>&nbsp; &nbsp; LTitleLbl.Align = alTop; LTitleLbl.Height = 25; LTitleLbl.Margins.Top = 15;</div><div>&nbsp; &nbsp; LTitleLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000'); LTitleLbl.clProSettings.FontSize = 16; LTitleLbl.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; &nbsp; LTitleLbl.SetclProSettings(LTitleLbl.clProSettings);</div><div><br></div><div>&nbsp; &nbsp; LAuthorLbl = Form1.AddNewProLabel(LInfoPnl, 'Author_' + AID, AAuthor);</div><div>&nbsp; &nbsp; LAuthorLbl.Align = alTop; LAuthorLbl.Height = 20;</div><div>&nbsp; &nbsp; LAuthorLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#666666');</div><div>&nbsp; &nbsp; LAuthorLbl.SetclProSettings(LAuthorLbl.clProSettings);</div><div>&nbsp; }</div><div>&nbsp; GlobalBookCount = GlobalBookCount + 1;</div><div>}</div><div><br></div><div>void DrawBooks;</div><div>var</div><div>&nbsp; i: Integer;</div><div>&nbsp; clQueryItem: TClJSONQuery;</div><div>&nbsp; jsonArrStr, itemID, itemTitle, itemAuthor, itemRating, itemColor, itemSummary, itemCover, itemGenre: String;</div><div>{</div><div>&nbsp; if (BooksScrollBox &lt;&gt; nil) BooksScrollBox.Free;</div><div>&nbsp; BooksScrollBox = Form1.AddNewVertScrollBox(ScaledLayout, 'BooksScrollBox_' + FormatDateTime('hhnnsszzz', Now));</div><div>&nbsp; BooksScrollBox.Align = alClient;</div><div>&nbsp;&nbsp;</div><div>&nbsp; GlobalBookCount = 0; GlobalGridColCount = 0;</div><div>&nbsp; if (GlobalBooksList == nil) Exit;</div><div><br></div><div>&nbsp; jsonArrStr = '&#091;';</div><div>&nbsp; for i = 0 to GlobalBooksList.Count - 1</div><div>&nbsp; {</div><div>&nbsp; &nbsp; &nbsp;jsonArrStr = jsonArrStr + GlobalBooksList.Strings<em>;</div><div>&nbsp; &nbsp; &nbsp;if (i &lt; GlobalBooksList.Count - 1) jsonArrStr = jsonArrStr + ',';</div><div>&nbsp; }</div><div>&nbsp; jsonArrStr = jsonArrStr + '&#093;';</div><div>&nbsp;&nbsp;</div><div>&nbsp; if (jsonArrStr &lt;&gt; '&#091;&#093;')</div><div>&nbsp; {</div><div>&nbsp; &nbsp; &nbsp; clQueryItem = Clomosy.ClDataSetFromJSON(jsonArrStr);</div><div>&nbsp; &nbsp; &nbsp; if (clQueryItem &lt;&gt; nil)</div><div>&nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;clQueryItem.First;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while (not clQueryItem.Eof)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; itemGenre = clQueryItem.FieldByName('genre').AsString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ((GlobalFilterGenre == 'Tümü') || (GlobalFilterGenre == '') || (Pos(GlobalFilterGenre, itemGenre) &gt; 0))</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;itemID = clQueryItem.FieldByName('id').AsString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;itemTitle = clQueryItem.FieldByName('title').AsString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;itemAuthor = clQueryItem.FieldByName('author').AsString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;itemRating = clQueryItem.FieldByName('rating').AsString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;itemColor = clQueryItem.FieldByName('color').AsString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;itemSummary = clQueryItem.FieldByName('summary').AsString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;itemCover = clQueryItem.FieldByName('cover').AsString;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CreateBookCard(itemID, itemTitle, itemAuthor, itemRating, itemColor, itemSummary, itemCover, itemGenre);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clQueryItem.Next;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;clQueryItem.Free;</div><div>&nbsp; &nbsp; &nbsp; }</div><div>&nbsp; }</div><div>&nbsp; CountLbl.Text = IntToStr(GlobalBookCount) + ' kitap';</div><div>}</div><div><br></div><div>void FilterClick;</div><div>var ClickedBtn: TclProButton;</div><div>{</div><div>&nbsp; ClickedBtn = TclProButton(Form1.clSender);</div><div>&nbsp; GlobalFilterGenre = ClickedBtn.Text;</div><div>&nbsp;&nbsp;</div><div>&nbsp; FilterAllBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterAllBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');</div><div>&nbsp; FilterRomanBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterRomanBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');</div><div>&nbsp; FilterBilimBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterBilimBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');</div><div>&nbsp; FilterTarihBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterTarihBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');</div><div>&nbsp; FilterFelsefeBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterFelsefeBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');</div><div>&nbsp; FilterCocukBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterCocukBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');</div><div>&nbsp; FilterGelisimBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterGelisimBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');</div><div><br></div><div>&nbsp; ClickedBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#D29054');</div><div>&nbsp; ClickedBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF');</div><div>&nbsp;&nbsp;</div><div>&nbsp; FilterAllBtn.SetclProSettings(FilterAllBtn.clProSettings); FilterRomanBtn.SetclProSettings(FilterRomanBtn.clProSettings); FilterBilimBtn.SetclProSettings(FilterBilimBtn.clProSettings);</div><div>&nbsp; FilterTarihBtn.SetclProSettings(FilterTarihBtn.clProSettings); FilterFelsefeBtn.SetclProSettings(FilterFelsefeBtn.clProSettings); FilterCocukBtn.SetclProSettings(FilterCocukBtn.clProSettings); FilterGelisimBtn.SetclProSettings(FilterGelisimBtn.clProSettings);</div><div><br></div><div>&nbsp; DrawBooks;</div><div>}</div><div><br></div><div>void FetchBooksFromFirebase;</div><div>var</div><div>&nbsp; clRestSettings, clRest, clRestBorrowed, clRestReviews, clRestNotif: TclRest;</div><div>&nbsp; clQuery: TClJSONQuery;</div><div>&nbsp; bookID, valStr, ratingStr, currentUser, respStr, retDateStr, bCoverUrl: String;</div><div>&nbsp; bTitle, bAuthor, bColor, bSummary, bGenre: String;</div><div>&nbsp; pStart, pEnd, totalRating, reviewCount, daysLeft: Integer;</div><div>&nbsp; avgRating: Double;</div><div>&nbsp; allBorrowedStr, allReviewsStr, bookBorrowBlock, bookRevBlock: String;</div><div>{</div><div>&nbsp; currentUser = Clomosy.GlobalVariableString;</div><div>&nbsp; GlobalNotifMsg = ''; GlobalNotifCount = 0; GlobalGridColCount = 0;&nbsp;</div><div>&nbsp;&nbsp;</div><div>&nbsp; if (GlobalBooksList &lt;&gt; nil) GlobalBooksList.Free;</div><div>&nbsp; GlobalBooksList = Clomosy.StringListNew;</div><div>&nbsp;&nbsp;</div><div>&nbsp; if (currentUser &lt;&gt; '')</div><div>&nbsp; {</div><div>&nbsp; &nbsp; clRestSettings = TclRest.Create; clRestSettings.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/settings/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/settings/</a>'+currentUser+'/viewMode.json'; clRestSettings.Method = rmGET; clRestSettings.Execute;</div><div>&nbsp; &nbsp; if (Pos('"grid"', clRestSettings.Response) &gt; 0) GlobalViewMode = 'grid'; else GlobalViewMode = 'list';</div><div>&nbsp; &nbsp; clRestSettings.Free;</div><div>&nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; if (ViewToggleBtn &lt;&gt; nil)</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; if (GlobalViewMode == 'grid') ViewToggleBtn.Text = 'Liste'; else ViewToggleBtn.Text = 'Izgara';</div><div>&nbsp; &nbsp; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; &nbsp; clRestNotif = TclRest.Create; clRestNotif.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/notificati&#111;ns/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/notifications/</a>' + currentUser + '.json'; clRestNotif.Method = rmGET; clRestNotif.Execute;</div><div>&nbsp; &nbsp; respStr = clRestNotif.Response; clRestNotif.Free;</div><div>&nbsp; &nbsp; if ((respStr &lt;&gt; 'null') &amp;&amp; (respStr &lt;&gt; '') &amp;&amp; (respStr &lt;&gt; '{}'))</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; pStart = Pos('"msg":"', respStr);</div><div>&nbsp; &nbsp; &nbsp; while (pStart &gt; 0)</div><div>&nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; GlobalNotifCount = GlobalNotifCount + 1;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; respStr = Copy(respStr, pStart + 7, Length(respStr));</div><div>&nbsp; &nbsp; &nbsp; &nbsp; GlobalNotifMsg = GlobalNotifMsg + '- ' + Copy(respStr, 1, Pos('"', respStr) - 1) + #13#10;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; pStart = Pos('"msg":"', respStr);</div><div>&nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; }</div><div>&nbsp; } else GlobalViewMode = 'list';</div><div><br></div><div>&nbsp; clRestBorrowed = TclRest.Create; clRestBorrowed.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/borrowed.js&#111;n" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/borrowed.json</a>'; clRestBorrowed.Method = rmGET; clRestBorrowed.Execute; allBorrowedStr = clRestBorrowed.Response; clRestBorrowed.Free;</div><div>&nbsp; clRestReviews = TclRest.Create; clRestReviews.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/reviews.js&#111;n" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/reviews.json</a>'; clRestReviews.Method = rmGET; clRestReviews.Execute; allReviewsStr = clRestReviews.Response; clRestReviews.Free;</div><div><br></div><div>&nbsp; clRest = TclRest.Create; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/books.js&#111;n" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/books.json</a>'; clRest.Method = rmGET; clRest.Accept = 'application/json'; clRest.Execute;</div><div>&nbsp;&nbsp;</div><div>&nbsp; if ((clRest.Response &lt;&gt; 'null') &amp;&amp; (clRest.Response &lt;&gt; '') &amp;&amp; (clRest.Response &lt;&gt; '{}'))</div><div>&nbsp; {</div><div>&nbsp; &nbsp; if ((Pos('":{"', clRest.Response) == 0) &amp;&amp; (Pos('": {"', clRest.Response) == 0))</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp;clRest.Method = rmDELETE; clRest.Execute; ShowMessage('Sistem Uyarısı: Veritabanı sıfırlandı.');</div><div>&nbsp; &nbsp; }</div><div>&nbsp; &nbsp; else</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; clQuery = Clomosy.ClDataSetFromJSON(clRest.Response);</div><div>&nbsp; &nbsp; &nbsp; if (clQuery &lt;&gt; nil)</div><div>&nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; clQuery.First;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; while (not clQuery.Eof)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bookID = ''; try bookID = clQuery.FieldByName('id').AsString; except bookID = ''; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (bookID &lt;&gt; '')</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bTitle = 'Bilinmeyen Kitap'; try bTitle = clQuery.FieldByName('title').AsString; except bTitle = 'Bilinmeyen Kitap'; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bAuthor = 'Bilinmeyen Yazar'; try bAuthor = clQuery.FieldByName('author').AsString; except bAuthor = 'Bilinmeyen Yazar'; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bColor = '#2E4053'; try bColor = clQuery.FieldByName('color').AsString; except bColor = '#2E4053'; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bSummary = 'Açıklama bulunmuyor.'; try bSummary = clQuery.FieldByName('summary').AsString; except bSummary = 'Açıklama bulunmuyor.'; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bCoverUrl = ''; try bCoverUrl = clQuery.FieldByName('cover').AsString; except bCoverUrl = ''; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bGenre = 'Roman'; try bGenre = clQuery.FieldByName('genre').AsString; except bGenre = 'Roman'; }</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ((currentUser &lt;&gt; '') &amp;&amp; (allBorrowedStr &lt;&gt; 'null') &amp;&amp; (allBorrowedStr &lt;&gt; ''))</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pStart = Pos('"' + bookID + '":', allBorrowedStr);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (pStart &gt; 0)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bookBorrowBlock = Copy(allBorrowedStr, pStart, 1500);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pEnd = Pos('}}', bookBorrowBlock);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (pEnd &gt; 0) bookBorrowBlock = Copy(bookBorrowBlock, 1, pEnd);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (Pos('"' + currentUser + '"', bookBorrowBlock) &gt; 0)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;retDateStr = ''; pStart = Pos('"returnDate":"', bookBorrowBlock);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (pStart &gt; 0)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pStart = pStart + 14;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pEnd = Pos('"', Copy(bookBorrowBlock, pStart, Length(bookBorrowBlock)));</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (pEnd &gt; 0) retDateStr = Copy(bookBorrowBlock, pStart, pEnd - 1);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (retDateStr &lt;&gt; '')</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; daysLeft = Trunc(StrToDate(retDateStr)) - Trunc(Now);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (daysLeft &lt; 0) { GlobalNotifCount = GlobalNotifCount + 1; GlobalNotifMsg = GlobalNotifMsg + '- "' + bTitle + '" iadesi ' + IntToStr(Abs(daysLeft)) + ' gün gecikti!' + #13#10; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if (daysLeft &lt;= 2) { GlobalNotifCount = GlobalNotifCount + 1; GlobalNotifMsg = GlobalNotifMsg + '- "' + bTitle + '" iadesine ' + IntToStr(daysLeft) + ' gün kaldı!' + #13#10; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; totalRating = 0; reviewCount = 0;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ((allReviewsStr &lt;&gt; 'null') &amp;&amp; (allReviewsStr &lt;&gt; ''))</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pStart = Pos('"' + bookID + '":', allReviewsStr);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (pStart &gt; 0)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bookRevBlock = Copy(allReviewsStr, pStart, 1500);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pEnd = Pos('}}', bookRevBlock);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (pEnd &gt; 0) bookRevBlock = Copy(bookRevBlock, 1, pEnd);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pStart = Pos('"rating":', bookRevBlock);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while (pStart &gt; 0)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pStart = pStart + 9; valStr = Copy(bookRevBlock, pStart, 1); if (valStr == ' ') valStr = Copy(bookRevBlock, pStart + 1, 1);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;totalRating = totalRating + StrToIntDef(valStr, 0); reviewCount = reviewCount + 1;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bookRevBlock = Copy(bookRevBlock, pStart + 1, Length(bookRevBlock)); pStart = Pos('"rating":', bookRevBlock);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (reviewCount &gt; 0) { avgRating = (totalRating * 1.0) / reviewCount; ratingStr = FloatToStr(avgRating); if (Length(ratingStr) &gt; 3) ratingStr = Copy(ratingStr, 1, 3); }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else ratingStr = '0';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GlobalBooksList.Add('{"id":"'+bookID+'","title":"'+bTitle+'","author":"'+bAuthor+'", "rating":"'+ratingStr+'", "color":"'+bColor+'", "summary":"'+bSummary+'", "cover":"'+bCoverUrl+'", "genre":"'+bGenre+'"}');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clQuery.Next;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; clQuery.Free;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; }</div><div>&nbsp; }</div><div>&nbsp; clRest.Free;</div><div>&nbsp;&nbsp;</div><div>&nbsp; if (GlobalNotifCount &gt; 0) { NotifBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#D81B60'); NotifBtn.SetclProSettings(NotifBtn.clProSettings); }</div><div>&nbsp; else { NotifBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); NotifBtn.SetclProSettings(NotifBtn.clProSettings); }</div><div>&nbsp;&nbsp;</div><div>&nbsp; DrawBooks;</div><div>}</div><div><br></div><div>void SearchOpenLibrary;</div><div>var</div><div>&nbsp; clRestAPI: TclRest;</div><div>&nbsp; queryStr, jsonResult, docStr, guidStr, valStr, subStr: String;</div><div>&nbsp; pStart, pEnd, docEnd, pSub, i: Integer;</div><div>&nbsp; bKey, bTitle, bAuthor, bCover, bCoverUrl, bGenre: String;</div><div>{</div><div>&nbsp; queryStr = SearchEdt.Text;</div><div>&nbsp; if (queryStr == '')</div><div>&nbsp; {</div><div>&nbsp; &nbsp; if (GlobalBooksList &lt;&gt; nil) GlobalBooksList.Free;</div><div>&nbsp; &nbsp; GlobalBooksList = Clomosy.StringListNew;</div><div>&nbsp; &nbsp; FetchBooksFromFirebase;</div><div>&nbsp; &nbsp; Exit;</div><div>&nbsp; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; for i = 1 to Length(queryStr) { if (Copy(queryStr, i, 1) == ' ') queryStr = Copy(queryStr, 1, i-1) + '+' + Copy(queryStr, i+1, Length(queryStr)); }</div><div><br></div><div>&nbsp; if (GlobalBooksList &lt;&gt; nil) GlobalBooksList.Free;</div><div>&nbsp; GlobalBooksList = Clomosy.StringListNew;</div><div>&nbsp; CountLbl.Text = 'API Aranıyor...';</div><div>&nbsp;&nbsp;</div><div>&nbsp; GlobalFilterGenre = 'Tümü';&nbsp;</div><div>&nbsp; FilterAllBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#D29054'); FilterAllBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF');</div><div>&nbsp; FilterRomanBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterRomanBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');</div><div>&nbsp; FilterBilimBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterBilimBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');</div><div>&nbsp; FilterTarihBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterTarihBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');</div><div>&nbsp; FilterFelsefeBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterFelsefeBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');</div><div>&nbsp; FilterCocukBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterCocukBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');</div><div>&nbsp; FilterGelisimBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); FilterGelisimBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#000000');</div><div>&nbsp; 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);</div><div><br></div><div>&nbsp; // API Yükünü hafifletmek için &amp;fields parametresi eklendi</div><div>&nbsp; clRestAPI = TclRest.Create;&nbsp;</div><div>&nbsp; clRestAPI.BaseURL = '<a href="https://openlibrary.org/search.js&#111;n?q=" target="_blank" rel="nofollow">https://openlibrary.org/search.json?q=</a>' + queryStr + '&amp;limit=15&amp;fields=key,title,author_name,cover_i,subject';&nbsp;</div><div>&nbsp; clRestAPI.Method = rmGET; clRestAPI.Accept = 'application/json'; clRestAPI.Execute;</div><div>&nbsp; jsonResult = clRestAPI.Response; clRestAPI.Free;</div><div>&nbsp;&nbsp;</div><div>&nbsp; if ((jsonResult &lt;&gt; '') &amp;&amp; (Pos('"docs":', jsonResult) &gt; 0))</div><div>&nbsp; {</div><div>&nbsp; &nbsp; &nbsp;pStart = Pos('"docs":&#091;', jsonResult);</div><div>&nbsp; &nbsp; &nbsp;if (pStart &gt; 0) jsonResult = Copy(jsonResult, pStart + 8, Length(jsonResult));</div><div>&nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp;pStart = Pos('{', jsonResult);</div><div>&nbsp; &nbsp; &nbsp;while (pStart &gt; 0)</div><div>&nbsp; &nbsp; &nbsp;{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; docEnd = Pos('},{', jsonResult);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; if (docEnd == 0) docEnd = Pos('}&#093;', jsonResult);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; if (docEnd == 0) Break;</div><div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; docStr = Copy(jsonResult, pStart, docEnd - pStart + 1);</div><div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; bKey = ''; pSub = Pos('"key":"', docStr);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; if (pSub &gt; 0) { pSub = pSub + 7; pEnd = Pos('"', Copy(docStr, pSub, Length(docStr))); bKey = Copy(docStr, pSub, pEnd - 1); if (Length(bKey) &gt; 7) bKey = Copy(bKey, 8, Length(bKey)); }</div><div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; bTitle = 'Bilinmeyen Kitap'; pSub = Pos('"title":"', docStr);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; if (pSub &gt; 0) { pSub = pSub + 9; pEnd = Pos('"', Copy(docStr, pSub, Length(docStr))); bTitle = Copy(docStr, pSub, pEnd - 1); }</div><div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; bAuthor = 'Bilinmeyen Yazar'; pSub = Pos('"author_name":&#091;"', docStr);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; if (pSub &gt; 0) { pSub = pSub + 16; pEnd = Pos('"', Copy(docStr, pSub, Length(docStr))); bAuthor = Copy(docStr, pSub, pEnd - 1); }</div><div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; bCoverUrl = ''; pSub = Pos('"cover_i":', docStr);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; if (pSub &gt; 0) {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pSub = pSub + 10; pEnd = 0; bCover = '';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while (pSub + pEnd &lt;= Length(docStr))</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;valStr = Copy(docStr, pSub + pEnd, 1);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ((valStr &gt;= '0') &amp;&amp; (valStr &lt;= '9')) { bCover = bCover + valStr; pEnd = pEnd + 1; } else Break;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (bCover &lt;&gt; '') bCoverUrl = '<a href="https://covers.openlibrary.org/b/id/" target="_blank" rel="nofollow">https://covers.openlibrary.org/b/id/</a>' + bCover + '-M.jpg';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; // --- TÜRLERİN (GENRE) KUSURSUZ AYRIŞTIRILMASI ---</div><div>&nbsp; &nbsp; &nbsp; &nbsp; bGenre = 'Roman';&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; pSub = Pos('"subject":&#091;', docStr);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; if (pSub &gt; 0) {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pSub = pSub + 11; pEnd = Pos('&#093;', Copy(docStr, pSub, Length(docStr))); subStr = AnsiLowerCase(Copy(docStr, pSub, pEnd - 1));</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bGenre = '';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (Pos('science fiction', subStr) &gt; 0) bGenre = bGenre + 'Bilim Kurgu, ';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (Pos('history', subStr) &gt; 0) bGenre = bGenre + 'Tarih, ';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (Pos('philosophy', subStr) &gt; 0) bGenre = bGenre + 'Felsefe, ';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ((Pos('children', subStr) &gt; 0) || (Pos('juvenile', subStr) &gt; 0)) bGenre = bGenre + 'Çocuk, ';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ((Pos('self-help', subStr) &gt; 0) || (Pos('personal growth', subStr) &gt; 0)) bGenre = bGenre + 'Kişisel Gelişim, ';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ((Pos('fiction', subStr) &gt; 0) || (Pos('novel', subStr) &gt; 0) || (Pos('magic', subStr) &gt; 0) || (Pos('fantasy', subStr) &gt; 0)) bGenre = bGenre + 'Roman, ';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (bGenre == '') bGenre = 'Roman'; else bGenre = Copy(bGenre, 1, Length(bGenre) - 2);&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; if (bKey &lt;&gt; '') GlobalBooksList.Add('{"id":"'+bKey+'","title":"'+bTitle+'","author":"'+bAuthor+'", "rating":"0", "color":"#2E4053", "summary":"OpenLibrary API Kaydı", "cover":"'+bCoverUrl+'", "genre":"'+bGenre+'"}');</div><div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; jsonResult = Copy(jsonResult, docEnd + 2, Length(jsonResult));</div><div>&nbsp; &nbsp; &nbsp; &nbsp; pStart = Pos('{', jsonResult);</div><div>&nbsp; &nbsp; &nbsp;}</div><div>&nbsp; }</div><div>&nbsp; else</div><div>&nbsp; {</div><div>&nbsp; &nbsp; &nbsp;ShowMessage('Arama sonucu bulunamadı. Arşiv veritabanınıza geri dönülüyor.');</div><div>&nbsp; &nbsp; &nbsp;SearchEdt.Text = '';</div><div>&nbsp; &nbsp; &nbsp;if (GlobalBooksList &lt;&gt; nil) GlobalBooksList.Free;</div><div>&nbsp; &nbsp; &nbsp;GlobalBooksList = Clomosy.StringListNew;</div><div>&nbsp; &nbsp; &nbsp;FetchBooksFromFirebase;</div><div>&nbsp; &nbsp; &nbsp;Exit;</div><div>&nbsp; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; DrawBooks;</div><div>}</div><div><br></div><div>void DoSearchBooks;</div><div>{</div><div>&nbsp; Form1.FormWaiting.Visible = True;</div><div>&nbsp; GlobalActionType = 'SEARCH';</div><div>&nbsp; GlobalActionTimer.Enabled = True;</div><div>}</div><div><br></div><div>void OnGlobalActionTimer;</div><div>var</div><div>&nbsp; clRest: TclRest;</div><div>&nbsp; bookID, currentUser, jsonBody, returnDate: String;</div><div>{</div><div>&nbsp; GlobalActionTimer.Enabled = False;</div><div>&nbsp; bookID = DetailContentPnl.clTagStr;&nbsp;</div><div>&nbsp; currentUser = Clomosy.GlobalVariableString;</div><div>&nbsp;&nbsp;</div><div>&nbsp; if (GlobalActionType == 'BORROW')</div><div>&nbsp; {</div><div>&nbsp; &nbsp; &nbsp; returnDate = FormatDateTime('dd.mm.yyyy', Now + 14);</div><div>&nbsp; &nbsp; &nbsp; clRest = TclRest.Create;</div><div>&nbsp; &nbsp; &nbsp; clRest.Accept = 'application/json';</div><div>&nbsp; &nbsp; &nbsp; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/borrowed/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/borrowed/</a>'+bookID+'.json';</div><div>&nbsp; &nbsp; &nbsp; clRest.Method = rmPUT;</div><div>&nbsp; &nbsp; &nbsp; jsonBody = '{"user":"'+currentUser+'", "returnDate":"'+returnDate+'", "id":"'+bookID+'"}';</div><div>&nbsp; &nbsp; &nbsp; clRest.AddBody(jsonBody, 'application/json');</div><div>&nbsp; &nbsp; &nbsp; clRest.Execute;</div><div>&nbsp; &nbsp; &nbsp; clRest.Free;</div><div>&nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; clRest = TclRest.Create;</div><div>&nbsp; &nbsp; &nbsp; clRest.Accept = 'application/json';</div><div>&nbsp; &nbsp; &nbsp; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/borrow_history/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/borrow_history/</a>'+bookID+'.json';</div><div>&nbsp; &nbsp; &nbsp; clRest.Method = rmPOST;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; jsonBody = '{"user":"'+currentUser+'", "date":"'+FormatDateTime('dd.mm.yyyy', Now)+'"}';</div><div>&nbsp; &nbsp; &nbsp; clRest.AddBody(jsonBody, 'application/json');</div><div>&nbsp; &nbsp; &nbsp; clRest.Execute;</div><div>&nbsp; &nbsp; &nbsp; clRest.Free;</div><div>&nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; if (GlobalCurrentStock &gt; 0)</div><div>&nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;GlobalCurrentStock = GlobalCurrentStock - 1;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;clRest = TclRest.Create;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;clRest.Accept = 'application/json';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/books/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/books/</a>'+bookID+'/stock.json';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;clRest.Method = rmPUT;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;clRest.AddBody('"' + IntToStr(GlobalCurrentStock) + '"', 'application/json');</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;clRest.Execute;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;clRest.Free;</div><div>&nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; DetailBorrowBtn.Text = 'Zaten Ödünç Aldınız';</div><div>&nbsp; &nbsp; &nbsp; DetailBorrowBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#4CAF50');</div><div>&nbsp; &nbsp; &nbsp; DetailBorrowBtn.Enabled = False;</div><div>&nbsp; &nbsp; &nbsp; DetailBorrowBtn.SetclProSettings(DetailBorrowBtn.clProSettings);</div><div>&nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; SendNotification(currentUser, '"' + DetailTitleLbl.Text + '" adlı kitabı ödünç aldınız.');</div><div>&nbsp; &nbsp; &nbsp; ShowMessage(DetailTitleLbl.Text + ' adlı kitabı ödünç aldınız!');</div><div>&nbsp; }</div><div>&nbsp; else if (GlobalActionType == 'ADD_FAV')</div><div>&nbsp; {</div><div>&nbsp; &nbsp; &nbsp; clRest = TclRest.Create;</div><div>&nbsp; &nbsp; &nbsp; clRest.Accept = 'application/json';</div><div>&nbsp; &nbsp; &nbsp; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/favorites/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/favorites/</a>'+currentUser+'/'+bookID+'.json';</div><div>&nbsp; &nbsp; &nbsp; clRest.Method = rmPUT;</div><div>&nbsp; &nbsp; &nbsp; jsonBody = '{"added":"true", "addedDate":"' + FormatDateTime('dd.mm.yyyy', Now) + '"}';</div><div>&nbsp; &nbsp; &nbsp; clRest.AddBody(jsonBody, 'application/json');</div><div>&nbsp; &nbsp; &nbsp; clRest.Execute;</div><div>&nbsp; &nbsp; &nbsp; clRest.Free;</div><div>&nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; clRest = TclRest.Create;</div><div>&nbsp; &nbsp; &nbsp; clRest.Accept = 'application/json';</div><div>&nbsp; &nbsp; &nbsp; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/book_favorites/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/book_favorites/</a>'+bookID+'/'+currentUser+'.json';</div><div>&nbsp; &nbsp; &nbsp; clRest.Method = rmPUT;</div><div>&nbsp; &nbsp; &nbsp; clRest.AddBody('{"user":"'+currentUser+'"}', 'application/json');</div><div>&nbsp; &nbsp; &nbsp; clRest.Execute;</div><div>&nbsp; &nbsp; &nbsp; clRest.Free;</div><div>&nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; DetailFavBtn.Text = 'Listemde (Çıkar)';</div><div>&nbsp; &nbsp; &nbsp; DetailFavBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FFFFFF');</div><div>&nbsp; &nbsp; &nbsp; DetailFavBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#D81B60');</div><div>&nbsp; &nbsp; &nbsp; DetailFavBtn.clProSettings.BorderColor = clAlphaColor.clHexToColor('#D81B60');</div><div>&nbsp; &nbsp; &nbsp; DetailFavBtn.clProSettings.BorderWidth = 1;</div><div>&nbsp; &nbsp; &nbsp; DetailFavBtn.SetclProSettings(DetailFavBtn.clProSettings);</div><div>&nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; SendNotification(currentUser, '"' + DetailTitleLbl.Text + '" kitabını okuma listenize eklediniz.');</div><div>&nbsp; &nbsp; &nbsp; ShowMessage('Kitap favorilerinize eklendi!');</div><div>&nbsp; }</div><div>&nbsp; else if (GlobalActionType == 'DEL_FAV')</div><div>&nbsp; {</div><div>&nbsp; &nbsp; &nbsp; clRest = TclRest.Create;</div><div>&nbsp; &nbsp; &nbsp; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/favorites/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/favorites/</a>'+currentUser+'/'+bookID+'.json';</div><div>&nbsp; &nbsp; &nbsp; clRest.Method = rmDELETE;</div><div>&nbsp; &nbsp; &nbsp; clRest.Execute;</div><div>&nbsp; &nbsp; &nbsp; clRest.Free;</div><div>&nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; clRest = TclRest.Create;</div><div>&nbsp; &nbsp; &nbsp; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/book_favorites/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/book_favorites/</a>'+bookID+'/'+currentUser+'.json';</div><div>&nbsp; &nbsp; &nbsp; clRest.Method = rmDELETE;</div><div>&nbsp; &nbsp; &nbsp; clRest.Execute;</div><div>&nbsp; &nbsp; &nbsp; clRest.Free;</div><div>&nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; DetailFavBtn.Text = 'Listeme Ekle';</div><div>&nbsp; &nbsp; &nbsp; DetailFavBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#36212E');</div><div>&nbsp; &nbsp; &nbsp; DetailFavBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF');</div><div>&nbsp; &nbsp; &nbsp; DetailFavBtn.clProSettings.BorderWidth = 0;</div><div>&nbsp; &nbsp; &nbsp; DetailFavBtn.SetclProSettings(DetailFavBtn.clProSettings);</div><div>&nbsp; &nbsp; &nbsp; ShowMessage('Kitap favorilerinizden çıkarıldı.');</div><div>&nbsp; }</div><div>&nbsp; else if (GlobalActionType == 'SEARCH')</div><div>&nbsp; {</div><div>&nbsp; &nbsp; &nbsp; SearchOpenLibrary;</div><div>&nbsp; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; Form1.FormWaiting.Visible = False;</div><div>}</div><div><br></div><div>void CloseCustomAlert;</div><div>{</div><div>&nbsp; if (AlertBoxPnl &lt;&gt; nil) { AlertBoxPnl.Free; AlertBoxPnl = nil; }</div><div>&nbsp; if (AlertOverlayPnl &lt;&gt; nil) { AlertOverlayPnl.Free; AlertOverlayPnl = nil; }</div><div>}</div><div><br></div><div>void ShowCustomAlert(AMessage: String);</div><div>{</div><div>&nbsp; AlertOverlayPnl = Form1.AddNewProPanel(Form1, 'AlertOverlayPnl');&nbsp;</div><div>&nbsp; AlertOverlayPnl.Align = alClient; AlertOverlayPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#000000'); AlertOverlayPnl.Opacity = 0.6;</div><div>&nbsp; AlertOverlayPnl.SetclProSettings(AlertOverlayPnl.clProSettings); AlertOverlayPnl.BringToFront;&nbsp;</div><div><br></div><div>&nbsp; AlertBoxPnl = Form1.AddNewProPanel(Form1, 'AlertBoxPnl');</div><div>&nbsp; AlertBoxPnl.Align = alCenter; AlertBoxPnl.Width = 280; AlertBoxPnl.Height = 220; AlertBoxPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');&nbsp;</div><div>&nbsp; AlertBoxPnl.clProSettings.RoundHeight = 15; AlertBoxPnl.clProSettings.RoundWidth = 15; AlertBoxPnl.clProSettings.BorderColor = clAlphaColor.clHexToColor('#36212E'); AlertBoxPnl.clProSettings.BorderWidth = 2;</div><div>&nbsp; AlertBoxPnl.SetclProSettings(AlertBoxPnl.clProSettings); AlertBoxPnl.BringToFront;&nbsp;</div><div><br></div><div>&nbsp; AlertMsgLbl = Form1.AddNewProLabel(AlertBoxPnl, 'AlertMsgLbl', AMessage);</div><div>&nbsp; AlertMsgLbl.Align = alTop; AlertMsgLbl.Height = 120; AlertMsgLbl.Margins.Top = 20; AlertMsgLbl.Margins.Left = 15; AlertMsgLbl.Margins.Right = 15;</div><div>&nbsp; AlertMsgLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#002B36'); AlertMsgLbl.clProSettings.FontSize = 14; AlertMsgLbl.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;; AlertMsgLbl.clProSettings.WordWrap = True;&nbsp;</div><div>&nbsp; AlertMsgLbl.SetclProSettings(AlertMsgLbl.clProSettings);</div><div><br></div><div>&nbsp; AlertOkBtn = Form1.AddNewProButton(AlertBoxPnl, 'AlertOkBtn', 'Tamam');</div><div>&nbsp; AlertOkBtn.Align = alBottom; AlertOkBtn.Height = 40; AlertOkBtn.Margins.Bottom = 15; AlertOkBtn.Margins.Left = 60; AlertOkBtn.Margins.Right = 60;</div><div>&nbsp; AlertOkBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#D29054'); AlertOkBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#FFFFFF'); AlertOkBtn.clProSettings.RoundHeight = 8; AlertOkBtn.clProSettings.RoundWidth = 8;</div><div>&nbsp; AlertOkBtn.SetclProSettings(AlertOkBtn.clProSettings);</div><div>&nbsp; Form1.AddNewEvent(AlertOkBtn, tbeOnClick, 'CloseCustomAlert');</div><div>}</div><div><br></div><div>void ShowNotifications;</div><div>var clRest: TclRest;</div><div>{</div><div>&nbsp; if (GlobalNotifCount == 0) ShowCustomAlert('Şu an için yeni bir bildiriminiz bulunmuyor.');</div><div>&nbsp; else</div><div>&nbsp; {</div><div>&nbsp; &nbsp; ShowCustomAlert('BİLDİRİMLERİNİZ:'#13#10 + GlobalNotifMsg);</div><div>&nbsp; &nbsp; if (Clomosy.GlobalVariableString &lt;&gt; '')</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; clRest = TclRest.Create; clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/notificati&#111;ns/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/notifications/</a>' + Clomosy.GlobalVariableString + '.json'; clRest.Method = rmDELETE; clRest.Execute; clRest.Free;</div><div>&nbsp; &nbsp; }</div><div>&nbsp; &nbsp; NotifBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');&nbsp;</div><div>&nbsp; &nbsp; NotifBtn.SetclProSettings(NotifBtn.clProSettings);</div><div>&nbsp; &nbsp; GlobalNotifCount = 0;</div><div>&nbsp; }</div><div>}</div><div><br></div><div>void LoadUserProfileInitials;</div><div>var</div><div>&nbsp; clRest: TclRest;</div><div>&nbsp; resp, adStr, soyadStr, initials: String;</div><div>&nbsp; pStart, pEnd: Integer;</div><div>{</div><div>&nbsp; initials = 'U';</div><div>&nbsp;&nbsp;</div><div>&nbsp; if (Clomosy.GlobalVariableString &lt;&gt; '')</div><div>&nbsp; {</div><div>&nbsp; &nbsp; &nbsp;clRest = TclRest.Create;</div><div>&nbsp; &nbsp; &nbsp;clRest.BaseURL = '<a href="https://deneme-a6346-default-rtdb.firebaseio.com/users/" target="_blank" rel="nofollow">https://deneme-a6346-default-rtdb.firebaseio.com/users/</a>' + Clomosy.GlobalVariableString + '.json';</div><div>&nbsp; &nbsp; &nbsp;clRest.Method = rmGET;</div><div>&nbsp; &nbsp; &nbsp;clRest.Execute;</div><div>&nbsp; &nbsp; &nbsp;resp = clRest.Response;</div><div>&nbsp; &nbsp; &nbsp;clRest.Free;</div><div>&nbsp; &nbsp; &nbsp;</div><div>&nbsp; &nbsp; &nbsp;if ((resp &lt;&gt; 'null') &amp;&amp; (resp &lt;&gt; '') &amp;&amp; (resp &lt;&gt; '{}'))</div><div>&nbsp; &nbsp; &nbsp;{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; adStr = ''; soyadStr = '';</div><div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; pStart = Pos('"ad":"', resp);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; if (pStart &gt; 0)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pStart = pStart + 6;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pEnd = Pos('"', Copy(resp, pStart, Length(resp)));</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;adStr = Copy(resp, pStart, pEnd - 1);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; pStart = Pos('"soyad":"', resp);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; if (pStart &gt; 0)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pStart = pStart + 9;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pEnd = Pos('"', Copy(resp, pStart, Length(resp)));</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;soyadStr = Copy(resp, pStart, pEnd - 1);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; initials = '';</div><div>&nbsp; &nbsp; &nbsp; &nbsp; if (adStr &lt;&gt; '') initials = initials + Copy(adStr, 1, 1);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; if (soyadStr &lt;&gt; '') initials = initials + Copy(soyadStr, 1, 1);</div><div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; if (initials == '') initials = Copy(Clomosy.GlobalVariableString, 1, 2);</div><div>&nbsp; &nbsp; &nbsp;}</div><div>&nbsp; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; if (ProfileBtn &lt;&gt; nil)</div><div>&nbsp; {</div><div>&nbsp; &nbsp; &nbsp;ProfileBtn.Text = AnsiUpperCase(initials);</div><div>&nbsp; &nbsp; &nbsp;ProfileBtn.clProSettings.TextSettings.Font.Style = &#091;fsBold&#093;;</div><div>&nbsp; &nbsp; &nbsp;ProfileBtn.clProSettings.FontSize = 15;</div><div>&nbsp; &nbsp; &nbsp;ProfileBtn.SetclProSettings(ProfileBtn.clProSettings);</div><div>&nbsp; }</div><div>}</div><div><br></div><div>void CreateHeader;</div><div>{</div><div>&nbsp; HeaderPnl = Form1.AddNewProPanel(ScaledLayout, 'HeaderPnl');</div><div>&nbsp; HeaderPnl.Align = alTop; HeaderPnl.Height = 70; HeaderPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');</div><div>&nbsp; HeaderPnl.SetclProSettings(HeaderPnl.clProSettings);</div><div>&nbsp;&nbsp;</div><div>&nbsp; LogoLeftPnl = Form1.AddNewProPanel(HeaderPnl, 'LogoLeftPnl');</div><div>&nbsp; LogoLeftPnl.Align = alLeft; LogoLeftPnl.Width = 200; LogoLeftPnl.Margins.Left = 20; LogoLeftPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');</div><div>&nbsp; LogoLeftPnl.SetclProSettings(LogoLeftPnl.clProSettings);</div><div><br></div><div>&nbsp; TitleLbl = Form1.AddNewProLabel(LogoLeftPnl, 'TitleLbl', 'Arşiv');</div><div>&nbsp; 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 = &#091;fsBold&#093;;</div><div>&nbsp; TitleLbl.SetclProSettings(TitleLbl.clProSettings);</div><div>&nbsp;&nbsp;</div><div>&nbsp; SubTitleLbl = Form1.AddNewProLabel(LogoLeftPnl, 'SubTitleLbl', 'KÜTÜPHANESİ');</div><div>&nbsp; SubTitleLbl.Align = alTop; SubTitleLbl.Height = 20; SubTitleLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#888888'); SubTitleLbl.clProSettings.FontSize = 10;</div><div>&nbsp; SubTitleLbl.SetclProSettings(SubTitleLbl.clProSettings);</div><div><br></div><div>&nbsp; ActionRightPnl = Form1.AddNewProPanel(HeaderPnl, 'ActionRightPnl');</div><div>&nbsp; ActionRightPnl.Align = alRight; ActionRightPnl.Width = 100; ActionRightPnl.Margins.Right = 20; ActionRightPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');</div><div>&nbsp; ActionRightPnl.SetclProSettings(ActionRightPnl.clProSettings);</div><div><br></div><div>&nbsp; ProfileBtn = Form1.AddNewProButton(ActionRightPnl, 'ProfileBtn', '');</div><div>&nbsp; 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;</div><div>&nbsp; ProfileBtn.SetclProSettings(ProfileBtn.clProSettings);</div><div><br></div><div>&nbsp; NotifBtn = Form1.AddNewProImage(ActionRightPnl, 'NotifBtn');&nbsp;</div><div>&nbsp; NotifBtn.Align = alRight; NotifBtn.Width = 40; NotifBtn.Margins.Right = 10; NotifBtn.Margins.Top = 15; NotifBtn.Margins.Bottom = 15; NotifBtn.clProSettings.PictureSource = '<a href="https://w7.pngwing.com/pngs/984/292/png-transparent-alarm-bell-essentials-notificati&#111;n-ui-ui-essentials-ic&#111;n-thumbnail.png" target="_blank" rel="nofollow">https://w7.pngwing.com/pngs/984/292/png-transparent-alarm-bell-essentials-notification-ui-ui-essentials-icon-thumbnail.png</a>'; NotifBtn.clProSettings.PictureAutoFit = True; NotifBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); NotifBtn.clProSettings.RoundHeight = 8; NotifBtn.clProSettings.RoundWidth = 8;</div><div>&nbsp; NotifBtn.SetclProSettings(NotifBtn.clProSettings);</div><div>&nbsp; Form1.AddNewEvent(NotifBtn, tbeOnClick, 'ShowNotifications');</div><div>}</div><div><br></div><div>void CreateFiltersUI;</div><div>{</div><div>&nbsp; FiltersPnl = Form1.AddNewProPanel(ScaledLayout, 'FiltersPnl');</div><div>&nbsp; FiltersPnl.Align = alTop; FiltersPnl.Height = 55; FiltersPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1');</div><div>&nbsp; FiltersPnl.SetclProSettings(FiltersPnl.clProSettings);</div><div><br></div><div>&nbsp; FiltersScrollBox = Form1.AddNewHorzScrollBox(FiltersPnl, 'FiltersScrollBox');</div><div>&nbsp; FiltersScrollBox.Align = alClient; FiltersScrollBox.Margins.Left = 10; FiltersScrollBox.Margins.Right = 10; FiltersScrollBox.Margins.Bottom = 5;</div><div><br></div><div>&nbsp; FilterAllBtn = Form1.AddNewProButton(FiltersScrollBox, 'FilterAllBtn', 'Tümü');</div><div>&nbsp; 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');</div><div><br></div><div>&nbsp; FilterRomanBtn = Form1.AddNewProButton(FiltersScrollBox, 'FilterRomanBtn', 'Roman');</div><div>&nbsp; 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');</div><div><br></div><div>&nbsp; FilterBilimBtn = Form1.AddNewProButton(FiltersScrollBox, 'FilterBilimBtn', 'Bilim Kurgu');</div><div>&nbsp; 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');</div><div><br></div><div>&nbsp; FilterTarihBtn = Form1.AddNewProButton(FiltersScrollBox, 'FilterTarihBtn', 'Tarih');</div><div>&nbsp; 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');</div><div><br></div><div>&nbsp; FilterFelsefeBtn = Form1.AddNewProButton(FiltersScrollBox, 'FilterFelsefeBtn', 'Felsefe');</div><div>&nbsp; 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');</div><div><br></div><div>&nbsp; FilterCocukBtn = Form1.AddNewProButton(FiltersScrollBox, 'FilterCocukBtn', 'Çocuk');</div><div>&nbsp; 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');</div><div><br></div><div>&nbsp; FilterGelisimBtn = Form1.AddNewProButton(FiltersScrollBox, 'FilterGelisimBtn', 'Kişisel Gelişim');</div><div>&nbsp; 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');</div><div>}</div><div><br></div><div>void CreateDetailUI;</div><div>{</div><div>&nbsp; DetailOverlayPnl = Form1.AddNewProPanel(Form1, 'DetailOverlayPnl');</div><div>&nbsp; DetailOverlayPnl.Align = alClient; DetailOverlayPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#000000'); DetailOverlayPnl.Opacity = 0.6; DetailOverlayPnl.Visible = False; Form1.AddNewEvent(DetailOverlayPnl, tbeOnClick, 'CloseDetail');</div><div><br></div><div>&nbsp; DetailContentPnl = Form1.AddNewProPanel(Form1, 'DetailContentPnl');</div><div>&nbsp; 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;</div><div><br></div><div>&nbsp; DetailHeaderPnl = Form1.AddNewProPanel(DetailContentPnl, 'DetailHeaderPnl');</div><div>&nbsp; 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);</div><div><br></div><div>&nbsp; DetailTitleLbl = Form1.AddNewProLabel(DetailContentPnl, 'DetailTitleLbl', '-');</div><div>&nbsp; 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 = &#091;fsBold&#093;; DetailTitleLbl.SetclProSettings(DetailTitleLbl.clProSettings);</div><div><br></div><div>&nbsp; DetailAuthorLbl = Form1.AddNewProLabel(DetailContentPnl, 'DetailAuthorLbl', '-');</div><div>&nbsp; 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);</div><div><br></div><div>&nbsp; DetailScrollBox = Form1.AddNewVertScrollBox(DetailContentPnl, 'DetailScrollBox');</div><div>&nbsp; DetailScrollBox.Align = alClient; DetailScrollBox.Margins.Top = 15; DetailScrollBox.Margins.Left = 15; DetailScrollBox.Margins.Right = 15; DetailScrollBox.Margins.Bottom = 15;</div><div><br></div><div>&nbsp; DetailDescLbl = Form1.AddNewProLabel(DetailScrollBox, 'DetailDescLbl', '');</div><div>&nbsp; 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);</div><div><br></div><div>&nbsp; DetailFooterPnl = Form1.AddNewProPanel(DetailContentPnl, 'DetailFooterPnl');</div><div>&nbsp; DetailFooterPnl.Align = alBottom; DetailFooterPnl.Height = 160;&nbsp;</div><div>&nbsp;&nbsp;</div><div>&nbsp; DetailBorrowBtn = Form1.AddNewProButton(DetailFooterPnl, 'DetailBorrowBtn', 'Ödünç Al');</div><div>&nbsp; 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');</div><div>&nbsp;&nbsp;</div><div>&nbsp; DetailFavBtn = Form1.AddNewProButton(DetailFooterPnl, 'DetailFavBtn', 'Listeme Ekle');</div><div>&nbsp; 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');</div><div>&nbsp;&nbsp;</div><div>&nbsp; DetailCloseBtn = Form1.AddNewProButton(DetailFooterPnl, 'DetailCloseBtn', 'Kapat');</div><div>&nbsp; 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');</div><div>}</div><div><br></div><div>void SetupUI;</div><div>{</div><div>&nbsp; CreateHeader;</div><div>&nbsp; LoadUserProfileInitials;</div><div>&nbsp; CreateDetailUI;</div><div><br></div><div>&nbsp; PageTitlePnl = Form1.AddNewProPanel(ScaledLayout, 'PageTitlePnl');</div><div>&nbsp; PageTitlePnl.Align = alTop; PageTitlePnl.Height = 50; PageTitlePnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); PageTitlePnl.SetclProSettings(PageTitlePnl.clProSettings);</div><div><br></div><div>&nbsp; PageTitleLbl = Form1.AddNewProLabel(PageTitlePnl, 'PageTitleLbl', 'Katalog');</div><div>&nbsp; PageTitleLbl.Align = alLeft; PageTitleLbl.Margins.Left = 20; PageTitleLbl.Width = 200; PageTitleLbl.clProSettings.FontSize = 22; PageTitleLbl.SetclProSettings(PageTitleLbl.clProSettings);</div><div><br></div><div>&nbsp; ViewToggleBtn = Form1.AddNewProButton(PageTitlePnl, 'ViewToggleBtn', '');</div><div>&nbsp; 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');</div><div>&nbsp; ViewToggleBtn.enabled = false;</div><div>&nbsp;&nbsp;</div><div>&nbsp; SearchWrapPnl = Form1.AddNewProPanel(ScaledLayout, 'SearchWrapPnl');</div><div>&nbsp; SearchWrapPnl.Align = alTop; SearchWrapPnl.Height = 55; SearchWrapPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); SearchWrapPnl.SetclProSettings(SearchWrapPnl.clProSettings);</div><div><br></div><div>&nbsp; SearchPnl = Form1.AddNewProPanel(SearchWrapPnl, 'SearchPnl');</div><div>&nbsp; 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);</div><div><br></div><div>&nbsp; SearchEdt = Form1.AddNewProEdit(SearchPnl, 'SearchEdt','API veya Arşivde Ara...');</div><div>&nbsp; SearchEdt.Align = alClient; SearchEdt.Margins.Left = 10; SearchEdt.Margins.Right = 10; SearchEdt.Margins.Top = 5; SearchEdt.Margins.Bottom = 5; SearchEdt.SetclProSettings(SearchEdt.clProSettings);</div><div><br></div><div>&nbsp; SearchBtn = Form1.AddNewProButton(SearchPnl, 'SearchBtn', 'Ara');</div><div>&nbsp; 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');</div><div><br></div><div>&nbsp; CreateFiltersUI;</div><div><br></div><div>&nbsp; CountPnl = Form1.AddNewProPanel(ScaledLayout, 'CountPnl');</div><div>&nbsp; CountPnl.Align = alTop; CountPnl.Height = 30; CountPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#F0EBE1'); CountPnl.SetclProSettings(CountPnl.clProSettings);</div><div>&nbsp;&nbsp;</div><div>&nbsp; CountLbl = Form1.AddNewProLabel(CountPnl, 'CountLbl', 'Yükleniyor...');</div><div>&nbsp; CountLbl.Align = alLeft; CountLbl.Margins.Left = 20; CountLbl.Width = 100; CountLbl.clProSettings.FontColor = clAlphaColor.clHexToColor('#888888'); CountLbl.SetclProSettings(CountLbl.clProSettings);</div><div><br></div><div>&nbsp; DividerPnl = Form1.AddNewProPanel(ScaledLayout, 'DividerPnl');</div><div>&nbsp; DividerPnl.Align = alTop; DividerPnl.Height = 2; DividerPnl.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#E2DED5'); DividerPnl.SetclProSettings(DividerPnl.clProSettings);</div><div><br></div><div>&nbsp; BottomMenuPnl = Form1.AddNewProPanel(ScaledLayout, 'BottomMenuPnl');</div><div>&nbsp; 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);</div><div><br></div><div>&nbsp; CatalogBtn = Form1.AddNewProButton(BottomMenuPnl, 'CatalogBtn', 'Katalog');</div><div>&nbsp; CatalogBtn.Align = alLeft; CatalogBtn.Width = 70; CatalogBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#D29054'); CatalogBtn.clProSettings.FontSize = 11; CatalogBtn.SetclProSettings(CatalogBtn.clProSettings);</div><div>&nbsp;&nbsp;</div><div>&nbsp; BorrowedBtn = Form1.AddNewProButton(BottomMenuPnl, 'BorrowedBtn', 'Ödünç');</div><div>&nbsp; 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');</div><div><br></div><div>&nbsp; QrBtn = Form1.AddNewProButton(BottomMenuPnl, 'QrBtn', 'QR Tara');</div><div>&nbsp; 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');</div><div><br></div><div>&nbsp; MyListBtn = Form1.AddNewProButton(BottomMenuPnl, 'MyListBtn', 'Listem');</div><div>&nbsp; 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');</div><div><br></div><div>&nbsp; SettingsBtn = Form1.AddNewProButton(BottomMenuPnl, 'SettingsBtn', 'Ayarlar');</div><div>&nbsp; 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');</div><div><br></div><div>&nbsp; GlobalActionTimer = Form1.AddNewTimer(Form1, 'GlobalActionTimer', 100);</div><div>&nbsp; Form1.AddNewEvent(GlobalActionTimer, tbeOnTimer, 'OnGlobalActionTimer');</div><div>&nbsp; GlobalActionTimer.Enabled = False;</div><div>&nbsp;&nbsp;</div><div>&nbsp; OpenDetailTimer = Form1.AddNewTimer(Form1, 'OpenDetailTimer', 100);</div><div>&nbsp; Form1.AddNewEvent(OpenDetailTimer, tbeOnTimer, 'OnOpenDetailTimer');</div><div>&nbsp; OpenDetailTimer.Enabled = False;</div><div>}</div><div><br></div><div>{</div><div>&nbsp; Form1 = TCLForm.Create(Self);</div><div>&nbsp; ScaledLayout = Form1.AddNewScaledLayout(Form1, 'ScaledLayout');</div><div>&nbsp; ScaledLayout.Align = alClient;</div><div>&nbsp; ScaledLayout.OriginalHeight = 750;</div><div>&nbsp; ScaledLayout.OriginalWidth = 350;</div><div><br></div><div>&nbsp; SetupUI;</div><div>&nbsp; GlobalFilterGenre = 'Tümü';</div><div>&nbsp; FetchBooksFromFirebase;</div><div>&nbsp;&nbsp;</div><div>&nbsp; Form1.FormWaiting.Visible = False;</div><div>&nbsp; Form1.BtnFormMenu.Visible = False;</div><div>&nbsp; Form1.BtnGoBack.Visible = False;</div><div>&nbsp; Form1.LytTopBar.Visible = False;</div><div>&nbsp; Form1.Run;</div><div>}</div><a href="https://static.cloudflareinsights.com/beac&#111;n.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" target="_blank" rel="nofollow">https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496"</a> integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon="{&quot;version&quot;:&quot;2024.11.0&quot;,&quot;token&quot;:&quot;439455f3e46c40b98dbd42a2f1a954d8&quot;,&quot;r&quot;:1,&quot;server_timing&quot;:{&quot;name&quot;:{&quot;cfCacheStatus&quot;:true,&quot;cfEdge&quot;:true,&quot;cfExtPri&quot;:true,&quot;cfL4&quot;:true,&quot;cfOrigin&quot;:true,&quot;cfSpeedBrain&quot;:true},&quot;location_startswith&quot;:null}}" crossorigin="anonymous">]]>
   </description>
   <pubDate>Tue, 07 Jul 2026 10:11:47 +0000</pubDate>
   <guid isPermaLink="true">https://forum.clomosy.com.tr/forum_posts.asp?TID=1593&amp;PID=3677#3677</guid>
  </item> 
 </channel>
</rss>