DBLOOKUPCOMBOBOX ların içeriğini karşılaştırma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
DBLOOKUPCOMBOBOX ların içeriğini karşılaştırma
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.
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;
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)


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;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
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.
Aşağıda bu fonksiyonun kullanımı...
- Formunun adını direkt verebilirsiniz veya SELF deyip mevcut form hangisi ise ona yönlendirebilirsiniz.
- 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...
- 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.

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