PDA

View Full Version : مشکل در ایجاد Button در داخل ریدف های یک Dbgrid



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;

سعید صابری
چهارشنبه 01 شهریور 1391, 14:57 عصر
از dbgrideh شرکت Ehlib استفاده کنید که چنین قابلیتی در خودش داره

gholami146
پنج شنبه 02 شهریور 1391, 00:24 صبح
اقای صابری عزیز سلام
من کامپوننت رو گیر اوردم و نصبش کردم
اما متوجه نمیشم که به چه طریقی من میتونم در داخل یک سطون باتون رو قرار بدم
البته باید به عرض برسونم تونستم داخل ستون اون رو ظاهر کنم اما بصورت غیر فعال و زمانی که روی اون کلیک میکنم هیچ کاری رو انجام نمیده چون غیر فعال هست
لطفا راهنمایی کنید چطوری باید اون رو فعال کنم
من باتون رو به روش زیر اضافه کردم
ابتدا بر روی جدول دابل کلیک کردم و تمامی فیلد ها رو اد کردم سپس بر روی فیلد مورد نظر کلیک و از داخل خواص اون گزینه Editbuttons رو انتخاب کردم و سپس از کادر ظاهر شده گزینه New ولی باتون من نمایش داده میشه اما بصورت غیر فعال و یک مورد دیگه من ایا میتونم یک باتون دلخواه رو به اون انتصاب کنم یا نه ؟

سعید صابری
پنج شنبه 02 شهریور 1391, 13:43 عصر
شما باید از قسمت Properties گزینه styleرا تنظیم کنید برای مثال ebsUpDownEh که همون spinedit دلفی هست برای فیلدهای عددی.
Button ها دو تا رویداد برای کدنویسی دارد ONclick و Ondown میتونید کد موردنظرتون بنویسید به جز چند تایی که مخصوص فیلدهای عددی هستند بقیه تا کدی در این رویداد ننویسید قائدتا نباید کاری انجام بدهند
در ضمن عکس هم که میتونید بهش اختصاص بدید.