Stringridde alanın silinip,kaydırılması

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Serim
Üye
Mesajlar: 194
Kayıt: 08 Ara 2004 03:32
Konum: Konya

Stringridde alanın silinip,kaydırılması

Mesaj gönderen Serim »

meraba arkadaşlar,
stringgridimde 11 satır 10 sütunum var.Haritadan hangi ili seçersem stringgiride atacak ve aynı il tekrar tıklanırsa stringgirdden silecek ve eğer silinen ilin altında başka bir il varsa onu yukarı kaydıracak.bu procedurde dediğim işlemi yapıyor ancak ufak bir sorun var :( mesela 1.sütunun 11. satırında (son satır) bulunan ili sildik dielim 2.sütundaki ilk kaydı 1.sütunun 11. satırına kaydırmıyo.bu procedure ekleyeceğim kod ne olmalı?

procedure yukari_kaydir;
var
sondolu,x,y:integer;
degisti:boolean;
begin
repeat
degisti:=False;sondolu:=0;
y:=0;
for x:=1 to Form1.stringgrid2.RowCount do begin
if Form1.stringgrid2.Rows[x-1].Strings[0]<>'' then sondolu:=x;
if Form1.stringgrid2.Rows[x-1].Strings[0]='' then
if Form1.stringgrid2.Rows[x].Strings[0]<>'' then begin

Form1.stringgrid2.Rows[x-1].Strings[0]:= Form1.stringgrid2.Rows[x].Strings[0];
Form1.stringgrid2.Rows[x].Strings[0]:='';
degisti:=True;
if x=12 then
begin
Form1.stringgrid2.Rows[x-1].Strings[0]:= Form1.stringgrid2.Rows[0].Strings[1];
end;

end;
end;

şimdiden teşekkürler :D iyi çalışmalar.... :wink:
Bilginin temelini sağlam at depremde zarar görmesin
Kullanıcı avatarı
Serim
Üye
Mesajlar: 194
Kayıt: 08 Ara 2004 03:32
Konum: Konya

Mesaj gönderen Serim »

until not degisti;
Form1.stringgrid2.RowCount:=sondolu;
end;


birazönceki procedure ün dewamı.eklemeyi unutmuşumda :oops: :)
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

yönteminiz biraz yanlış gibi, en azından ben bu tarz objeler üzerinde data tutulmasını pek sıcak bulmuyorum. seçili datalarınızı bi dizide tutup onu refresh etseniz daha güzel ve kolay olabilir.

bi type ile değişkenlerinizi tanımlarsınız.

Kod: Tümünü seç

type TIller = Record
 iILPlakaNo : integer;
 sILAdi     : string;
 bILSecili  : boolean;
end;

Const
 IL_SAYISI  = 80;

var
  Iller: array[1..IL_SAYISI] of TIller;
sonra formun creatinde değişkeni doldurursunuz

Kod: Tümünü seç

var i : integer;
begin
  // il isimlerini ata
  for i := 1 to IL_SAYISI do
   begin
    Iller[i].iILPlakaNo := i;
    Iller[i].sILAdi     := inttostr(i)+' - '+ILLERTABLOSU[i];
    Iller[i].bILSecili  := FALSE;
   end;


  // seçmen listesini doldur
  StringGrid1.RowCount := IL_SAYISI+1;
  StringGrid1.Rows[0].Strings[0] := 'İllerimiz :';
  for i := 1 to IL_SAYISI do
    StringGrid1.Rows[i].Strings[0] := Iller[i].sILAdi;

  Tablo_Doldur;
....
gridin clickinde ilgili alanı set eder

Kod: Tümünü seç

procedure TForm1.StringGrid1DblClick(Sender: TObject);
var iTiklanan:integer;
begin
  iTiklanan := StringGrid1.Row;
  if Not ((iTiklanan>=1) and (iTiklanan<=IL_SAYISI)) then
   Exit;

  Iller[iTiklanan].bILSecili := NOT Iller[iTiklanan].bILSecili;
  Tablo_Doldur;
end;
sonra bunu istediğiniz bi objeye doldurursunuz.
burda eğer çok sütunlu bişey yapcaksanız iSeciliIlSayisi ninin mod 10 unu
alır sütun sayısını satır sayısını çıkartırsınız ...

Kod: Tümünü seç

procedure TForm1.Tablo_Doldur;
var i,iSeciliIlSayisi : integer;
begin
 iSeciliIlSayisi := 0;
 StringGrid2.RowCount := 1;
 StringGrid2.Rows[0].Strings[0] := 'Seçilen İller';
 for i := 1 to IL_SAYISI do
   if Iller[i].bILSecili then
     begin
      inc(iSeciliIlSayisi);
      StringGrid2.RowCount := iSeciliIlSayisi+1;
      StringGrid2.Rows[iSeciliIlSayisi].Strings[0] := Iller[i].sILAdi;
     end;
end;
.-.-.-.-.-.-.-. ^_^
Cevapla