PDA

View Full Version : تغییر رنگ یک سطر گرید با فشردن کلید Space



hadisalahi2
پنج شنبه 20 خرداد 1395, 10:10 صبح
سلام به دوستان

من یک EhlibGrid دارم که میخوام بافشردن کلید Space بر روی هر سطری که بود رنگ اون سطر عوض بشه و مثلا قرمز بشه
الیته کد تغییر رنگ گرید رو دارم و روی Ehlib هم کار میکنه
اما میخوام وقتی کلید Space رو فشار دادم این عمل صورت بگیره

hp1361
پنج شنبه 20 خرداد 1395, 13:35 عصر
سلام

با کد زیر فشرده شدن Space رو داریم.(رنگی کردن رو هم که گفتین دارید:


procedure TForm1.dbgrdh_1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = Char(VK_SPACE) then
ShowMessage('Space is Pressed');
end;

hadisalahi2
چهارشنبه 26 خرداد 1395, 11:27 صبح
با تشکر
اما این کد رو هم خودم دارم
ببینید این کد زیر رو



procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin

DBGrid1.Canvas.Brush.Color:=clRed;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);

end;

در کد بالا برای رنگی شدن یک خط دیگه هم داره که خود این پروسیجر رو دوباره با پارامترهای ورودی فراخوانی میکنه

اما در این کدی که شما گذاشتی چطوری باید این پروسیجر رو فراخوانی کرد؟

Mahmood_M
چهارشنبه 26 خرداد 1395, 13:27 عصر
تغییر رنگ باید توی رویداد OnDrawColumnCell اتفاق بیفته اما این رویداد در زمان Paint شدن DBGrid اجرا میشه
هر بار که شرایط تغییر کرد، می تونید DBGrid رو Repaint کنید
با هر تغییری روی ظاهر DBGrid مثلا با انتخاب یک رکورد دیگه، یا حتی حرکت موس دوباره DBGrid باید Paint بشه، پس OnDrawColumnCell هم اجرا میشه، پس باید یک شرط مناسب برای تغییر رنگ سطر مورد نظر قرار بدیم
با فشردن کلید Space شماره رکوردی که قصد دارید سطرش رنگی بشه رو جایی ذخیره کنید و شرط رویداد OnDrawColumnCell رو روی این شماره رکورد قرار بدید، مثال :


var
...
MyRecNo : Integer = 0;

implementation

...

if Key = VK_SPACE then
begin
MyRecNo := MyDBGrid.DataSource.DataSet.RecNo;
MyDBGrid.Repaint;
end;

...

if MyDBGrid.DataSource.DataSet.RecNo = MyRecNo then
begin
MyDBGrid.Canvas.Brush.Color := clRed;
MyDBGrid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;