Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Nesneler arasındaki ilşkiyi/bağlantıyı tespit etmek
#1
Merhaba

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.


Bu tabloya sutun ve satır kolonlarına birleşen kutuların ilk olanın dğerini diger kolonunada takip eden diğer kutuların sadece satır numarasını girmek istiyorum.Şöyleki:
1x1, 1x2, 1x3 birleşen kutular kümesi için kaydım şu şekild eolmalı db de SUTUN kolonuna 1 SATIR kolonuna 1 DIGER kolonuna 2 , 3 rakamları olamalı (toplam iki satırlık kayıt).

Birleşen 1x6, 1x7 kümesi için kayıt şu şekild olmalı:
SUTUN kolonu 1 SATIr kolonu 6 DIGER kolonu 7 (tek satılık kayıt)

1x9 butonu seçili olmasına rağmen alt yada üst kutu ile birlikte seçili olmadığından görmezlikten gelinmeli ve kayıt yapılmamalı.

DB e kayıt yapmak için iç içe iki for döngüsü ve
for i := 0 to (ComponentCount - 1) do
 begin
    if (Components[i] is TAdvSmoothExpanderButtonPanel) then
    begin
       for j := 0 to ((Components[i] as TAdvSmoothExpanderButtonPanel).Buttons.Count - 1) do
       begin
          if ((Components[i] as TAdvSmoothExpanderButtonPanel).Buttons[j].Color = clYellow) then
          begin

          end;
       end;


    end;
 end;

dizi ekledim ama algoritmayı bi türlü kuramadım. Sütun ve satır (kutular) n sayıdadır. İlgili fb tablosuna sadece birleşen kutuların kaydı yapılmaktadır. 
Değerli fikirlerinizi duymak isterim.
İyi Çalışmalar.

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Cevapla
#2
Probleminizi anlamak için bir kaç defa okudum umarım yanlış anlamamışımdır.

Anladığım peş peşe en az 2 sarı buton olmalı, 1 tane olanlar göz ardı edilmeli şeklinde ise verdiğiniz kodu şu şekilde düzenleyebilirsiniz.


var
adet: intger;
ix    : integer;
 
.......
ix := 0;
adet := 0;
 
for i := 0 to (ComponentCount - 1) do
 begin
    if (Components[i] is TAdvSmoothExpanderButtonPanel) then
    begin
       for j := 0 to ((Components[i] as TAdvSmoothExpanderButtonPanel).Buttons.Count - 1) do
       begin
          if ((Components[i] as TAdvSmoothExpanderButtonPanel).Buttons[j].Color = clYellow) then
          begin
            // sarı renkli butonsa    
             if (adet = 0) then     ix := j; // sarı renkli grubun ilk buton nosu
              
             adet := adet + 1; // grupdaki sarı butonları sayıyoruz
             
             
          end
          else
          begin
            // farklı renkli ise
             if (adet > 1) then // peş peşe en az 2 sarı olması şartı kontrol ediliyor
             begin
              // ix de sarı renkli grubun ilk buton nosu
              // adet de grupda kaçtane sarı renk olduğu bilgisi var
              // kontrol ve/veya db işlemlerinizi burada yapabilirsiniz.        
             end;
             
             adet := 0; // bir sonraki sarı grubu saymak için sayacımızı sıfırlıyoruz
             
         end;
       end;
  
  
    end;
 end;
 
 
 // ---- EKLEME ----
 // yukarıdaki kontrol mekanizması sarıdan sonra en az bir farklı renk gelme durumlarını kontrol ediyor.
 // son grup sarı ile bitiyorsa bu grup yukarıdaki else içerisinde kontrol edilmeyecektir.
 // bu  durumu  döngü sonunda adet değişkeninin değerine göre aşağıda kontrol ediyoruz.
 if (adet > 1) then
 begin
              // ix de sarı renkli grubun ilk buton nosu
              // adet de grupda kaçtane sarı renk olduğu bilgisi var
              // kontrol ve/veya db işlemlerinizi burada yapabilirsiniz.     
 end;
 

Cevapla
#3
Cevabınız için teşekkürler . Amaç ardışık iki sarı butonu db e kaydetmek.
Bende şu şekilde bi şeyler yazdım çalıştı ama çok karışık oldu.

procedure TfrmRafBirlestir.btnKaydetClick(Sender: TObject);
var
i,j,k:integer;
Dizi :array[1..100] of Integer;
ilk_kutu,son_kutu:Integer;
sSutun,sSatir,sDiger:Integer;
yer:Integer;
Secilmis:Boolean;
begin
ilk_kutu:= -1;
son_kutu:= -1;
Secilmis:=false;
try
 with DataModule1.qrSil do
 begin
   close;
   sql.Clear;
   sql.Add('DELETE FROM BIRLESMIS');
   ExecSQL;
 end;
 for i := 0 to (ComponentCount - 1) do
 begin
    if (Components[i] is TAdvSmoothExpanderButtonPanel) then
    begin
       for j := 0 to ((Components[i] as TAdvSmoothExpanderButtonPanel).Buttons.Count - 1) do
       begin
          if ((Components[i] as TAdvSmoothExpanderButtonPanel).Buttons[j].Color = clYellow) then
          begin     //son kutu değilse
            if not (j = (Components[i] as TAdvSmoothExpanderButtonPanel).Buttons.Count - 1) then
             begin //sonraki ardışık kutu sarı renkte ise  (seçilmiş)
                if ((Components[i] as TAdvSmoothExpanderButtonPanel).Buttons[j].Color = clYellow) then
                 begin  //dsha önce kutu seçilmemişse

                   if (secilmis = false) then //(ilk_kutu = -1) then
                   begin
                    ilk_kutu:= j ; //seçili kutu
                    yer:=pos('x',(Components[i] as TAdvSmoothExpanderButtonPanel).Buttons[j].Caption);
                    sSutun:=strtoint( Copy((Components[i] as TAdvSmoothExpanderButtonPanel).Buttons[j].Caption,0,yer-1));
                    sSatir:=strtoint(Copy((Components[i] as TAdvSmoothExpanderButtonPanel).Buttons[j].Caption ,yer+1,length((Components[i] as TAdvSmoothExpanderButtonPanel).Buttons[j].Caption)));
                   end;
                   Secilmis:=true;
                    //ardışık kutu da sarı renkte seçilmişse ilk kutu seçilmişse
                   if  (secilmis = true) and ((Components[i] as TAdvSmoothExpanderButtonPanel).Buttons[j+1].Color = clYellow) then //başlangıç noktası varsa sonraki butonda sarı ise
                   begin
                    son_kutu:= j + 1;
                    yer:=pos('x',(Components[i] as TAdvSmoothExpanderButtonPanel).Buttons[j+1].Caption);
                    sDiger:=strtoint(Copy((Components[i] as TAdvSmoothExpanderButtonPanel).Buttons[j+1].Caption,yer+1,length((Components[i] as TAdvSmoothExpanderButtonPanel).Buttons[j+1].Caption)));

                     with DataModule1 do
                     begin
                       tblBirlesmis.Active:=true;
                       tblBirlesmis.Insert;
                       tblBirlesmisSUTUN.Value:=sSutun;
                       tblBirlesmisSATIR.Value:=sSatir;
                       tblBirlesmisDIGER.Value:=sDiger;
                       tblBirlesmis.Post;
                     end;

                                     //seçili kutular ardışıksa grupla kaydet

                 end else begin //kutu seçili değilse
                   //burası fazladan    hatalı
                   secilmis:=false;

                 end;
                 end;

             end;

          end;
       end;


    end;
    ilk_kutu:=-1;
    son_kutu:=-1;
    Secilmis:=false;
 end;

except on E: Exception do
 ShowMessage(e.Message);
end;
end;





Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Json Free Etmek yhackup 4 481 31-07-2019, Saat: 11:17
Son Yorum: Halil Han Badem
  podesktopcenter (vs) poscreencenter Arasındaki Fark [ÇÖZÜLDÜ] SenayAkgun 6 576 30-01-2019, Saat: 00:00
Son Yorum: SenayAkgun
  İki saat arasındaki fark ssmr 7 775 12-01-2019, Saat: 22:06
Son Yorum: savasabd
  Json tarihini convert etmek ermanispir@gmail.com 2 659 25-05-2018, Saat: 17:05
Son Yorum: Kuri_YJ
  WiFi Ağlarını Tespit Etme dilo 1 625 06-04-2018, Saat: 10:17
Son Yorum: SimaWB



Konuyu Okuyanlar: 1 Ziyaretçi