gholami146
چهارشنبه 01 شهریور 1391, 14:10 عصر
با سلام
من یک سری کد پیدا کردم و تغییراتی در داخلش دادم تا بتونم یک باتون رو در داخل ردیف های جدولم داشته باشم
ولی به یک سری مشکل برخوردم
اولین و مهم ترین مشکلم اینکه تازمانی که تعداد سطر های جدول بیشتر از یک صفحه نشده برنامه درست کار میکنه ولی به محض اینکه به دی برسه که اسکرول نمایش داده بشه محلی رو که قرار باتون روی اون جا یعنی بر روی ردیف مخصوص و داخل سلول دیتا گرید نمایش داده بشه دچار خطا میشه و عملیات بدرستی انجام نمیشه مثلا اگر قرار بر روی رکورد 12 نمایش داده بشه میره باتون رو میزاره روی رکورد 11 و ...
واسه همین از شما دوستان میخوام که زحمت بکشید و کمک کنید تا کد رو اصلاح کنم
کد به شرح زیر: البه نویسنده کدها آقای کشاورز هستند ولی مثل اینکه وقت جواب دادن به ما رو ندارند :ناراحت:
const
ActionColIndex = 3;
type
THackedDBGrid = class(TDBGrid);
procedure TForm1.FormCreate(Sender: TObject);
begin
Button := TButton.Create(Self);
with Button do
begin
Parent := self;
Visible := False;
Caption := 'Do Action';
TabStop := True;
OnClick := GridActionBtnClick;
end;
end;
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
GridCurrentRow,
DbCurrentRow : integer;
begin
GridCurrentRow := THackedDBGrid(Sender).Row;
DbCurrentRow := AdoTable1.RecNo;
if DataCol = ActionColIndex then
if GridCurrentRow = DbCurrentRow then
begin
with Button do
begin
Left := Rect.Left + DBGrid1.Left + 2;
Top := Rect.Top + DBGrid1.top + 2;
Height := Rect.Bottom - Rect.Top;
Width := Rect.Right - Rect.Left;
Visible := True;
end;
end;
end;
procedure TForm1.GridActionBtnClick(Sender: TObject);
begin
ShowMessage('Button is clicked');
end;
من یک سری کد پیدا کردم و تغییراتی در داخلش دادم تا بتونم یک باتون رو در داخل ردیف های جدولم داشته باشم
ولی به یک سری مشکل برخوردم
اولین و مهم ترین مشکلم اینکه تازمانی که تعداد سطر های جدول بیشتر از یک صفحه نشده برنامه درست کار میکنه ولی به محض اینکه به دی برسه که اسکرول نمایش داده بشه محلی رو که قرار باتون روی اون جا یعنی بر روی ردیف مخصوص و داخل سلول دیتا گرید نمایش داده بشه دچار خطا میشه و عملیات بدرستی انجام نمیشه مثلا اگر قرار بر روی رکورد 12 نمایش داده بشه میره باتون رو میزاره روی رکورد 11 و ...
واسه همین از شما دوستان میخوام که زحمت بکشید و کمک کنید تا کد رو اصلاح کنم
کد به شرح زیر: البه نویسنده کدها آقای کشاورز هستند ولی مثل اینکه وقت جواب دادن به ما رو ندارند :ناراحت:
const
ActionColIndex = 3;
type
THackedDBGrid = class(TDBGrid);
procedure TForm1.FormCreate(Sender: TObject);
begin
Button := TButton.Create(Self);
with Button do
begin
Parent := self;
Visible := False;
Caption := 'Do Action';
TabStop := True;
OnClick := GridActionBtnClick;
end;
end;
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
GridCurrentRow,
DbCurrentRow : integer;
begin
GridCurrentRow := THackedDBGrid(Sender).Row;
DbCurrentRow := AdoTable1.RecNo;
if DataCol = ActionColIndex then
if GridCurrentRow = DbCurrentRow then
begin
with Button do
begin
Left := Rect.Left + DBGrid1.Left + 2;
Top := Rect.Top + DBGrid1.top + 2;
Height := Rect.Bottom - Rect.Top;
Width := Rect.Right - Rect.Left;
Visible := True;
end;
end;
end;
procedure TForm1.GridActionBtnClick(Sender: TObject);
begin
ShowMessage('Button is clicked');
end;