Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Delphi 7 Indy Komponent
#1
Arkadaşlar Merhaba,

Delphi7 uyumlu Indy Component son sürüme ihtiyacım var. Mevcut sürüm 10.0.xx'de SSL desteği yok. Elinizde varsa veya link bildirirseniz sevinirim. Teşekkürler.
Cevapla
#2
Buradaki verileri denediniz mi?
https://www.indyproject.org/download/
Cevapla
#3
Siteye bakmıştım. Download sayfasında yok. 10.0.52 işimi görmüyor. Yanlış hatırlamıyorsam 10.5.xx sürümde SSL desteği var. Bu sürümde sitede yok. Yeni sürüm Merkez Bankası günlük kurların çekilmesi için gerekli.
Cevapla
#4
Size bir kolaylık. 

* Indy kullanmadan SSL desteği : ( örnekte dolar kuru okunur ve ekrana mesaj olarak gösterilir )
* Parse örnek için el yordamıyla yapıldı. XML node name/value olarak okumak daha sağlıklı olur.


Uses WinInet;

function GetUrlSource( aUrl : String; aStream: TStringStream ): Boolean;
var
  hService      : HINTERNET;
  hSession      : HINTERNET;
  lpBuffer      : array[0..1023] of Byte;
  dwBytesRead   : DWORD;
  dwBytesAvail  : DWORD;
  dwTimeOut     : DWORD;
  Sessionname   : String;
begin
  Result        := False;
  if NOT Assigned(aStream) then exit;

  Sessionname   := 'TCMB_Session_' + DateTimeToStr(now);
  hSession      := InternetOpen( PChar(Sessionname), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0 );
  if not Assigned(hSession) then Exit;
  try
    hService := InternetOpenUrl(hSession, PChar(aUrl), nil, 0, INTERNET_FLAG_RELOAD, 0);
    if hService = nil then
      Exit;
    try
      dwTimeOut := 60000; // a minute
      InternetSetOption(hService, INTERNET_OPTION_RECEIVE_TIMEOUT, @dwTimeOut, SizeOf(dwTimeOut));
      if InternetQueryDataAvailable(hService, dwBytesAvail, 0, 0) then
        while ( InternetReadFile(hService, @lpBuffer[0], SizeOf(lpBuffer), dwBytesRead) )
          and ( dwBytesRead <> 0 )
            do aStream.WriteBuffer(lpBuffer[0], dwBytesRead);

      aStream.Position := 0; // ready to use
      Result := aStream.Size > 0;
    finally
      InternetCloseHandle(hService);
    end;
  finally
    InternetCloseHandle(hSession);
  end;
end;


Kullanımı :

procedure TForm1.Button1Click(Sender: TObject);
Const
  LUrl = 'https://www.tcmb.gov.tr/kurlar/today.xml';
var
  LContent  : String;
  LSS       : TStringStream;
  LSrc,
  LBanknoteBuying,
  LBanknoteSelling : String;
begin
  LSS := TStringStream.Create('');
  try
    GetUrlSource( LUrl, LSS );
    LContent := LSS.DataString;
    LSrc := 'CurrencyCode="USD">';
    if Pos(LSrc, LContent) > 0 then
    begin
      Delete(LContent, 1, Pos(LSrc, LContent) + Length(LSrc)-1);
      LContent := Copy( LContent, 1, Pos('</Currency>', LContent)-1);

      LSrc := '<BanknoteBuying>';
      if Pos(LSrc, LContent) > 0 then
      begin
        Delete(LContent, 1, Pos(LSrc, LContent) + Length(LSrc)-1);
        LBanknoteBuying := Copy(LContent, 1, Pos('<', LContent)-1 );
      end;

      LSrc := '<BanknoteSelling>';
      if Pos(LSrc, LContent) > 0 then
      begin
        Delete(LContent, 1, Pos(LSrc, LContent) + Length(LSrc)-1);
        LBanknoteSelling := Copy(LContent, 1, Pos('<', LContent)-1 );
      end;
      ShowmessageFmt('USD Alış : %s  Satış : %s', [ LBanknoteBuying, LBanknoteSelling ]);
    end;
  finally
    FreeAndNil(LSS);
  end;
end;

Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#5
Teşekkür ederim Muharrem Bey. Evet WinINet API ile çözülebilir. Ancak projenin farklı yerlerinde farklı amaçlar için INDY kullanılıyor. Bu nedenle her prosedür ve fonksiyon için tekrar düzenleme yapmak gerekiyor. Bu işe girmemek adına yeni sürümü yüklemek daha mantıklı görünüyor bizim için. Link veya kpmponent paketi varsa elinizde, paylaşırsanız sevinirim. Kaynak kodun olup olmaması önemli değil. Kolay gelsin.
Cevapla
#6
O zaman indy yoksa projeniz çöker diyebilir miyiz?
Delphi 7'den vazgeçerim indy'den geçmem mi demeliyiz 
Verilen örnekler bunun için. 
Canınız sağolsun.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#7
Indy yoksa tabi ki proje çökmez. Kullandığınız bir komponent artık yoksa veya artık geliştirilmiyorsa tabi ki alternatif yöntemlere yönelirsiniz. Ancak var olan ve hala işe yarayan bir çözümü bir tarafa bırakıp, macera aramanın da da bir anlamı yok. Neden hala eski Delphi IDE diyorsanız eğer, bunu cevabı çok uzun olur Smile
Örnek kodunuz için eliniz sağlık, teşekkürler.
Cevapla
#8
Indy e alternatif olarak ücretli bir çözüm ipworks var.

“Do. Or do not. There is no try.”
Cevapla
#9
Teşekkür ederim masteryoda. Komponenti inceleyeceğim.
Cevapla
#10
Muharrem Bey Merhaba,
Örnek kodunuzu uyarlayarak kullandım. Teşekkür ederim. Ancak kur olmayan günleri (örneğin Pazar) nasıl kontrol ederim?
Indy kullanırken ResponseCode kullanarak kurun olmadığı günleri kontrol edebiliyordum. İçreğin boş gelmesi yeterliydi. Kur olmayan gün seçildiğinde bir gün geriye giderek kur alması gerekiyor. (LContent içeriği kontrol edilebilir, ancak bu uzun bir yol)
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  yapay zeka delphi kl007 9 628 26-02-2026, Saat: 09:12
Son Yorum: mrmarman
  Win 11 ve Delphi 7 Minimize sorunu. enigma 7 501 11-02-2026, Saat: 10:27
Son Yorum: RAD Coder
Question Delphi formunu nasıl otomatik tam ekran yapabilirim ? erdemklt0 2 326 23-01-2026, Saat: 10:02
Son Yorum: csunguray
  Delphi SLL kullanım sorunu Bay_Y 12 1.317 22-12-2025, Saat: 18:11
Son Yorum: Bay_Y
  Delphi ile SQL server bağlantı hatası yakalama Under 20 1.987 21-11-2025, Saat: 15:24
Son Yorum: mrmarman



Konuyu Okuyanlar: 1 Ziyaretçi