srtinggrrid siralama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
sr1111
Üye
Mesajlar: 220
Kayıt: 06 Mar 2008 01:59

srtinggrrid siralama

Mesaj gönderen sr1111 »

merhaba..
stringgriddeki degerleri lenght fonksiyonu ile nasil karakter sayisi cok olandan az olana dogru siralayabilirim.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: srtinggrrid siralama

Mesaj gönderen sabanakman »

Bu işlem için TStringList sınıfının CustomSort metodundan faydalanmak gerekecek.

Kod: Tümünü seç

function Kiyasla(List: TStringList; Index1, Index2: Integer): Integer;
begin
  Index1:=Length(List[Index1]);
  Index2:=Length(List[Index2]);
  if Index1>Index2 then Result:=1 //ilk sıradaki eleman uzun
  else if Index1<Index2 then Result:=-1 //ilk sıradaki eleman kısa
  else Result:=0; //<-her iki uzunluk eşit
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var Liste:TStringList;
begin
  Liste:=TStringList.Create;
  try  
    Liste.Assign(StringGrid1.Cols[1]);
    Liste.CustomSort(Kiyasla);
    StringGrid1.Cols[1].Assign(Liste);
  finally
    Liste.Free;
  end;
end;
gibi bir kodla bilgileri farklı bir listeye atıp o sınıfın sıralama özelliği kullanıp sadece uzunluk dikkate alınarak sıralama işlemi gerçekleşir.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
sr1111
Üye
Mesajlar: 220
Kayıt: 06 Mar 2008 01:59

Re: srtinggrrid siralama

Mesaj gönderen sr1111 »

tesekkurler oldu fakat soyle bir sorun var. stringgrid1 2 sutunlu ve 2. sutundakileri kucukten buyuge aldi. fakat onun karsiligi olan 1. stundakilerle birlikte olmasi lazim. ve 1. sutun asil alinmasi lazimsiralamada.
soyle bir sey oluyor o zaman sizin yapmis oldugunuz code da.

ali erkek
veli erkek
ayşe kız
karabaş köpek

oaln stringgridde

ali kız
ayse erkek

gibi bir sey cikiyor.

soyle olmasi lazim

karabas köpek
veli erkek
ali erkek

birinci sutuna gore sirlama yapip ikinci sutunuda yaninda tasimasi lazim.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: srtinggrrid siralama

Mesaj gönderen sabanakman »

O zaman kendi sıralama kodlarını geliştirmen gerek.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
sr1111
Üye
Mesajlar: 220
Kayıt: 06 Mar 2008 01:59

Re: srtinggrrid siralama

Mesaj gönderen sr1111 »

peki tesekkur ederim. acaba siraladigimda 1. ve 2. sutunu birlikte nasil tasirim.
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: srtinggrrid siralama

Mesaj gönderen unicorn64 »

stringgridin cells değeri direk string verdiğinden doğrudan taşıma gibi bir durum yok.
ama bir geçici değişken üzerinden takas yapabilirsiniz.

örneğin 2. satırla 3. satır yer değiştirecekse

Kod: Tümünü seç

for i:=0 to sutunsayisi-1 do
begin
  gecici:=sg.cells[i,1];
  sg.cells[i,1]:=sg.cells[i,2];
  sg.cells[i,2]:=gecici;
end;
yani klasik bubble sort mantığı...
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
sr1111
Üye
Mesajlar: 220
Kayıt: 06 Mar 2008 01:59

Re: srtinggrrid siralama

Mesaj gönderen sr1111 »

asagidaki bu code cok işime yaradi ve calisti. fakat soyle bir seyi bu code uzerinde nasil yaparim.
siralarken ilk tab isaretine kadar olan uzunlugu varsaysin, asıl alsın.
sabanakman yazdı:Bu işlem için TStringList sınıfının CustomSort metodundan faydalanmak gerekecek.

Kod: Tümünü seç

function Kiyasla(List: TStringList; Index1, Index2: Integer): Integer;
begin
  Index1:=Length(List[Index1]);
  Index2:=Length(List[Index2]);
  if Index1>Index2 then Result:=1 //ilk sıradaki eleman uzun
  else if Index1<Index2 then Result:=-1 //ilk sıradaki eleman kısa
  else Result:=0; //<-her iki uzunluk eşit
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var Liste:TStringList;
begin
  Liste:=TStringList.Create;
  try  
    Liste.Assign(StringGrid1.Cols[1]);
    Liste.CustomSort(Kiyasla);
    StringGrid1.Cols[1].Assign(Liste);
  finally
    Liste.Free;
  end;
end;
gibi bir kodla bilgileri farklı bir listeye atıp o sınıfın sıralama özelliği kullanıp sadece uzunluk dikkate alınarak sıralama işlemi gerçekleşir.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: srtinggrrid siralama

Mesaj gönderen sabanakman »

Neye göre sıralama yapılacaksa Kiyasla fonksiyonunu ona göre yazmalısın.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
sr1111
Üye
Mesajlar: 220
Kayıt: 06 Mar 2008 01:59

Re: srtinggrrid siralama

Mesaj gönderen sr1111 »

nasıl yapacagim onu soruyorum. bilemiyorum.
Cevapla