PDA

View Full Version : تغییر رنگ Select ، DbGrid از آبی به یک رنگ دیگر



Laia2005
پنج شنبه 13 بهمن 1384, 12:49 عصر
وقتی روی یک سطر کلیک کردم به جای اینکه سطر آبی بشه قرمز بشه
یا یه رنگ دیــگه شود .

fahimi
جمعه 14 بهمن 1384, 07:52 صبح
procedure TForm34.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
iValue:Byte;
begin
iValue :=DBGrid1.DataSource.DataSet.RecNo mod 2;
If (gdFocused in State) or (gdSelected in State) then
dbgrid1.canvas.brush.color :=ClBlue
else
case iValue of
1: DBGrid1.Canvas.Brush.Color :=clCream ;
0: DBGrid1.Canvas.Brush.Color :=clWhite;
end;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

vcldeveloper
جمعه 14 بهمن 1384, 10:38 صبح
این رنگ توسط ویندوز تعیین میشه و برای تغییرش هم باید تنظیمات ویندوز را دستکاری کنید. Control Panel -> Display -> Appearance -> Advanced -> Selected Items
باید یک کلید رجیستری برای ذخیره همچین تنظیماتی وجود داشته باشه.

Naficy
یک شنبه 16 بهمن 1384, 08:23 صبح
هرچند فکر نمی کنم منظورتان آن چیزی باشه که آقای کشاورز گفتند، اما اگه بخواین این رنگ در تمام برنامه ها تغییر کنه، احتیاجی به رجیستری نیست. از SetSysColors باید استفاده کرد.

vjp
پنج شنبه 18 خرداد 1385, 11:06 صبح
سلام من یه کد در این مورد پیدا کردم
ابتدا باید کلاسی به شکل زیر تعریف کنید:


THackDBGrid=class(tdbgrid);

سپس در رویداد DBGrid1DrawColumnCell کد زیر را بنویسید تا رنگ سطر به سبز تبدیل شود:


begin
if (THackDBGrid(DBGrid1).DataLink.ActiveRecord + 1 =
THackDBGrid(DBGrid1).Row)
or (gdFocused in State) or (gdSelected in State) then
DBGrid1.Canvas.brush.Color := clgreen;
TDBGrid(Sender).DefaultDrawColumnCell(rect,DataCol ,Column,state);
end;

babak869
پنج شنبه 18 خرداد 1385, 19:42 عصر
کافیست که در رویداد OnDrawColumnCell بنویسید :


var
iValue:Byte;
begin
iValue :=DBGrid1.DataSource.DataSet.RecNo mod 2;
If (gdFocused in State) or (gdSelected in State) then
dbgrid1.canvas.brush.color :=Cllime
else
case iValue of
1: DBGrid1.Canvas.Brush.Color :=clCream ;
0: DBGrid1.Canvas.Brush.Color :=clWhite;
end;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

و به دلخواه رنگ اونو تغییر بدید

vjp
شنبه 20 خرداد 1385, 07:10 صبح
جناب بابک
تاپیک خواسته شده در مورد تغییر رنگ سطر Select شده میباشد اما کد ارسالی شما همه سطرها را یکی در میان رنگ میکند.

babak869
شنبه 20 خرداد 1385, 08:54 صبح
جناب بابک
تاپیک خواسته شده در مورد تغییر رنگ سطر Select شده میباشد اما کد ارسالی شما همه سطرها را یکی در میان رنگ میکند.
دوست عزیز من کد کلی رو برای شما گذاشتم.اگه کمی دقت کنید میبینید که میتونید رنگ سطرها رو به دلخواه عوض کنید.اگه نمیخواهید سطرها یکی در میان رنگی باشه این قسمت از کد رو به رنگ سفید تغییر بدید :


1: DBGrid1.Canvas.Brush.Color :=clCream ;
0: DBGrid1.Canvas.Brush.Color :=clWhite;

به اینصورت


1: DBGrid1.Canvas.Brush.Color :=clwhite ;
0: DBGrid1.Canvas.Brush.Color :=clWhite;

در ضمن رنگ HighLight رو هم میتونید عوض کنید!!

vjp
شنبه 20 خرداد 1385, 10:27 صبح
دوست عزیز من کد کلی رو برای شما گذاشتم.اگه کمی دقت کنید میبینید که میتونید رنگ سطرها رو به دلخواه عوض کنید.اگه نمیخواهید سطرها یکی در میان رنگی باشه این قسمت از کد رو به رنگ سفید تغییر بدید ......

هدف نوشتن کد به صورت بهینه و مفید است ، به جای رنگ آمیزی سطور با رنگ سفید بهتر است آنها را اصلاً رنگ نکنیم!
در کد ارسالی من تنها تمرکز ما روی سطر Active میباشد.
از این گذشته در کد شما هنوز مشکل رنگ آمیزی کل سطر وجود دارد و فقط یک سلول انتخابی رنگ میشود. فایل پیوست را ببینید:

babak869
شنبه 20 خرداد 1385, 11:53 صبح
هدف نوشتن کد به صورت بهینه و مفید است ، به جای رنگ آمیزی سطور با رنگ سفید بهتر است آنها را اصلاً رنگ نکنیم!
در کد ارسالی من تنها تمرکز ما روی سطر Active میباشد.
از این گذشته در کد شما هنوز مشکل رنگ آمیزی کل سطر وجود دارد و فقط یک سلول انتخابی رنگ میشود. فایل پیوست را ببینید:
شما باید خصوصیت Option-> dgRowSelect رو True کنید اونوقت میتونید بجای یک سلول یک سطر رو انتخاب کنید ولی فراموش نکنید که خاصیت dgEditing همیشه True باشه تا اجازه ویرایش DbGrid رو داشته باشبد

Ehsani2006
شنبه 20 خرداد 1385, 14:29 عصر
آقا بابک از کداتون ممنون ! خیلی مفید بودن مخصوصا زمانی که من رو همین موضوع تحقیق می کردم . بازم ممنون.

آقایون قبل از اینکه تایپیک بفرستید یکمی اطلاعاتتون رو Update کنین !

vjp
یک شنبه 21 خرداد 1385, 07:21 صبح
شما باید خصوصیت Option-> dgRowSelect رو True کنید اونوقت میتونید بجای یک سلول یک سطر رو انتخاب کنید ولی فراموش نکنید که خاصیت dgEditing همیشه True باشه تا اجازه ویرایش DbGrid رو داشته باشبد
سلام
من دوست ندارم به اجبار حرف خود را تحمیل کنم اما بحث کردن مفید را دوست دارم تا خودم هم به نتیجه مفیدی برسم:
باید عرض کنم که
اگر Option-> dgRowSelect را True کنیم آنوقت خاصیت dgediting دیگر True نمیشود. یعنی این دوتا عکس هم هستند.
اولاًً در کد ارسالی بنده هیچ نیازی به این نیست که Option-> dgRowSelect را True کنیم.
ثانیاً امکان ویرایش سطر انتخابی هم وجود دارد چراکه خاصیت dgEditing میتواند True شود.

Modernidea
چهارشنبه 20 آذر 1387, 11:59 صبح
سلام بابك


ببين من كدي رو كه نوشته بودي يك قسمتيش را حذف كردم و با عث شد كه فقط سطر انتخاب شده رنگ شود ولي خط آخري كه باعث انجام اين تغييرات ميشه، باعث تغيير فونت تمام دبي گيرد هم ميشه.
نظرت چيه. بايد چكار كنم؟

var
iValue:Byte;
begin

iValue :=DBGrid1.DataSource.DataSet.RecNo mod 2;
If (gdFocused in State) or (gdSelected in State) then
dbgrid1.canvas.brush.color :=Cllime;

//else
// case iValue of
// 1: DBGrid1.Canvas.Brush.Color :=clCream ;
// 0: DBGrid1.Canvas.Brush.Color :=clWhite;
//end;

DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);// this line