DBLOOKUPCOMBOBOX ların içeriğini karşılaştırma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
estergon
Üye
Mesajlar: 5
Kayıt: 16 Eki 2006 05:56

DBLOOKUPCOMBOBOX ların içeriğini karşılaştırma

Mesaj gönderen estergon »

arkadaşlar elimde şimdilik 10 tane dblookup combobox var bunların içerikleri aynı olduğunda hata mesajı verdirmem gerekiyor bunu nasıl yapabilirim. aynı derken herhangi ikisinin değeri aynı ise de hata vermesi gerekiyor. şimdiden teşekkürler.
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

comboların tag numaralarını 1 'den 10'a kadar numaralandır.daha sonra bir döngü içerisinde kontrol edebilirsin.

Kod: Tümünü seç

for i:=1 to 9 do
  for j := i+1 to 10 do
  if Nesne(i)=Nesne(j) then
  begin
    //hata mesajı
  end;  
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

:) Yukarıdaki mantığa göre Nesne fonksiyonunu yazarsak; :)

Kod: Tümünü seç

function TForm1.Nesne(const index:Integer):String;
var i:Integer; cmp:TDBLookupComboBox;
begin
  cmp:=nil; Result:='';
  for i:=0 to ComponentCount-1 do
  if (Components[i].Tag=Index) and (Components[i] is TDBLookupComboBox) then begin
    cmp:=TDBLookupComboBox(Components[i]);
    Break;
  end;
  if Assigned(cmp) then Result:=cmp.Text;//<-içerik değeri
end;
şeklinde bir fonksiyon iş görebilir. Deneme yapmadım düzeltme gerekebilir. Kolay gele.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
estergon
Üye
Mesajlar: 5
Kayıt: 16 Eki 2006 05:56

Mesaj gönderen estergon »

cevap yazdığınız için sağolun fikir olarak da az çok bi şeyler edindim ama hala çalıştıramadım nedense bu olayı butonun onclick olayına yazıyorum onun bi sakıncası olurmu çünkü function da hata veriyor.
yine de sağolun.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam...

- Benzer ama farklı bir bakış açısı ile bir fonksiyon da ben vereyim...

- Sistem varsayılan olarak sonucun TRUE olduğunu kabul eder. Bunu false yapmak için gerekli araştırma yapılır.

- Bu araştırma: oluşturulmuş bir liste (TStringList) içerisine TAG değeri 1 ile 10 arasında olan TDBLookupComboBox değerlerini eklemek, ama eklerken de daha önce bu değerlerden birisi eklenip eklenmediğini sorgulamak şeklinde.

- Araştırma konusu önemli değil ama tuzak işlem daha önce eklenmiş bir değer varsa mükerrer seçim yapıldığının kanıtlandığının işaretidir ve RESULT değeri false olur. :idea:

Kod: Tümünü seç

Function DogruSecimler( Form : TForm) : Boolean;
Var
  Sayac : Integer;
  Liste : TStringList;
begin
  Liste  := TStringList.Create;
  Result := True;
  With Form do
  For Sayac := 0 to ComponentCount-1 do
    If (Components[Sayac] is TDBLookupComboBox) AND ( (Components[Sayac].Tag > 0 ) AND (Components[Sayac].Tag <= 10 )) then
    begin
      If Liste.IndexOf( TDBLookupComboBox(Components[Sayac]).Text ) < 0 then Liste.Add( TDBLookupComboBox(Components[Sayac]).Text ) else begin
        Result := False;
        Break;
      end;
    end;
  Liste.Free;
end;
Aşağıda bu fonksiyonun kullanımı...
- Formunun adını direkt verebilirsiniz veya SELF deyip mevcut form hangisi ise ona yönlendirebilirsiniz.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
   If DogruSecimler( Form1 )  // veya // If DogruSecimler( self )
     then ShowMessage('Seçimler Doğru')
     else ShowMessage('YanlisSecim');
end;
- Dilerseniz aynı olanları kukla listeye eklemeyerek, kaç tane TDBLookupComboBox varsa bundan liste elemanlarının sayısını çıkartırsanız, mükerer giriş sayısını tespit edebilirsiniz.

- Aynı şekilde UNIQUE (tekil) veri oluşan bu listeyle tekrar bir döngü kurup karşılaştırma yaptığınızda hangi TDBLookupComboBox değerinin mükerrer girildiğini tespit edebilirsiniz vs. vs. vs.

Başarılar...
Resim
Resim ....Resim
estergon
Üye
Mesajlar: 5
Kayıt: 16 Eki 2006 05:56

Mesaj gönderen estergon »

eline sağlık mrmarman kodlar işe yarıyor . bir çok şeyi düşünmüşsün ,
tekrar teşekkürler.
estergon
Üye
Mesajlar: 5
Kayıt: 16 Eki 2006 05:56

Mesaj gönderen estergon »

mrmarman verdiğin kodları çalışıyor ama bir iki düzenleme yapmak istediğimde hata mesajı alıyorum. çok fazla programlamadan ve delphiden anlamıyorum. aynı olan değerlerin fontunu kırmızı yaptım fakat düzenleme yapıldıktan sonra tekrar "sına" dediğimde doğru olanların renginin eski rengini almasını istiyorum bunu nasıl yapabilirim aşağıda then den sonra bi satır koydum ama else de sorun yaşıyorum son olarak da bu combobox ların ilk satırının boş olmamasını bunu yerine ilk değerin görünmesini sağlayabilirmiyim yardım edebileceklere şimdiden teşekkürler.


Function DogruSecimler( Form : TForm) : Boolean;
Var
Sayac : Integer;
Liste : TStringList;
begin
Liste := TStringList.Create;
Result := True;
With Form do
For Sayac := 0 to ComponentCount-1 do
If (Components[Sayac] is TDBLookupComboBox) AND ( (Components[Sayac].Tag > 0 ) AND (Components[Sayac].Tag <= 32 )) then
begin
If Liste.IndexOf( TDBLookupComboBox(Components[Sayac]).Text ) < 0 then
begin
Liste.Add( TDBLookupComboBox(Components[Sayac]).Text );
TDBLookupComboBox(Components[Sayac]).font.color:= clwindow;---->eklemek istediğim satır
end;
else ----->hata
begin
TDBLookupComboBox(Components[Sayac]).font.color:= clred ;
Result := False;
//Break;

end;
end;
Liste.Free;
end;

procedure TForm5.Button2Click(Sender: TObject);
begin

If DogruSecimler( Form5 ) // veya // If DogruSecimler( self )
then ShowMessage('düzenlemeler Doğru')
else ShowMessage('YanlisSecim');
end;

end.
Cevapla