28 Ekim 2014 Salı

Delphi Android JSON Helper Component

Merhabalar,


Kişisel hazırladığım bir projede kullanmak için geliştirdiğim bir componenttir.

Yapısı delphinin Query yapısına benzemektedir.

"while,EOF,BOF,NEXT,FieldbyName" gibi özellikleri kullanabilirsiniz.

Ek olarak Sort özelliği ile JSON verisindeki fieldlere göre sıralamaları düzenleyebilirsiniz.

Örnek JSON dosyasının linki: http://mangakafe.com/json.txt

Linkteki yapıyı inceleyince fark edeceksiniz ki yapı JSON Array olmalıdır.




Kullanımı:

1-) JSONHelper1.JSON : Hem websitesindeki json linkini hemde JSON text dosyasını kullanabilirsiniz.

2-) JSONHelper1.Active: True seçeneği seçildiği zaman "Sort able Field" bölümü aktif olur ve JSON verinizi gerçek bir query gibi kullanabilirsiniz.

3-) JSONHelper1.SaveFile: JSON veriyi istenilen bir dizine kayıt etmek için kullanılır.

4-) JSONHelper1.GetJson: JSON veriyi istenildiği anda bir değişkene tanımlamak için kullanılır.

5-) JSONHelper1.FromFile: JSON veriyi kayıt edildiği yerden okumak için kullanılır.

6-) TimeOut : Bağlantı zaman aşımı süresidir ve milisaniye cinsindedir. 5000 ms = 5 Saniye.

22 Ekim 2014 Çarşamba

Delphi Android Broadcast Receiver ile Bluetooth Kontrol

Merhabalar,


Bu yazımda daha önceden paylaşmış olduğum Broadcast Receiver Componenti ile birlikte Bluetooth kontrolünü nasıl yapabileceğinizden bahsedicem.

Şimdi projenize bahsetmiş olduğum Broadcast Receiver Componenti ekleyin kullanımını kendi başlığında öğrenebilirsiniz ek olarak dinlenmesini istediğimiz yayını ekleyeceğiz.


BroadcastReceiver1.Add('android.bluetooth.adapter.action.STATE_CHANGED');


Bu sayede bluetooth yayınında bir değişiklik olursa projemize bunu yakalaması için talimat verdik fakat eksik birşey kaldı oda uygulamada "Bluetooth" iznini true yapmak.

Son olarak "OnReceive" eventine aşağıdaki kodları ekleyiniz.


  case Intent.getIntExtra(StringToJString('android.bluetooth.adapter.extra.STATE'),-1) of
    10://STATE_OFF
    begin
      ShowMessage('Bluetooth kapalı.',TToastLength.ShortToast);
    end;
    11://STATE_TURNING_ON
    begin
      ShowMessage('Bluetooth açılıyor.',TToastLength.ShortToast);
    end;
    12://STATE_ON
    begin
      ShowMessage('Bluetooth açık.',TToastLength.ShortToast);
    end;
    13://STATE_TURNING_OFF
    begin
      ShowMessage('Bluetooth kapanıyor.',TToastLength.ShortToast);
    end;
  end;

Delphi Android Broadcast Receiver ile internet Kontrol

Merhabalar,



Bu yazımda daha önceden paylaşmış olduğum Broadcast Receiver Componenti ile birlikte internet kontrolünü nasıl yapabileceğinizden bahsedicem.

Neden böyle birşeye ihtiyacımız olabilir diye soran olursa, İnternet üzerinden işlem yapan bir uygulama yaptığınızı düşünün tam servere istek gönderilmeden önce internet gitme ihtimali olma şansı çok büyük
böyle bir durumda uygulama içerisinde önlem almak isteyebilirsiniz.

Başka bir ihtimal düşünelim dosya indirme hakkında bir uygulama yaptınız fakat sadece wifi aktifken indirme özelliği eklemek istiyorsunuz bunun gibi network olaylarını dinlemeniz gerekebilir.

Lafı fazla uzatmadan gerekli pas dosyasını en alta linkini ve direk kod olarak veriyorum onu indirin ve projenize dahil edin.

Şimdi projenize bahsetmiş olduğum Broadcast Receiver Componenti ekleyin kullanımını kendi başlığında öğrenebilirsiniz ek olarak dinlenmesini istediğimiz yayını ekleyeceğiz.

BroadcastReceiver1.Add('android.net.conn.CONNECTIVITY_CHANGE');

bu sayede network yayınında bir değişiklik olursa projemize bunu yakalaması için talimat verdik fakat eksik birşey kaldı oda uygulamada "Access network state" iznini true yapmak.

Uses bloğuna "NetworkState.Android" pas dosyamızı tanımlıyoruz.

Son olarak "OnReceive" eventine aşağıdaki kodları ekleyiniz.

var
  NetworkInfo: TNetworkState;
begin
  if NetworkInfo.GetState = TState.Wifi then
    ShowMessage('Wifi aktif')
  else if NetworkInfo.GetState = TState.Mobile then
    ShowMessage('3G aktif')
  else if NetworkInfo.GetState = TState.NotConnect then
    ShowMessage('İnternet Yok')

NetworkState.Android.pas indirme Linki: https://www.mediafire.com/?3gxl3zdvmtquflu
unit NetworkState.Android;

interface
{$IFDEF ANDROID}

type
  TState = (Wifi,Mobile,NotConnect);

  TNetworkState = class
    private
      function IsConnected: Boolean;
      function IsWifiConnected: Boolean;
      function IsMobileConnected: Boolean;
    public
      function GetState: TState;

  end;
{$ENDIF}
implementation
{$IFDEF ANDROID}
uses
  System.SysUtils,
  Androidapi.JNIBridge,
  Androidapi.JNI.GraphicsContentViewText,
  Androidapi.JNI.JavaTypes,
  FMX.Helpers.Android,
  AndroidApi.Helpers;

type
  JConnectivityManager = interface;
  JNetworkInfo = interface;

  JNetworkInfoClass = interface(JObjectClass)
  ['{E92E86E8-0BDE-4D5F-B44E-3148BD63A14C}']
  end;

  [JavaSignature('android/net/NetworkInfo')]
  JNetworkInfo = interface(JObject)
  ['{6DF61A40-8D17-4E51-8EF2-32CDC81AC372}']
    {Methods}
    function isAvailable: Boolean; cdecl;
    function isConnected: Boolean; cdecl;
    function isConnectedOrConnecting: Boolean; cdecl;
  end;
  TJNetworkInfo = class(TJavaGenericImport) end;

  JConnectivityManagerClass = interface(JObjectClass)
  ['{E03A261F-59A4-4236-8CDF-0068FC6C5FA1}']
    {Property methods}
    function _GetTYPE_WIFI: Integer; cdecl;
    function _GetTYPE_WIMAX: Integer; cdecl;
    function _GetTYPE_MOBILE: Integer; cdecl;
    {Properties}
    property TYPE_WIFI: Integer read _GetTYPE_WIFI;
    property TYPE_WIMAX: Integer read _GetTYPE_WIMAX;
    property TYPE_MOBILE: Integer read _GetTYPE_MOBILE;
  end;

  [JavaSignature('android/net/ConnectivityManager')]
  JConnectivityManager = interface(JObject)
  ['{1C4C1873-65AE-4722-8EEF-36BBF423C9C5}']
    {Methods}
    function getActiveNetworkInfo: JNetworkInfo; cdecl;
    function getNetworkInfo(networkType: Integer): JNetworkInfo; cdecl;
  end;
  TJConnectivityManager = class(TJavaGenericImport) end;

  JWifiManager = interface;
  JWifiInfo = interface;

  JWifiManagerClass = interface(JObjectClass)
    ['{69F35EA7-3EB9-48AA-B7FC-4FFD0E7D712F}']
    function _GetACTION_PICK_WIFI_NETWORK: JString;
    function _GetEXTRA_WIFI_INFO: JString;
    function _GetWIFI_STATE_CHANGED_ACTION: JString;

    property ACTION_PICK_WIFI_NETWORK: JString read _GetACTION_PICK_WIFI_NETWORK;
    property EXTRA_WIFI_INFO: JString read _GetEXTRA_WIFI_INFO;
    property WIFI_STATE_CHANGED_ACTION: JString read _GetWIFI_STATE_CHANGED_ACTION;
  end;

  [JavaSignature('android/net/wifi/WifiManager')]
  JWifiManager = interface(JObject)
    ['{DA7107B9-1FAD-4A9E-AA09-8D5B84614E60}']
    function isWifiEnabled: Boolean; cdecl;
    function setWifiEnabled(enabled: Boolean):Boolean; cdecl;
    //function getConfiguredNetworks : JList;cdecl;
    function getConnectionInfo: JWifiInfo; cdecl;
  end;

  TJWifiManager = class(TJavaGenericImport) end;

  JWifiInfoClass = interface(JObjectClass)
    ['{2B1CE79F-DE4A-40D9-BB2E-7F9F118D8C08}']
    function _GetLINK_SPEED_UNITS:JString;
    property LINK_SPEED_UNITS: JString read _GetLINK_SPEED_UNITS;
  end;

  [JavaSignature('android/net/wifi/WifiInfo')]
  JWifiInfo = interface(JObject)
    ['{4F09E865-DB04-4E64-8C81-AEFB36DABC45}']
    function getBSSID: JString; cdecl;
    function getHiddenSSID: Boolean; cdecl;
    function getIpAddress: integer; cdecl;
    function getLinkSpeed: integer; cdecl;
    function getMacAddress: JString; cdecl;
    function getNetworkId: integer; cdecl;
    function getRssi: integer; cdecl;
    function getSSID: JString; cdecl;
  end;

  TJWifiInfo= class(TJavaGenericImport) end;

function GetWifiManager: JWifiManager;
var
  WifiManagerNative: JObject;
begin
  WifiManagerNative := SharedActivityContext.getSystemService(TJContext.JavaClass.WIFI_SERVICE);
  if not Assigned(WifiManagerNative) then
    raise Exception.Create('Could not locate Wifi Service');
  Result := TJWifiManager.Wrap((WifiManagerNative as ILocalObject).GetObjectID);
  if not Assigned(Result) then
    raise Exception.Create('Could not access Wifi Manager');
end;

function GetConnectivityManager: JConnectivityManager;
var
  ConnectivityServiceNative: JObject;
begin
  ConnectivityServiceNative := SharedActivityContext.getSystemService(TJContext.JavaClass.CONNECTIVITY_SERVICE);
  if not Assigned(ConnectivityServiceNative) then
    raise Exception.Create('Could not locate Connectivity Service');
  Result := TJConnectivityManager.Wrap((ConnectivityServiceNative as ILocalObject).GetObjectID);
  if not Assigned(Result) then
    raise Exception.Create('Could not access Connectivity Manager');
end;

{ TPlatformNetworkState }

function TNetworkState.IsConnected: Boolean;
var
  ConnectivityManager: JConnectivityManager;
  ActiveNetwork: JNetworkInfo;
begin
  ConnectivityManager := GetConnectivityManager;
  ActiveNetwork := ConnectivityManager.getActiveNetworkInfo;
  Result := Assigned(ActiveNetwork) and ActiveNetwork.isConnected;
end;

function TNetworkState.IsMobileConnected: Boolean;
var
  ConnectivityManager: JConnectivityManager;
  MobileNetwork: JNetworkInfo;
begin
  ConnectivityManager := GetConnectivityManager;
  MobileNetwork := ConnectivityManager.getNetworkInfo(TJConnectivityManager.JavaClass.TYPE_MOBILE);
  Result := MobileNetwork.isConnected;
end;

function TNetworkState.IsWifiConnected: Boolean;
var
  ConnectivityManager: JConnectivityManager;
  WiFiNetwork: JNetworkInfo;
begin
  ConnectivityManager := GetConnectivityManager;
  WiFiNetwork := ConnectivityManager.getNetworkInfo(TJConnectivityManager.JavaClass.TYPE_WIFI);
  Result := WiFiNetwork.isConnected;
end;

function TNetworkState.GetState: TState;
begin
  if not IsConnected then
    Result := NotConnect
  else if IsMobileConnected then
    Result := Mobile
  else if IsWifiConnected then
    Result := Wifi
end;
{$ENDIF}
end.

20 Ekim 2014 Pazartesi

Delphi Android Broadcast Receiver Component

Merhabalar,





Bu component yardımı ile telefonunuzdaki yayınları yakalayabileceksiniz.

Not: Classes.dex ile ilgili hiçbir ayar yapmanıza gerek yoktur, standart bir component kurulumu ile aynı işlemleri yapmanız yeterlidir.

Proje XE6 ve XE7 üzerinde test edilmiştir.

Proje dosyaların içerisinde sizler için bir örnek hazırladım bu örnek sayesinde gelen çağıyı yapan numarayı yakalayabiliyorsunuz.

Nedir bu yayın türü sorular için: http://developer.android.com/reference/android/content/BroadcastReceiver.html



Kullanımı:

1-) BroadcastReceiver1.RegisterReceive : Yayın alıcıları açar ve dinleme işlemini başlatır.

2-) BroadcastReceiver1.Add(''): Dinlenmesini istediğiniz intentleri bu şekilde ekleyiniz.

3-) BroadcastReceiver1.SendBroadcast(''): Manuel olarak bir yayın göndermek isterseniz buraya yazınız.

4-) "OnReceive" Event.Yayın dinlediğiniz yayınlarda herhangi bir hareketlenme olursa bu event tetiklenir ve içerisindeki kodları çalıştırır.

Not: On KitKat only system services are allowed to send broadcast



Sorularınız ve önerileriniz çerçevesinde geliştirilmesi yapılabilecek güzel bir componenttir.

13 Ekim 2014 Pazartesi

Wifi Üzerinden DEBUG

Merhabalar,

Konu anlatımı tamamen cyber-warrior formundan "tavşanlılı" arkadaşıma aittir.

WiFi üzerinden debug işlemini basitçe anlatmaya çalıştım.

Telefonunuza WiFi ADB yazılımını kurun.Zaten tek buton var.

Aktif ettiğinizde wifi üzerinden bağlantı kuruyorsunuz telefonun ip adresine.

Delphi üzerinden de bu cihaz yada cihazlar hedef aygıt listesine otomatik olarak geliyor.

PlatformSDK klasörünüz neredeyse o dizinde ilgili komutları çalıştırıp işlemi tamamlayabilirsiniz.

Örnek yol: C:\Users\Public\Documents\Embarcadero\Studio\14.0\PlatformSDKs\adt-bundle-windows-x86-20131030\sdk\platform-tools

Gerisi resimlerde.






İşi biraz daha abartıp modemden port yönlendirip işyerinden de uygulama test ettim sıkıntısız çalıştı.
İnternet bağlantı hızınıza göre gecikmeler olabiliyor.

Hepinize kolay gelsin.




Delphi Mobile Youtube Component

Merhabalar,



Projelerinde Youtube hesaplarındaki videoları paylaşmak isteyen arkadaşlarımız olabilir.
Onlar için küçük bir component hazırladım.

TMS bu componenti ve bir çoğunu para ile pazarladığı için kendi projelerimde ihtiyaç durumunda hazırlayıp paylaşımlarda bulunmayı düşünüyorum.

Componentin yapısı:

YouTubeId  kısmına youtube videosunun id kısmını yani eşittir(=)'den sonrasını oraya

yazdığınızda ve GetDesign seçeneği "True" ise aşağıda göreceğiniz gibi otomatik olarak video bilgilerini görebilirsiniz.

XE6 ile test edilmiştir.




Not : Örnekler proje dosyasının içerisindedir:

Kullanımı:
1-) Youtube1.Play : Öncelikle videonun oynatılabilir çözünürlüklerini seçenek olarak gösterir.
Sonrasında youtube videosunu cihazınıza oynatılabilir video olarak yayın yapar ve açılan seçeneklerde videoyu oynatabilecek uygulamaları görebilirsiniz.

Örnek:



2-) Youtube1.Download: Öncelikle "Youtube1.DownloadFolder" ile indireceğiniz yeri belirtmelisiniz. Sonrasında videonun indirilebilir çözünürlüklerini seçenek olarak gösterir ve seçimden sonra indirme işlemi başlar.
"OnDownload" eventi içerisinde indirilen videonun yüzdesini ve o an indirilen dosya boyutunu görebilirsiniz.


11 Ekim 2014 Cumartesi

Office 2013 Crack

Merhabalar,



Bazı arkadaşların işine yarayabileceği kanısındayım. Sizde bilirsiniz ki Türk halkı kolay kolay lisanslı ürün kullanmaz gerek maaş ortalamasından dolayı gerekse başka sebebler.

Kurulumdan sonra yüklenen exeyi açtığınıda üsteki resimdeki gelecektir soldaki Kırmızı butonlu resime basarsanız crack işlemi gerçekleşir.

İndirme Linki[23/10/2014]: https://www.mediafire.com/?k2q5p0afctd95od

Saygılar :)

3 Ekim 2014 Cuma

Delphi Android Dinamik Broadcast Receiver oluşturma ve Servis kullanımı

Merhabalar,

Component hali için aşağıdaki linki ziyaret edin.
http://brsatalay.blogspot.com.tr/2014/10/delphi-android-broadcast-receiver.html

Öncelikle şimdiden iyi bayramlar dilerim herkese :)



Bu yazımda android dünyasından yine bişiler kurcalarken, benim pek işime yarıyacak yer bulamadım ama bir dostun işine yarayabileceği birşeyi paylaşmak isterim.

Nedir bu Broadcast Receiver Buraya Tıklayınız!

İnsan bu konunun devamını okuyorsa ve kullanmak istiyorsa yeteri kadar bilgisi ve fikrinin olduğunu varsayarak devam ediyorum.

Bu örnek projede kendimiz uygulama içerisinden bir yayın yapacağız ve bu yaptığımız yayını aynı uygulama içerisinde yakalayacağız.

Projeyi XE6 üzerinde yapmış bulunmaktayım.

Hali hazırda http://brsatalay.blogspot.com.tr/2014/08/delphi-android-foreground.html linkindeki anlattığım olayları yapmışsanız classes.dex dosyası aynı dosyadır.

Aşağıdaki linklerden eksik olan dosyalarını tedarik edebilirsiniz

Toast.pas ve ActivityReceiverU.pas  : http://s3.dosya.tc/server28/JRMhZO/Units.rar.html

Gerekli java dosyaları :http://s3.dosya.tc/server28/cBusGJ/java.rar.html


Projemize java dosyası içerisindeki output klasöründeki classes.dex dosyasını deploy ediyoruz.

Deploy işlemi hakkında bilgisi olmayanlar linki incelesinler: http://brsatalay.blogspot.com.tr/2014/08/delphi-classesdex-deploy.html


Sabit değişken olarak yayınlayacağımız bazı Yayın kodlarını ekleyelim

Const        (*       EXAMPLES        *)
  PERMISSION = 'com.DynamicBroadcastReceiver.intent.action.deneme'; //Manuel
  BATTERY    = 'android.intent.action.BATTERY_CHANGED';
  INTERNET   = 'WIFI_STATE_CHANGED_ACTION';
  CALL       = 'android.intent.action.PHONE_STATE'; //Gelen aramalar için

Eksik kütüphaneleri uses bloğuna ekleyin.

Androidapi.JNI.GraphicsContentViewText,
  FMX.Helpers.Android
  ,AndroidApi.Helpers
  ,FMX.Platform.Android
  ,FMX.Platform
  ,ToastAndroid
  ,ActivityReceiverU 


Formun OnKeyUp eventine aşağıdaki kodu yazarak geri tusuna basıldığında uygulamamızı arka planda calısması için ayarlayalım

  if Key = vkHardwareBack then
  begin
    Key := 0;
    MainActivity.moveTaskToBack(True);
    Toast('Arka plan',TToastLength.ShortToast);
  end;


Formun var bloğuna aşağıdaki değişkenleri ekleyiniz.

  ServiceReceiver: TJBroadcastReceiver;
  FReceiver: JBroadcastReceiver;


Formumuzun private tanım alanına aşağıdaki değişkenleri ekleyin.

AppEvents: IFMXApplicationEventService;
    function ApplicationEventHandler(AAppEvent: TApplicationEvent;AContext: TObject): Boolean;


"ApplicationEventHandler" proceduresinin içerisi aynı aşağıdaki gibi olmalıdır.

  case AAppEvent of
    TApplicationEvent.BecameActive:
    begin
      ReceiverAta;
    end;
    TApplicationEvent.WillTerminate:
    begin
      ReceiverKaldir;
    end;
    TApplicationEvent.EnteredBackground:
      MainActivity.moveTaskToBack(True);
  end;
  Result := True;


Formun onCreate eventine aşağıdaki kodları yazınız.

  if TPlatformServices.Current.SupportsPlatformService
    (IFMXApplicationEventService, IInterface(AppEvents)) then
    AppEvents.SetApplicationEventHandler(ApplicationEventHandler);


Şimdid gelelim "ApplicationEventHandler" proceduresinin içerisindeki 2 olaya. BecameActive devreye girdiğinde yani uygulamamız Active olduğu anda ReceiverAta proceduresi calısacak ki buda yayın alıcıları aktif yaparak cihazdaki o an yayınlanan şeyleri dinlemek için.
WillTerminate ise tersi durumda yayın dinleyicileri kaldırmak için.

//ReceiverKaldir içerisi
  if FReceiver <> nil  then
    SharedActivity.UnregisterReceiver(FReceiver);


//ReceiverAta içerisi
var
  Filter: JIntentFilter;
begin
  FReceiver := TJActivityReceiver.Create;
  Filter := TJIntentFilter.Create;
  Filter.addAction(StringToJString(PERMISSION));
  Filter.addAction(StringToJString(CALL));//YAKALAMAK İSTEDİĞİNİZ YAYINLAR BURAYA EKLENİR.
  SharedActivity.RegisterReceiver(FReceiver, Filter);


Formun onDestroy eventine program sonlandırıldıgında yaratılan nesneyi serbest bırakmak için gerekli kodu yazalım. Android ortamda otomatik serbest bırakıldıgını varsayıyorum ama ne olur ne olmaz işi şansa bırakmamak gerek.

  ServiceReceiver.Free;


Ve şimdi sıra geldi son işlemimize bunun için Forma 1 tane buton yerleştirin ve içerisine aşağıdaki kodları ekleyiniz. Aşağıdaki kodlarda göreceğiniz üzere Const olarak tanımladığımız PERMISSION değişkenini yayına gönderdik ve butona bastığımızda en üsteki gibi yakalanan yayın toast olarak gösterilecektir.

var
  Inx: JIntent;
begin
  Inx := TJIntent.Create;
  Inx.setAction(StringToJString(PERMISSION));
  SharedActivityContext.sendBroadcast(Inx);

2 Ekim 2014 Perşembe

Delphi Türkiye Merkez Bankası Döviz Kurlarını Okuma

Merhabalar,



Geçtiğimiz günlerde merkez bankası döviz kurları için kullanılan Html sayfasını kapatmış bulunmakta. Bunu bazı eski firmalar .xml servisleri açılmadan önce kullandığı için bu yenilik sayesinde artık xml yapısına geçmelidirler.

Bu durum için bir procedure hazırladım. Bu procedure için forma 1 tane "XMLDocument" nesnesi yerleştirmelisiniz.

Aşağıda dönen verileri almanız için gerekli notları bıraktım onları istediğiniz gibi txt dosyası içerisine kaydedebilirsiniz artık.

//Kullanımı:
DovizIslemleri(XMLDocument1);

Uses Vcl.ExtActns;

procedure DovizIslemleri(XMLComp: TXMLDocument);
var
  I: Integer;
  S,
  LocalFile,
  tmpUrl: String;
  HeaderNode,
  CurrNode: IXMLNode;
  {$REGION 'Gerekli Fonksiyonlar'}
  function DownloadURLFile(const UrlFile, LocalFile : TFileName) : boolean;
  begin
    Result:=True;

    with TDownLoadURL.Create(nil) do
    try
      URL:=UrlFile;
      Filename:=LocalFile;
      try
        ExecuteTarget(nil);
      except
        Result:=False;
      end;
    finally
      Free;
    end;
  end;

  function Kontrol(xDate:String;Url: String): String;
  var
    D1,
    D2,
    Tmp: String;
  begin
    Tmp := FormatDateTime('t',Now);
    if (Trim(xDate) = '') or (StrToTime(Tmp) < StrToTime('15:30')) then //2. koşulun sebebi saat 15:30 dan önce her zaman bir önceki günün değeri gelir
      Url := Format(Url,['today'])
    else
    begin
      D1 := FormatDateTime('yyyymm', StrToDate(xDate));
      D2 := FormatDateTime('ddmmyyyy', StrToDate(xDate));
    
      Tmp := D1 + '/' + D2 ;
      Url := Format(Url,[Tmp]); 
    end;
    Result := Url;
  end;
  {$ENDREGION}
begin
  try 
    LocalFile := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + 'temp.TMB.xml';
    tmpUrl := Kontrol(DateToStr(Date),'http://www.tcmb.gov.tr/kurlar/%s.xml');
    Screen.Cursor:=crHourglass;
    try
      if not DownloadURLFile(tmpUrl, LocalFile)  then
      begin
        Screen.Cursor:=crDefault;
        Raise Exception.CreateFmt('İnternet ile ilgili bir problem ile karşılaşıldı lütfen tekrar deneyiniz..',[]);
        Exit;
      end;

      if not FileExists(LocalFile) then
      begin
        Screen.Cursor:=crDefault;
        raise exception.Create('Xml İndirilemedi!');
        Exit;
      end;
      XMLComp.Active := False;
      XMLComp.FileName := LocalFile;
      XMLComp.Active:=True;

      HeaderNode := XMLComp.DocumentElement;
      S          := HeaderNode.Attributes['Tarih'];// Tarih

      for i := 0 to HeaderNode.ChildNodes.Count - 1 do
      begin
        CurrNode := HeaderNode.ChildNodes.Get(I);

        {$REGION 'Dönenler'}
(*      //PARA KODU
        CurrNode.Attributes['Kod']
        //<Unit>
        CurrNode.ChildNodes.Get(0).NodeValue;
        //<Isim>
        CurrNode.ChildNodes.Get(1).NodeValue;
        //<CurrencyName>
        CurrNode.ChildNodes.Get(2).NodeValue;
        //<ForexBuying>
        CurrNode.ChildNodes.Get(3).NodeValue;
        //<ForexSelling>
        CurrNode.ChildNodes.Get(4).NodeValue;
        //<BanknoteBuying>
        CurrNode.ChildNodes.Get(5).NodeValue;
        //<BanknoteSelling>
        CurrNode.ChildNodes.Get(6).NodeValue;
        //<CrossRateUSD>
        CurrNode.ChildNodes.Get(7).NodeValue;
        //<CrossRateUSD>
        CurrNode.ChildNodes.Get(8).NodeValue;
  *)        
        {$ENDREGION}
      end;
    finally
      DeleteFile(LocalFile);
      Screen.Cursor:=crDefault;
    end;
  except
    on E: Exception do ShowMessage(E.Message);
  end;//try
end;

1 Ekim 2014 Çarşamba

Barış ATALAY - Linkedin

Merhabalar,

Linkedin üzerinden benimle bağlantı kurmak isteyenler olursa bana aşağıdaki linkten ulaşabilirler.

Bunu yeni öğrendim ki çevre demek herşeymiş tek başına ağzınla kuş tutsan boş.

Saygılar :)

tr.linkedin.com/pub/barış-atalay/88/347/546/