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. . .
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.
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;
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 . .
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
.....
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.