Delphi İle TCMB den Döviz Kurlarını Çekme

Aşağıdaki procedure de USD ve EURO kuru çekilmiştir

Kurlar diye bir adet memory table oluşturulmuştur

Kurlar Memory Table Field Yapısı
object Kurlar: TJvMemoryData

FieldName = ‘DOVTUR’
DataType = ftString
Size = 100

FieldName = ‘KUR’
DataType = ftFloat


	Procedure DovizKurlari;
	var
		XMLNode: IXMLNode;
		I: Integer;
		XMLDocumentKur: TXMLDocument;
	Begin
		XMLDocumentKur := TXMLDocument.Create(Application);
		try
			try
				XMLDocumentKur.Active := false;
				XMLDocumentKur.FileName := 'https://www.tcmb.gov.tr/kurlar/today.xml';
				XMLDocumentKur.Active := true;
			Except  on E: Exception do
			Begin
				Msg_HataMesaji('İnternet bağlantınızı kontrol edin. TCMB günlük kur bilgisine ulaşılamadı!');
			end;
		end;

		Kurlar.Open;
		Kurlar.EmptyTable;
	
		if XMLDocumentKur.Active then
		Begin
			XMLNode := XMLDocumentKur.DocumentElement.ChildNodes.FindNode('Currency');
			repeat
				if XMLNode.HasAttribute('CurrencyCode') then
				begin
					if (XMLNode.Attributes['CurrencyCode'] = 'USD') then
					begin
						Kurlar.Append;
							KurlarDOVTUR.AsString := 'USD';
							KurlarKUR.AsFloat := StrToFloatDef(StringReplace(XMLNode.ChildNodes.Nodes['ForexSelling'].Text, '.', ',', [rfReplaceAll]), 0);
							DolarKuru := StrToFloatDef(StringReplace(XMLNode.ChildNodes.Nodes['ForexSelling'].Text, '.', ',', [rfReplaceAll]), 0);
						Kurlar.Post;
					end
					else if (XMLNode.Attributes['CurrencyCode'] = 'EUR') then
					begin
						Kurlar.Append;
							KurlarDOVTUR.AsString := 'EURO';
							KurlarKUR.AsFloat := StrToFloatDef(StringReplace(XMLNode.ChildNodes.Nodes['ForexSelling'].Text, '.', ',', [rfReplaceAll]), 0);
							EuroKuru := StrToFloatDef(StringReplace(XMLNode.ChildNodes.Nodes['ForexSelling'].Text, '.', ',', [rfReplaceAll]), 0);
						Kurlar.Post;
					end;
				end;
				XMLNode := XMLNode.NextSibling;
			until XMLNode = nil;
			End
			Else
			Begin
				if Msg_Soru('USD ve EURO Kurunu Elle Tanımlamak İster misiniz ? ') then
				Begin
					Kurlar.Append;
						KurlarDOVTUR.AsString := 'USD';
						KurlarKUR.AsFloat     := StrToFloatDef(InputBox('','USD Kurunu Giriniz','1'),1);
						DolarKuru             :=  KurlarKUR.AsFloat;
					Kurlar.Post;

					Kurlar.Append;
						KurlarDOVTUR.AsString := 'EURO';
						KurlarKUR.AsFloat     := StrToFloatDef(InputBox('','EURO Kurunu Giriniz','1'),1);
						EuroKuru              := KurlarKUR.AsFloat ;
					Kurlar.Post;
				End
				Else
				Begin
					Kurlar.Append;
						KurlarDOVTUR.AsString := 'USD';
						KurlarKUR.AsFloat     := 1;
						DolarKuru             := 1;
					Kurlar.Post;

					Kurlar.Append;
						KurlarDOVTUR.AsString := 'EURO';
						KurlarKUR.AsFloat     := 1;
						EuroKuru              := 1;
					Kurlar.Post;
				End;
		    End;
		finally
			XMLDocumentKur.Free;
		end;
	End;
Resim Base-64 Dönüştürücü v1.0

Bu çevirici tarafımca geliştirilmiş olup , online olarak resim dosyalarını base64 kodu olarak size verir.

Temel Özellikleri

  • Drag&Drop (Sürükle Bırak ) Resim Yükleme
  • Çoklu Resim Yükleme Desteği
  • Ayrı Ayrı Resim Yükleme (Önceki resim kodları kaybolmaz)
  • Tüm Resimlerin base-64 kodunu txt olarak indirebilme
  • Ücretsizdir
  • Ücretsizdir.

Uygulama v1.0 olduğu için eksiklikler ve hatalar olabilir bu durumlarda ahmet.aydinlik@yahoo.com.tr adresine mail atarak bildirebilirsiniz en kısa zamanda çözüme kavusturmaya çalışırım.

Uygulama Linki

Resim Base-64 Dönüştürücü v1.0

Online XSLT Editör

Bu editör tarafımca geliştirilmiş olup , online olarak e-fatura irsaliye gibi e-belgeleri düzenlemek ve görüntülemek için kullanılır

Başlıca Özellikleri

  • Xslt ve Xml Yükleme Desteği
  • Yüklenen xlst dosyası üzerinde değişiklik , kayıt ve indirebilme desteği
  • Anlık Canlı görüntüleme
  • Editör renk desteği
  • CTRL + F ile kod arama
  • Ücretsizdir.

Uygulama v1.0 olduğu için eksiklikler ve hatalar olabilir bu durumlarda ahmet.aydinlik@yahoo.com.tr adresine mail atarak bildirebilirsiniz en kısa zamanda çözüme kavusturmaya çalışırım.

Uygulama Linki

Online XSLT Editör

Android Hedef Target Android 12 Hatası Çözümü

android:exported needs to be explicitly specified for element <activity#com.embarcadero.firemonkey.FMXNativeActivity>. Apps targeting Android 12 and higher are required to specify an explicit value for android:exported when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details.

Bu hata mesajı, Delphi 12.3 ile Android 12 veya üzeri sürümler için uygulama geliştirirken, AndroidManifest.xml dosyanızda bazı activity öğelerinde android:exported niteliğinin eksik olduğunu bildiriyor.

Sorun Nedir?

Android 12 (API 31) itibarıyla, bir Activity, Service veya BroadcastReceiver bileşeni eğer bir intent-filter içeriyorsa, android:exported niteliğinin açıkça tanımlanması zorunludur. Bu nitelik, bileşenin uygulama dışından erişilebilir olup olmadığını belirler.

hatanda belirtilen öğe:

<activity android:name="com.embarcadero.firemonkey.FMXNativeActivity" ...>

Bu aktivite bir intent-filter içerdiği için, artık android:exported özelliğini içermesi gerekiyor.

Ne Yapmalısın?

  1. AndroidManifest.template.xml dosyanı aç.
  2. Aşağıdaki gibi FMXNativeActivity için tanımlı activity öğesini bul:
<activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"
          android:label="@string/app_name"
          android:configChanges="orientation|keyboardHidden|screenSize"
          android:launchMode="singleTop">

Bu satıra android:exported="true" (veya gerektiğinde false) ekle:

<activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"
          android:label="@string/app_name"
          android:configChanges="orientation|keyboardHidden|screenSize"
          android:launchMode="singleTop"
          android:exported="true">

Bu şekilde düzenleme yapıldığında hata ortadan Kalkar

Js Tablo yazdırma Scripti

Html Sayfalarda bir tablo id ile tetiklendiğinde tablo içeriğini yazdırmaya aktaran script

<script>
function PrintTable(tabloId) {
    let table = document.querySelector(tabloId);
    if (!table) {
        console.error("Tablo bulunamadı: " + tabloId);
        return;
    }

    let printWindow = window.open('', '', 'width=800,height=600');
    printWindow.document.write('<html><head><title>Tablo Yazdır</title>');
    printWindow.document.write('<style>');
    printWindow.document.write('table { border-collapse: collapse; width: 100%; }');
    printWindow.document.write('th, td { border: 1px solid black; padding: 8px; text-align: left; }');
    printWindow.document.write('</style></head><body>');
    
    printWindow.document.write(table.outerHTML); // Sadece tablonun içeriğini ekler
    printWindow.document.write('</body></html>');
    
    printWindow.document.close();
    printWindow.print();
}
</script>

Örnek Kullanımı

	<button onclick="PrintTable('#Tablo1')">Yazdır</button>
Js Tablodan Pdf Aktarım Scripti

Html Sayfalarda bir tablo id ile tetiklendiğinde tablo içeriğini pdf aktaran script

<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.5.27/jspdf.plugin.autotable.min.js"></script>

<script>


function TabloPDF(tabloId, dosyaAdi = "tablo.pdf") {
    let table = document.querySelector(tabloId);
    if (!table) {
        console.error("Tablo bulunamadı: " + tabloId);
        return;
    }

    let { jsPDF } = window.jspdf;
    let doc = new jsPDF();
	  doc.addFont('font/roboto.ttf', 'Roboto', 'normal');
  doc.setFont("Roboto", "normal");
 
 ;
    doc.autoTable({
        html: table ,
        styles: {
            font: "Roboto", // Alternatif: "times"
            fontStyle: "normal"
        }
    });

    doc.save(dosyaAdi);
}
</script>

Örnek Kullanımı

&lt;button onclick="TabloPDF('#Tablo1')">PDF İndir&lt;/button>