rxdbgrid: hücrede görünen resim çift tıklanınca kayboluyor

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

rxdbgrid: hücrede görünen resim çift tıklanınca kayboluyor

Mesaj gönderen nitro »

merhabalar,
veritabaında 0-1 diye değer alan bi fieldi rxdbgridde image ile gösteriyorum. rxdbgrid'in çift tıklama eventine şu kodu yazdım.

Kod: Tümünü seç

if rxdbgrid1.SelectedIndex=7 then
  begin
  if data.islerdetay_datasetONAYIDARE.Value=0 then
      begin
      data.islerdetay_dataset.Edit;
      data.islerdetay_datasetONAYIDARE.Value:=1;
      data.islerdetay_dataset.Post;
      end
      else begin
      data.islerdetay_dataset.Edit;
      data.islerdetay_datasetONAYIDARE.Value:=0;
      data.islerdetay_dataset.Post;
      end;
  end;
gayet iyi çalışıyor. ama bazen image kayboluyor ve 0-1 gibi değer gözüküyor. olayın daha iyi anlaşılması için video çektim.
60 kblik minik bir video.
fikir yürütmek isteyen aşağıdaki linkten videoyu indirip olay gözlemleyebilir.
http://www.konat.net/scr.rar
şimdiden teşekkürler.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Edit işlemini kullanıcıya göstermesen daha iyi olur.
Tıklama işleminde durumu kontrol edip her seferinde tersine döndürsen
problem olmaz diye düşünüyorum.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

zaten kolnun readonly değeri true. zaten benim amacım da edit olayını kullanıcının görmemesi. bu olayı nasıl gizleyebilirim?
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

image görüntüleme de bir problem olabilir
image nesnesini tetikleyen nedir? bir de ona bakın
bence
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

image görüntüleme konusunda bir sıkıntı yok, burda sorun çift tıklama sonucunda dbgridin çift tıklama olayına yazılan kodu gerçekleştirdikten sonra edit moduna geçmesi.
doubleclick olayına

Kod: Tümünü seç

action:=canone 
gibi bişey yazsam işe yarar belki.
çünkü mesela bir programı kapatırken "program kapatılsın mı gibi bir soruya" onclose olayınca action:=canone; yazdığımız zaman işlenmesini istediğimiz kodlardan sonra close olayı kesiliyor. yani iptal oluyor.
bence burada da benzer bir şey lazım. yani bir dbgridi çift tıkladığınız zaman otomotikmen edit moduna geçer.
dblclick olayına bi kod yazdığınız zaman önce o kodlar çalışır sonra dbgridin kendi doğasında olan edit moduna geçme olayı gerçekleşir.
burada öyle bişey yapmak lazım ki istediğim işlemi kod ile yaptırayım, sonrasında çift tıklama olayı iptal olsun ve dbgrid edit moduna geçmesin.
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

dblclick olayını nasıl iptal edeceğimi bulamadım.
bulsam belki oradan bi iş çıkartabilirim :(
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Hocam QuantumGrid kullanmadığımdan cevabım havada kalabilir.

- Normal TDBGrid kullandığımızda Column için değil de TDBGrid'in geneline etki eden Options diye bir property vardır. İncelersen görebilirsin.

- İçeriğinde dgRowSelect, dgIndicator vb. gibi bir çok seçenek bulunur.

- Bunlardan birisi dgEditing yazar. Varsayılanı TRUE'dur. Sen bunu FALSE yaparsan EDIT moda geçemez. Bu senin grid bileşeninde de varsa çözmün budur.
Resim
Resim ....Resim
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

hocam öncelikle grid'in dgediting olayını false yapıp denedim.
tam istediğim gibi oldu, hücrede ne kadar tıklanırsa tıklansın edit moduna geçmiyordu. Ama diğer hücrelerde işlem yapılması gerekiyordu. ben de gridin onclick, ondblclick, oncolenter, oncolexit olaylarında aktif hücreyi kontrol ettirdim. Eğer aktif hücre benim image koyduğum hücre ise grid'in dgediting olayı false, başka hücre ise true yaptım.
olay arka planda biraz karışık oldu ama nihayetinde işlem ve başarı tam.
sonuçta bizler programcılar olarak işlevsellik, tasarım, kullanım kolaylığı arkasındaki karmaşayız :)

bu da arka planda işi yapan kodcuk:

Kod: Tümünü seç

procedure Tisgiris.RxDBGrid1ColEnter(Sender: TObject);
begin
if rxdbgrid1.SelectedIndex=7 then
rxdbgrid1.Options:=[dgTitles,dgIndicator,dgColLines,dgRowLines,dgTabs,dgAlwaysShowSelection,dgConfirmDelete,dgCancelOnExit];
end;

procedure Tisgiris.RxDBGrid1ColExit(Sender: TObject);
begin
if rxdbgrid1.SelectedIndex=7 then
rxdbgrid1.Options:=[dgEditing,dgTitles,dgIndicator,dgColLines,dgRowLines,dgTabs,dgAlwaysShowSelection,dgConfirmDelete,dgCancelOnExit];
end;
teşekkürler...
Cevapla