cxgrid satırları sırayla tek tek seçmek

C, C++ ve C++ Builder ile ilgili konuları buraya yazabilirsiniz.
Cevapla
theSinan02
Üye
Mesajlar: 28
Kayıt: 15 Eyl 2014 11:33

cxgrid satırları sırayla tek tek seçmek

Mesaj gönderen theSinan02 » 15 Eyl 2014 12:15

s.a
cxGrid1DBTableView1 tablomdaki verileri listeliyorum
istediğim sırasıyla satırlari tek tek seçip önceki satırın seçimini kaldırmak

Kod: Tümünü seç

  
int i=5;
cxGrid1DBTableView1->ViewData->Rows[i-1]->Selected=false;
 cxGrid1DBTableView1->ViewData->Rows [i]->Selected = true;
tek tek kod ile seçebiliyorum

ancak döngüye alıp sırayla tek tek seçmeye çalışında işler seçim yapmak istediğim döngüde hangi satır seçilmişse göreyim ancak döngü bitmeden işaretlemiyor

Kod: Tümünü seç

int i=5;

for(int i=5;i < i+10;i++)
	{
 cxGrid1DBTableView1->ViewData->Rows[i-1]->Selected=false;
 cxGrid1DBTableView1->ViewData->Rows [i]->Selected = true;
Sleep(500);//biraz bekletiyorum 
	 }
Sleep ten önce ne yazmam gerekiyor ki döndü bitmeden seçtiğim satırı göreyim
Sleep ten Önce

Kod: Tümünü seç

cxGrid1DBTableView1->LayoutChanged();
 cxGrid1DBTableView1->ViewChanged();
denedim seçemedim

theSinan02
Üye
Mesajlar: 28
Kayıt: 15 Eyl 2014 11:33

Re: cxgrid satırları sırayla tek tek seçmek

Mesaj gönderen theSinan02 » 24 Eyl 2014 09:14

Sorunu Çözdüm
Kendi Soruma Kendim Cevap Vereyim :)
Biraz Uzun Cevap Olacak Ama Takılan Arkadaşlarının Sorununu Çözecektir
Çözüm için işe yarayacak Fonksiyonumuz CreateThread



önce Bir bool türünde SatirSecimi adında degeri true
ve int tipinde ilkSatirNo , sonSatirNo değişkenler tanımlıyoruz
yani

Kod: Tümünü seç

bool SatirSecimi=true;
int ilkSatirNo , sonSatirNo;


formun onshow una

Kod: Tümünü seç

 
if(SatirSecimi)
	{
    SatirSecimi =false;
	OtoFonksiyonCalistirma(SatirSecimKontrol);
   }


yani SatirSecimi true olduğundan if içini çalıştıracaktır
SatirSecimi neden hemen false ettiğimi ilerde daha kolay anlaşılacaktır
önemli olan Formun(Programın) Çalışma Süresi içinde OtoFonksiyonCalistirma(SatirSecimKontrol); bir defaya mahsus çalıştırmamız
onu işe burda formun onshow yazdımız if sayesinde hallediyoruz

şimdi geldik CXGrid sattırlarını Sırasıyla seçmek için yazdığımız Koda

Kod: Tümünü seç


void SatirSec(int i)
	{
	if (i > 0)
		Form9->cxGrid1DBTableView1->ViewData->Rows[i-1]->Selected=false;
		Form9->cxGrid1DBTableView1->ViewData->Rows [i]->Selected = true;
		Form9->cxGrid1DBTableView1->ViewData->Rows [i]->Focused=true;

	}


 void SatirSecimKontrol()
	{
	 while(1)
	   {
		if( SatirSecimi  )
			{

				  try
				  {
				   SatirSec(ilkSatirNo) ;

				  } catch(...)
				  {
				  ShowMessage("Hata");
				  }
                      ilkSatirNo++;
		      if(ilkSatirNo >= sonSatirNo)
				  SatirSecimi =false;

			}

		Sleep(500);

	}

  }



 void OtoFonksiyonCalistirma(void *fonksiyon)
	{
	CreateThread(0,0,(LPTHREAD_START_ROUTINE)fonksiyon,0,0,0);

	}
biraz uzun oldu
açıklamaya alt fonksiyondan üst fonksiyona doğru anlatmaya başlasak daha doğru olacak
OtoFonksiyonCalistirma ile Çalıştırmak istediğimiz fonksiyon için bir kanal oluşturuyoruz dikkat etmemiz gerek her fonksiyon için bir defaya mahsus kanal oluşturmak yoksa
SatirSecimi her true ettiğimizde Her kanal kendi başına seçmeye başlıyacaktır

ikinci fonksiyonumuz SatirSecimKontrol()
burda while sonsuz döngüye alıyoruz
yani devamlı çalışacak ancak while içerinsindeki
if( SatirSecimi ) yani seçmeyi durdurmak için

Kod: Tümünü seç

SatirSecimi=false;
ettiğimizde satır seçimi duracaktır

Kod: Tümünü seç

 try
				  {
				   SatirSec(ilkSatirNo) ;

				  } 
ile de seçmek istediğimiz satırının nosu üçüncü Fonksiyona gönderiyoruz

üçüncü fonsiyonumuz gayet açık
sadece if var oda eger gönderdiğimiz satır 0 (sıfır) nolu satır ise bir seçimde çıkarılacak -1 satır nosu olmadığından seçim yapma diyoruz
En son theSinan02 tarafından 30 Eyl 2014 03:18 tarihinde düzenlendi, toplamda 1 kere düzenlendi.

thelvaci
Kıdemli Üye
Mesajlar: 768
Kayıt: 11 Tem 2010 06:17
Konum: Istanbul
İletişim:

Re: cxgrid satırları sırayla tek tek seçmek

Mesaj gönderen thelvaci » 25 Eyl 2014 10:06

Delphi'ce Application.ProcessMessages 'ın C++'ca karşılığı vardır sanırım, Application->ProcessMessages; olarak. Bunu denemeliydiniz, oluşturduğunuz thread altında kullandığınız kodlar çok tehlikeli, er yada geç patlayacaktır.

theSinan02
Üye
Mesajlar: 28
Kayıt: 15 Eyl 2014 11:33

Re: cxgrid satırları sırayla tek tek seçmek

Mesaj gönderen theSinan02 » 30 Eyl 2014 03:15

s.a hocam cevabın için teşekkürler
işin içinden çıkamadım forma yazdım
günlerce cevap yazan olmadığından
thread ile yazmaya karar verdim
ne gibi sıkıntı yaşarım
desktop programlamada tecrübem sıfırdır
yardımcı olabilirmisin

Cevapla