View Full Version : سوال: ساخت calendar planner
hamid_14
دوشنبه 11 فروردین 1393, 19:42 عصر
سلام
می خواستم یک calendar planner مثل این تصویر درست کنم اما نمیدونم چطوریه,با stringgrid تقویم درست می کنم اما نمی تونم برای هر خط در هر سلول فونت یا رنگ تعریف کنم آیا از کامپوننت دیگه ای باید استفاده بشه.
البته کامپوننت های tms و devexpress دارن اما باید خودم درست کنم,لطفا راهنمائی بفرمائید
یوسف زالی
دوشنبه 11 فروردین 1393, 21:28 عصر
سلام. نمونه کاری رو که دارید انجام می دید قبلا شبیهش رو انجام داده بودم،
باید رویداد OnDrawCell رو مدیریت کنید. دقیقا canvas رو در اختیارتون قرار می ده تا هر بلایی دوست داشتید در بیارید.
hamid_14
دوشنبه 11 فروردین 1393, 23:11 عصر
با کد زیر تو یک سلول میشه چند خط بنویسم
procedure TForm2.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
with TStringGrid(Sender) do
begin
if Pos(#13#10, Cells[ACol, ARow]) > 0 then
begin
Canvas.FillRect(Rect);
Inc(Rect.Left, 2);
Inc(Rect.Top, 2);
DrawText(Canvas.Handle, PChar(Cells[ACol, ARow]), -1, Rect,
DT_NOPREFIX or DT_WORDBREAK);
end;
end;
end;
مثلا این متن
stringgrid1.cells[1,1] := 'line1'#13#10'Line2'#13#10'line3';
حالا میخوام تو این سلول فقط متن line3 رنگش سبز بشه باید چکار کرد,مشکل اینه
یوسف زالی
سه شنبه 12 فروردین 1393, 14:58 عصر
باید تک تک خطوط رو جداگانه با رنگ های خودشون رسم کنید.
hamid_14
چهارشنبه 13 فروردین 1393, 01:26 صبح
میشه لطفا یک مثال بزنید من هرکاری می کنم کل متن های cell رنگ میشه,ممنون
یوسف زالی
پنج شنبه 14 فروردین 1393, 13:32 عصر
گفتم دیگه، خط اول رو با یک رنگ بنویسید، رنگ رو عوض کنید و خط دوم رو بنویسید.
hamid_14
پنج شنبه 14 فروردین 1393, 14:04 عصر
بله اما نمیشه,لطف می کنید کدش اینجا قرار بدید,فقط ثبت مثلا دو خط با رنگ متفاوت در cell, ممنون
یوسف زالی
یک شنبه 17 فروردین 1393, 09:31 صبح
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if ACol = 2 then
if ARow = 3 then
begin
StringGrid1.Canvas.Font.Color := clRed;
StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top, 'hello');
StringGrid1.Canvas.Font.Color := clBlue;
StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top + 11, 'world');
end;
end;
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.