out of memory hatası

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
mancho_67
Üye
Mesajlar: 15
Kayıt: 29 Ara 2006 11:46
Konum: Konya

out of memory hatası

Mesaj gönderen mancho_67 »

selamün aleyküm iyi geceler cümleten arkadaşlar. arkadaşlar şöyle bir sıkıntıyla başbaşa kaldım.seri port üzerinden veri almak istiyorum bunun için Cport bileşenini kullanıyorum ve aldığım değerler bir memoya alt alta yazılıyor. daha sonra da bunları ben içiçe iki for döngüsüyle çağırıp (satır ve sütun bilgisi olarak) stringgridde gösteriyorum. aşağıda programımı veriyorum acaba neden kaynaklanabilir bu hata? yardımcı olabilirseniz sevinirim. belki cevap basittir ama ben delphiye yeniyim yani amatör sayılırım kusuruma bakmayın. . .

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  if comport1.Connected then
    showmessage('Port 1 açıldı...')
  else
    showmessage('Portları kontrol et!');
  if comport2.Connected then
    showmessage('Port 2 açıldı...')
  else
    showmessage('Portları kontrol et!');
  if comport3.Connected then
    begin
      showmessage('Port 3 açıldı...'#13'Program Kullanıma Hazır.');
      label4.Caption:='Portlar açık'
    end
  else
    showmessage('Portları kontrol et!');
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
  Comport1.Free;
  Comport2.Free;
  Comport3.Free;
  showmessage('Portlar Kapatıldı.');
  label4.Caption:='Portlar Kapalı...';
  end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i,j,k,say,say2,say3:integer;
  moment,akim,devir:string;
begin
  k:=1;
  for i:=0 to 25 do
    begin
      for j:=0 to 20 do
        begin
          comport1.ReadStr(moment,say);
          memo1.Text:=memo1.Text+moment;
          form2.StringGrid1.Cells[i,j]:=memo1.Lines[k];
          k:=k+1;
        end;
    end;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  form2.Show;
end;

end.
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

TForm1.Button2Click kodunu şu şekilde dener misin?

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject); 
var 
  i,j,say,say2,say3:integer; 
  moment,akim,devir:string; 
begin 
  for i:=0 to 25 do 
    begin 
      for j:=0 to 20 do 
        begin 
          comport1.ReadStr(moment,say);
          if say > 0 then
          begin
            memo1.Lines.Add(moment); 
            form2.StringGrid1.Cells[i,j]:=moment; 
          end; 
        end; 
    end; 
end;
mancho_67
Üye
Mesajlar: 15
Kayıt: 29 Ara 2006 11:46
Konum: Konya

ufak bir sorun var . . .

Mesaj gönderen mancho_67 »

Arkadaşım ilgilendiğin için öncelikle teşekkür ederim. bu kodları yerleştirdiğim zaman, gridde aynı hücreye yazıyor üstüste. fakat ben her bilgiyi yanyana ayrı hücrelere yazmasını istiyorum. bunu için ne yapabiliriz acaba fikrin ya da önerin var mı?
tekrar teşekkür ederim. bitirme projemde böyle bir durum var ondan dolayı bayağı bir sıkıntıya girdim uğraşıyorum ama çıkış bulamadım . .
Kullanıcı avatarı
fatihtolgaata
Üye
Mesajlar: 382
Kayıt: 04 Mar 2004 09:46
Konum: K.çekmece / İstanbul
İletişim:

Mesaj gönderen fatihtolgaata »

Genelde bu gibi bir hatada ilk akla gelen şey, oluşturulan bir nesnenin boşaltılmadan bir döngü içinde tekrar tekrar değer atanmasından kaynaklanır. Böylece belli bir süre sonrasında hafıza dolar. Ama bu illaki senin kodlarında olacak diye bir durum da yok. Kullandığın bileşenlerden de kaynaklanıyor olabilir. Debug yaparak bir şekilde hatanın hangi satırdan geldiğini bulman şart. Mesela Comport1.ReadStr ile veri okuduğun yeri

Kod: Tümünü seç

.....
try
  comport1.ReadStr(moment,say);
except
  ShowMessage('Hata buradan geliyormuş');
end;
memo1.Text:=memo1.Text+moment; 
.....
gibi kullanarak hatanın nereden geldiğini tespit edebilirsin. Tabi hata comport bileşenindendir demiyorum ama bu gibi runtime hatalarının nereden geldiği hemen anlaşılmaz. Ayrıca bu hatayı verdiği zaman Break yapıp i ve j indeks değerlerinin ne olduğuna bakmak lazım. Sonucu buraya yazarsan yardımcı olmaya çalışırız.

Kolay gelsin.

vesselam
Cevapla