Konuyu Oyla:
  • Derecelendirme: 5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Küçük Hızlandırma İşlemleri
#11
(12-12-2018, Saat: 20:57)narkotik Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Konuya karşılaştığım bir sorun ile ilgili küçük bir eklemede bulunacağım;

Panelimin üzerinde dinamik create olan panel neslerim var. OnClick olayında kodlarım çalışıyor. Nedendir ki bir yavaşlık var. Birkaç saat optimizasyonla uğraşıyorum ve çok ilginçtirki bir durum görüyorum. Buna belki sizde şaşıracaksınız. Panelin Click olayı bir buton gibi çalışmıyor. Yani yavaş çalışıyor. Aşağıda bunun için size bir örnek yaptım inceleminizi isterim.

Form üzerinde 3 nesnem var 3ünde'de aynı kod çalışıyor. 1 buton 2 panel. 1 buton ve 1 panelin click olaylarında seri şekilde bastığımızda panelin çok ağır çalıştığını görüyoruz.

Aşağıda bir panelimiz daha var. Bu panelimizde aynı kod panelin OnDown eventinde yazılı. Aradaki hız farkını göreceksiniz. Down'a alarak olayı çözdüm fakat aklımada takıldı. Bu konuda bizi teknik olarak aydınlatabilecek arkadaş varsa minnettar olurum Smile

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

QLAp1V.png

Merhaba,

Bu yavaşlık DoubleClick özelliğinden dolayı oluyor. Formun OnCreate eventine aşağıdaki kodu yazacak olursanız yavaşlık ortadan kalkar.

PnlSayac.ControlStyle := PnlSayac.ControlStyle - [csDoubleClicks];

İyi çalışmalar
Cevapla
#12
(13-12-2018, Saat: 07:47)Bahadir.Alkac Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(12-12-2018, Saat: 20:57)narkotik Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Konuya karşılaştığım bir sorun ile ilgili küçük bir eklemede bulunacağım;

Panelimin üzerinde dinamik create olan panel neslerim var. OnClick olayında kodlarım çalışıyor. Nedendir ki bir yavaşlık var. Birkaç saat optimizasyonla uğraşıyorum ve çok ilginçtirki bir durum görüyorum. Buna belki sizde şaşıracaksınız. Panelin Click olayı bir buton gibi çalışmıyor. Yani yavaş çalışıyor. Aşağıda bunun için size bir örnek yaptım inceleminizi isterim.

Form üzerinde 3 nesnem var 3ünde'de aynı kod çalışıyor. 1 buton 2 panel. 1 buton ve 1 panelin click olaylarında seri şekilde bastığımızda panelin çok ağır çalıştığını görüyoruz.

Aşağıda bir panelimiz daha var. Bu panelimizde aynı kod panelin OnDown eventinde yazılı. Aradaki hız farkını göreceksiniz. Down'a alarak olayı çözdüm fakat aklımada takıldı. Bu konuda bizi teknik olarak aydınlatabilecek arkadaş varsa minnettar olurum Smile

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

QLAp1V.png

Merhaba,

Bu yavaşlık DoubleClick özelliğinden dolayı oluyor. Formun OnCreate eventine aşağıdaki kodu yazacak olursanız yavaşlık ortadan kalkar.

PnlSayac.ControlStyle := PnlSayac.ControlStyle - [csDoubleClicks];

İyi çalışmalar
Tamam diyelim ki düzeliyor down'a aldığımdada düzeliyor mevzu düzeltmek değil mantığı nedir yani butonunda DoubleClick eventi var neden panelde bu işler yavaş yürüyor
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla
#13
(13-12-2018, Saat: 09:06)narkotik Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(13-12-2018, Saat: 07:47)Bahadir.Alkac Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Merhaba,

Bu yavaşlık DoubleClick özelliğinden dolayı oluyor. Formun OnCreate eventine aşağıdaki kodu yazacak olursanız yavaşlık ortadan kalkar.

PnlSayac.ControlStyle := PnlSayac.ControlStyle - [csDoubleClicks];

İyi çalışmalar
Tamam diyelim ki düzeliyor down'a aldığımdada düzeliyor mevzu düzeltmek değil mantığı nedir yani butonunda DoubleClick eventi var neden panelde bu işler yavaş yürüyor

1. OnMouseDown ile OnClick aynı tür event değiller. OnClick event'i 2 aşamadan oluşuyor. MouseDown ve MouseUp. Bunlardan birisini iptal edecek olursanız Click işlemi olmuyor. Bu işletim sisteminin bize söylediği bir şey. MouseDown ile sorunu çözmüş olabilirsiniz, ama teorik olarak işletim sisteminin istemediği bir çözüm bu, çünkü onun koyduğu kurallara uygun değil. 

2. Button'un double click event'i yok. Olması da mantıksız. Bu mesajı yazmadan önce hem TButton, hem TBitBtn, hem de TcxButton bileşenlerini özellikle kontrol ettim, üçünde de double click için bir event yok. TSpeedButton'da var, ama o da aslında gerçek bir button değil (hala işletim sistemi perpektifinden bakıyoruz). 

Peki neden yavaş işliyor? Çok basit, Windows işletim sistemi, Single Click ile Double Click arasındaki farkı anlamak için aslında iki click arası geçen süreyi ölçüyor. Bunun süresini bize veren bir fonksiyonu bile var (Detaylar bu Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.). Eğer işlerim sistemine, "bu pencere (Windows'da her şey pencere ya, o yüzden pencere dedim, siz isterseniz bileşen diye okuyun) double click destekliyor" derseniz, hızlı click'lerde "acaba bu double click mi" diye bakıyor ve ona göre işlem yapıyor. Aşağıdaki metni MSDN'den kopyaladım:

Alıntı:Only windows that have the CS_DBLCLKS style can receive WM_LBUTTONDBLCLK messages, which the system generates whenever the user presses, releases, and again presses the left mouse button within the system's double-click time limit. Double-clicking the left mouse button actually generates a sequence of four messages: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK, and WM_LBUTTONUP.

Google Translate kullanılarak yapılmış çevirisi aşağıda (çeviri hiç de fena değil Big Grin )
Alıntı:Sadece CS_DBLCLKS stiline sahip pencereler, kullanıcının sisteme çift tıklama zaman sınırı içinde sol fare düğmesine bastığında, bastığında ve tekrar basması durumunda sistem tarafından üretilen WM_LBUTTONDBLCLK mesajlarını alabilir. Sol fare düğmesini çift tıklatmak aslında dört iletinin bir dizisini oluşturur: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK ve WM_LBUTTONUP.

Bu metinlerden de anlaşılacağı üzere, double click süresi içinde yaptığınız tıklamaların ilki OnClick eventine geliyor, ikinci click ise Double Click olarak algılandığı için bileşende OnDblClick event'ine gidiyor. Yani her iki tıklamadan, kabaca bir tanesini kaçırmış oluyorsunuz. Bu da sizin bahsettiğiniz yavaşlığa sebep oluyor.

Sonuç olarak sizin çözümünüz işinizi görebilir, ama bunun doğrusu ve işletim sisteminin istediği (tavsiye ettiği), işletim sistemine "bu pencerede double click kullanılmayacak" demek.

İyi çalışmalar
Cevapla
#14
(13-12-2018, Saat: 09:50)Bahadir.Alkac Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(13-12-2018, Saat: 09:06)narkotik Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Tamam diyelim ki düzeliyor down'a aldığımdada düzeliyor mevzu düzeltmek değil mantığı nedir yani butonunda DoubleClick eventi var neden panelde bu işler yavaş yürüyor

1. OnMouseDown ile OnClick aynı tür event değiller. OnClick event'i 2 aşamadan oluşuyor. MouseDown ve MouseUp. Bunlardan birisini iptal edecek olursanız Click işlemi olmuyor. Bu işletim sisteminin bize söylediği bir şey. MouseDown ile sorunu çözmüş olabilirsiniz, ama teorik olarak işletim sisteminin istemediği bir çözüm bu, çünkü onun koyduğu kurallara uygun değil. 

2. Button'un double click event'i yok. Olması da mantıksız. Bu mesajı yazmadan önce hem TButton, hem TBitBtn, hem de TcxButton bileşenlerini özellikle kontrol ettim, üçünde de double click için bir event yok. TSpeedButton'da var, ama o da aslında gerçek bir button değil (hala işletim sistemi perpektifinden bakıyoruz). 

Peki neden yavaş işliyor? Çok basit, Windows işletim sistemi, Single Click ile Double Click arasındaki farkı anlamak için aslında iki click arası geçen süreyi ölçüyor. Bunun süresini bize veren bir fonksiyonu bile var (Detaylar bu Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.). Eğer işlerim sistemine, "bu pencere (Windows'da her şey pencere ya, o yüzden pencere dedim, siz isterseniz bileşen diye okuyun) double click destekliyor" derseniz, hızlı click'lerde "acaba bu double click mi" diye bakıyor ve ona göre işlem yapıyor. Aşağıdaki metni MSDN'den kopyaladım:

Alıntı:Only windows that have the CS_DBLCLKS style can receive WM_LBUTTONDBLCLK messages, which the system generates whenever the user presses, releases, and again presses the left mouse button within the system's double-click time limit. Double-clicking the left mouse button actually generates a sequence of four messages: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK, and WM_LBUTTONUP.

Google Translate kullanılarak yapılmış çevirisi aşağıda (çeviri hiç de fena değil Big Grin )
Alıntı:Sadece CS_DBLCLKS stiline sahip pencereler, kullanıcının sisteme çift tıklama zaman sınırı içinde sol fare düğmesine bastığında, bastığında ve tekrar basması durumunda sistem tarafından üretilen WM_LBUTTONDBLCLK mesajlarını alabilir. Sol fare düğmesini çift tıklatmak aslında dört iletinin bir dizisini oluşturur: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK ve WM_LBUTTONUP.

Bu metinlerden de anlaşılacağı üzere, double click süresi içinde yaptığınız tıklamaların ilki OnClick eventine geliyor, ikinci click ise Double Click olarak algılandığı için bileşende OnDblClick event'ine gidiyor. Yani her iki tıklamadan, kabaca bir tanesini kaçırmış oluyorsunuz. Bu da sizin bahsettiğiniz yavaşlığa sebep oluyor.

Sonuç olarak sizin çözümünüz işinizi görebilir, ama bunun doğrusu ve işletim sisteminin istediği (tavsiye ettiği), işletim sistemine "bu pencerede double click kullanılmayacak" demek.

İyi çalışmalar

Elinize saglik .
Cevapla
#15
(13-12-2018, Saat: 09:50)Bahadir.Alkac Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(13-12-2018, Saat: 09:06)narkotik Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Tamam diyelim ki düzeliyor down'a aldığımdada düzeliyor mevzu düzeltmek değil mantığı nedir yani butonunda DoubleClick eventi var neden panelde bu işler yavaş yürüyor

1. OnMouseDown ile OnClick aynı tür event değiller. OnClick event'i 2 aşamadan oluşuyor. MouseDown ve MouseUp. Bunlardan birisini iptal edecek olursanız Click işlemi olmuyor. Bu işletim sisteminin bize söylediği bir şey. MouseDown ile sorunu çözmüş olabilirsiniz, ama teorik olarak işletim sisteminin istemediği bir çözüm bu, çünkü onun koyduğu kurallara uygun değil. 

2. Button'un double click event'i yok. Olması da mantıksız. Bu mesajı yazmadan önce hem TButton, hem TBitBtn, hem de TcxButton bileşenlerini özellikle kontrol ettim, üçünde de double click için bir event yok. TSpeedButton'da var, ama o da aslında gerçek bir button değil (hala işletim sistemi perpektifinden bakıyoruz). 

Peki neden yavaş işliyor? Çok basit, Windows işletim sistemi, Single Click ile Double Click arasındaki farkı anlamak için aslında iki click arası geçen süreyi ölçüyor. Bunun süresini bize veren bir fonksiyonu bile var (Detaylar bu Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.). Eğer işlerim sistemine, "bu pencere (Windows'da her şey pencere ya, o yüzden pencere dedim, siz isterseniz bileşen diye okuyun) double click destekliyor" derseniz, hızlı click'lerde "acaba bu double click mi" diye bakıyor ve ona göre işlem yapıyor. Aşağıdaki metni MSDN'den kopyaladım:

Alıntı:Only windows that have the CS_DBLCLKS style can receive WM_LBUTTONDBLCLK messages, which the system generates whenever the user presses, releases, and again presses the left mouse button within the system's double-click time limit. Double-clicking the left mouse button actually generates a sequence of four messages: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK, and WM_LBUTTONUP.

Google Translate kullanılarak yapılmış çevirisi aşağıda (çeviri hiç de fena değil Big Grin )
Alıntı:Sadece CS_DBLCLKS stiline sahip pencereler, kullanıcının sisteme çift tıklama zaman sınırı içinde sol fare düğmesine bastığında, bastığında ve tekrar basması durumunda sistem tarafından üretilen WM_LBUTTONDBLCLK mesajlarını alabilir. Sol fare düğmesini çift tıklatmak aslında dört iletinin bir dizisini oluşturur: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK ve WM_LBUTTONUP.

Bu metinlerden de anlaşılacağı üzere, double click süresi içinde yaptığınız tıklamaların ilki OnClick eventine geliyor, ikinci click ise Double Click olarak algılandığı için bileşende OnDblClick event'ine gidiyor. Yani her iki tıklamadan, kabaca bir tanesini kaçırmış oluyorsunuz. Bu da sizin bahsettiğiniz yavaşlığa sebep oluyor.

Sonuç olarak sizin çözümünüz işinizi görebilir, ama bunun doğrusu ve işletim sisteminin istediği (tavsiye ettiği), işletim sistemine "bu pencerede double click kullanılmayacak" demek.

İyi çalışmalar
Elinize sağlık hocam çok guzel açıklamışsınız. Aklıma takılan bir cok ince detayı giderdinizSmile Anahtar kelimeleri de almış olduk. Ben derinlemesine, örneklerle inceliycem tekrardan tesekkürler
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Object Model İle SQL İşlemleri Yaptırma witalihakko 5 1.729 02-03-2019, Saat: 12:39
Son Yorum: cexx
  FireMonkey Resimlerde Pan ve Zoom İşlemleri Fesih ARSLAN 11 2.763 16-04-2018, Saat: 12:04
Son Yorum: pro_imaj
  SGK Evrak Doküman İşlemleri, Belge Gönderme csunguray 3 1.086 21-02-2018, Saat: 14:06
Son Yorum: csunguray



Konuyu Okuyanlar: 1 Ziyaretçi