Selamlar.
CustomGrid'ten türetilmiş bir gride TitleClick eventi yazılmış ancak tetiklendiği yer MouseDown yordamı.İhtiyaç oldu TitleDblClick eventi yazmak gerekti fakat MouseDown yordamı her tıklamada tetiklendiği için hem TitleClick hem de TitleDblClick tetikleniyor.MouseDown yordamındaki kodları kapatıp windows mesajlarını yakalamak suretiyle (WM_LBUTTONDOWN) kendi TitleClick eventimizi yazmamıza rağmen çift tıkladığımızda her ikisi de tetikleniyor.Gözden kaçan birşey var muhtemelen.Fikri olan?
Gridin TitleClick ve TitleDblClick eventleri organizasyonu
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Subclass yaptiginiz yerden mesajı yakalayip tekrar gonderiyorsan bu normal.
yani diyelimki;
yani diyelimki;
Kod: Tümünü seç
Unit Unit1;
Interface
Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Grids, DBGrids;
Type
TForm1 = Class(TForm)
DBGrid1: TDBGrid;
Procedure FormCreate(Sender: TObject);
Procedure DBGrid1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Private
{ Private declarations }
OldGridProc: TWndMethod;
Procedure GridWindowProc(Var Message: TMessage);
Public
{ Public declarations }
End;
Var
Form1: TForm1;
Implementation
{$R *.dfm}
Procedure TForm1.GridWindowProc(Var Message: TMessage);
Begin
If Message.Msg = WM_LBUTTONDOWN Then
Begin
// OldGridProc(Message);
ShowMessage('Sub Class Grid Mouse Down');
{==========================================================
>> WM_LBUTTONDOWN yakaladık eğer bu begin-end'de OldGridProc(Message) yaparsak
>> mesaj(WM_LBUTTONDOWN) bilesen icin yazilmis normal eventlerinede gider.
===========================================================}
End Else
OldGridProc(Message);
End;
Procedure TForm1.FormCreate(Sender: TObject);
Begin
OldGridProc := DBGrid1.WindowProc;
DBGrid1.WindowProc := GridWindowProc;
End;
Procedure TForm1.DBGrid1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Begin
ShowMessage('Grid Mouse Down');
End;
End.
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
Hocam kodlari gormeden bisey soylemek zor. Nerede exceptiona dusuyor bulabilirsen o unite yogunlasabiliriz. bunun icin ucretli ama, benim kullandigim EurekaLogaLonE CoDeR yazdı: Yöntemi bileşenin kodlarına monte ettim ancak GridWindowProc proceduresini birkaç kez işlettikten sonra sınıf yok hatası veriyor ve proje terminate oluyor.
http://www.eurekalog.com/downloads.php
eklentisi var. Bunun disinda aklima gelen, kodlarinda inherited, x...free gibi kod bloglarini kontrol etmende yarar var.
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08