İdhttp.free sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
hakanharbeli
Üye
Mesajlar: 76
Kayıt: 01 Nis 2016 03:58

İdhttp.free sorunu

Mesaj gönderen hakanharbeli »

Merhaba,

kaynak kodu çektiğim bir kodum var.

button click olayına şu kodları yazıyorum

idhttp.get(url);

idhttp.free;


ilk tıkladığımda sıkıntı yok ikinci tıkladığımda access violation hatası alıyorum.
Herhalde bu idhttp.free yi bir şekilde yeniden active etmeliyim.
Yardımlarınız için teşekkürler şimdiden
ertank
Kıdemli Üye
Mesajlar: 1716
Kayıt: 12 Eyl 2015 12:45

Re: İdhttp.free sorunu

Mesaj gönderen ertank »

Merhaba,

İlgili ButonClick() prosedürünü paylaşabilir misiniz?
hakanharbeli
Üye
Mesajlar: 76
Kayıt: 01 Nis 2016 03:58

Re: İdhttp.free sorunu

Mesaj gönderen hakanharbeli »

Kod: Tümünü seç

procedure TForm1.button1Click(Sender: TObject);
var
b:string;
begin
b:='https://www.youtube.com/watch?v=B_uZa5q3hbQ';
sinmemo.Text:=Idhttp1.Get(b);
idhttp1.free;
end;
burada butona 2. defa tıkladığımda access violation hatası alıyorum.

sanırım sorun idhttp1.free de ama o free orda olmak zorunda
hakanharbeli
Üye
Mesajlar: 76
Kayıt: 01 Nis 2016 03:58

Re: İdhttp.free sorunu

Mesaj gönderen hakanharbeli »

Şunu eklemek istiyorum :

İdhttp ile çektiğim kaynak kodunu mail ile gönderiyorum bunun için idsmtp kullanıyorum fakat idhttp ile çektikten sonra idsmtp mail göndermiyor ancak idhttp'yi idhttp.free olarak aldıktan sonra mail gönderebiliyor. bu sebeple free olmalı ya da idhttp ile idsmtp'nin neden bir arada çalışmadığını söylerseniz de sorunu çözebiliriz
ertank
Kıdemli Üye
Mesajlar: 1716
Kayıt: 12 Eyl 2015 12:45

Re: İdhttp.free sorunu

Mesaj gönderen ertank »

IdSmtp ile mail gönderen kodu paylaşabilir misiniz? Sorununuz yüksek ihtimalle o kısımda.
ertank
Kıdemli Üye
Mesajlar: 1716
Kayıt: 12 Eyl 2015 12:45

Re: İdhttp.free sorunu

Mesaj gönderen ertank »

hakanharbeli yazdı:

Kod: Tümünü seç

procedure TForm1.button1Click(Sender: TObject);
var
b:string;
begin
b:='https://www.youtube.com/watch?v=B_uZa5q3hbQ';
sinmemo.Text:=Idhttp1.Get(b);
idhttp1.free;
end;
burada butona 2. defa tıkladığımda access violation hatası alıyorum.

sanırım sorun idhttp1.free de ama o free orda olmak zorunda
Öncelikle yukarıdaki kod ile ilgili birkaç noktaya dikkat çekmek istiyorum.
1- Kod yazarken tüm satırları ilk kolondan başlatmayın. Bu tür kodları okumak hiç kolay olmaz. Bloklar halinde begin..end, try..finally..end vb. arasında kalan kodları en az iki karakter içeriden yazmaya çalışın.
2- Bileşen isimleri her ne kadar programcı kullanımına bırakılmış olsa da kullandığınız dilin genel kabul görmüş bileşen/değişken adı kullanımına uymanızda fayda var. Pascal için genelde kelimelerin ilk harfleri büyük yazılacak şekilde bileşen/değişken adı kullanılır.
3- Prosedür/fonksiyon tanımlarında veya "var" ile değişken tanımlarında iki noktadan (:) sonra bir boşluk bırakmanızda fayda var.
4- Değişken atamalarında ":=" önünde ve arkasında boşluk bırakmanızda fayda var.
Burada anlatmaya çalıştıklarımı aşağıdaki örnek kod içinde görebilirsiniz.

Bunlar her ne kadar kural olmasa da 6 ay veya 1 sene sonra kod içinde değişiklik yapmaya çalıştığınızda koşullar/çalışma sırası gibi kavramları çok daha hızlı hatırlamanıza yardımcıdır.

Sorunuza gelince; Form üzerindeki IdHttp1 bileşenini silip buton tıklamasına aşağıdaki şekilde bir kod yazmanız mümkün.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  Http: TIdHttp;
begin
  Http := TIdHttp.Create(nil);
  try
    Memo1.Text := Http.Get('https://www.youtube.com/watch?v=B_uZa5q3hbQ');
  finally
    Http.Free();
  end;
end;
Ancak, daha önce bahsettiğim gibi. Esas sorunun e-mail gönderme kısmı ile alakalı olduğuna inanıyorum.
hakanharbeli
Üye
Mesajlar: 76
Kayıt: 01 Nis 2016 03:58

Re: İdhttp.free sorunu

Mesaj gönderen hakanharbeli »

Çok teşekkürler hocam önerilerinizi dikkate alacağım. sorunu çözdüm idhttp ve idsmtp'de aynı SSL bileşenini kullanmışım form'a her ikisi için de ayrı iki tane atmalıymışım
Cevapla