PDA

View Full Version : string grid



solmaz_zm
چهارشنبه 29 خرداد 1387, 17:20 عصر
سلام به دوستان
چطور مي توان يك رديف را در string grid رنگي كرد.

Hsimple11
چهارشنبه 29 خرداد 1387, 18:12 عصر
با سلام

در این پست این مقاله را در مورد رنگ کردن GRID ها بخوانید :
http://barnamenevis.org/forum/showthread.php?t=109975

برای رنگ کردن هر نوع grid بایستی از رویداد Drawcell یا Drawcolumncell استفاده کرد. اگر میخواهید در runtime سطر خاصی را رنگ کنید میتوانید پس از تعریف یک متغیر در قسمت var یونیت خود به عنوان شماره سطر در قسمت مورد نظر شماره سطر را تعیین کنید. مثلا شماره سطر را در یک edit وارد کرده و بخواهیم با فشردن دکمه سطر مورد نظر رنگ گردد :


.
.
.
var
Form1: TForm1;
ColorRow: integer;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
ColorRow := 5;
StringGrid1.Repaint;
end;

حالا در رویداد OnDrawCell مربوط به StringGrid خود سطر مورد نظر را رنگ میکنیم. با یک شرط ساده تنها ردیفی را رنگ می کنیم که شماره آنرا در Edit وارد کرده بودیم :


procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if ARow = ColorRow then
begin
StringGrid1.Canvas.Brush.Color := رنگ دلخواه;
StringGrid1.Canvas.FillRect(Rect);
end;
end;

solmaz_zm
چهارشنبه 29 خرداد 1387, 18:53 عصر
ممنوناما يه مشكلي هست .وقتي سطر رو رنگ ميكنه،محتويات درون اون رو هم پاك ميكنه!!!!

Hsimple11
چهارشنبه 29 خرداد 1387, 20:30 عصر
ممنوناما يه مشكلي هست .وقتي سطر رو رنگ ميكنه،محتويات درون اون رو هم پاك ميكنه!!!!

از دستور canvas.Textout استفاده کنید. این دستور یک رشته را (مثلا در اینجا محتویات سلولهای شما) در canvas کنترل شما از موقعیت X و Y شروع کرده و تا آخر رشته می نویسد. از آنجا که برای رنگ کردن از خصوصیت Canvas استفاده کردید باید این کد را بعد از آن قرار دهید. یعنی یک متغیر از نوع String تعریف کرده ، آنرا برابر با محتویات سلولهای خود قرار داده و بعد آنرا با textout در canvas کنترل StringGrid خود بنویسید. کد شما به اینصورت در خواهد آمد :


procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
A : string;
begin
if ARow = ColorRow then
begin
StringGrid1.Canvas.Brush.Color := clYellow;
StringGrid1.Canvas.FillRect(Rect);
A := StringGrid1.Cells[ACol,ARow];
StringGrid1.Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, A);
end;
end;

در ضمن از امکانات سایت استفاده کنید. برای تشکر نیاز به نوشتن نیست. کافیست دکمه تشکر را کلیک کنید!
موفق باشید...