设days:array[0..25] of word;如何利用MonthCalendar1.BoldDays方法,将这26个日期用粗体显示?以下这个办法不好使啊, for i:=0 to 25 do MonthCalendar1.BoldDays(day[i], MonthBoldInfo);//TCalendar控件,功能不够,显示不了年日。
用TMonthCalender和TCalender结合吧, 在TMonthCalender上面放一个TCalender盖住它的日期部份(也就是中间那一部份), 但TCalender的源代码要改一改,主要是改一下它的DrawCell那一部份。 另外在TMonthCalender的OnGetMonthInfo事件中要写一点代码: var y, m, d: word; begin DecodeDate(MonthCalendar1.Date, y, m, d); Calendar1.Year := y; Calendar1.Month := m; Calendar1.Day := d; end;
在TMonthCalender的OnGetMonthInfo事件中,第一次用DecodeDate(MonthCalendar1.Date, y, m, d);得到的month是当前的月份,可是,改变到下一个月份的时候,再用DecodeDate(MonthCalendar1.Date, y, m, d); 得到的月份就不是当前的月份,你昨天说的‘’这里可加一段代码,改变一下MonthCalendar的月份,再该回来,要不然不会刷新;“该如何实现刷新? 还有: procedure TForm1.MonthCalendar1GetMonthInfo(Sender: TObject; Month: Cardinal; var MonthBoldInfo: Cardinal);在这个过程中,得到的参数month的值怎么会不是当前月份的值呢?
请看下面的程序: 1: var monthboldinfo:Cardinal; procedure TForm1.MonthCalendar1Click(Sender: TObject); begin MonthCalendar1.BoldDays([1,4],monthboldinfo); end; 这样的话,粗体得不到显示,是不是说明MonthCalendar1.BoldDays方法,必须用在TForm1.MonthCalendar1GetMonthInfo事件中?如果可以,请具体说明方法。2: form1上放有MonthCalendar1,edit1,代码如下: y,m,d:word; procedure TForm1.MonthCalendar1GetMonthInfo(Sender: TObject; Month: Cardinal; var MonthBoldInfo: Cardinal); begin decodedate(MonthCalendar1.date,y,m,d); edit1.text:=inttostr(m); end; 当点击日历指向下一个月份的时候,为什么在edit1.text中,没有办法正确反映月份的值?月份的值都比当前月份少一。如何改正? 一定一定加分!!
刷新可用以下方法:procedure TForm1.Button2Click(Sender: TObject); var MonthBoldInfo: Cardinal; y, m, d: Word; begin SetLength(a, 3); a[0] := 1; a[1] := 6; a[2] := 8; MonthCalendar1.BoldDays(a, MonthBoldInfo); DecodeDate(MonthCalendar1.Date, y, m, d); if m < 12 then MonthCalendar1.Date := EncodeDate(y, m + 1, d) else MonthCalendar1.Date := EncodeDate(y, m - 1, d) MonthCalendar1.Date := EncodeDate(y, m, d); end;取正确月份应该这样:procedure TForm1.MonthCalendar1GetMonthInfo(Sender: TObject; Month: Cardinal; var MonthBoldInfo: Cardinal); begin if Month = 1 then Month := 12 else Dec(Month); Edit1.Text := IntToStr(Month); end;
可粗显1,3,5三天,不过这种方法还是不理想。MonthCalendar1.BoldDays([1, 3, 5], MonthBoldInfo);
还有,那种方法比较理想?
或者是第三方控件?能否举个例子,谢谢。
我做的股票分析,就被卡在这里,非常非常感谢!!!!
var
MonthBoldInfo: Cardinal;
begin
SetLength(a, 3);
a[0] := 1;
a[1] := 6;
a[2] := 8;
MonthCalendar1.BoldDays(a, MonthBoldInfo);
//这里可加一段代码,改变一下MonthCalendar的月份,再该回来,要不然不会刷新;
end;如果用TMontCalendar控件,暂时还没有更好的方法,
有没有这类第三方控件,我就不清楚了,因为我几乎不用第三方控件。
有源代码,稍微改一下就可以了,你可用它。
for i:=0 to 25 do
MonthCalendar1.BoldDays(day[i], MonthBoldInfo);//TCalendar控件,功能不够,显示不了年日。
在TMonthCalender上面放一个TCalender盖住它的日期部份(也就是中间那一部份),
但TCalender的源代码要改一改,主要是改一下它的DrawCell那一部份。
另外在TMonthCalender的OnGetMonthInfo事件中要写一点代码:
var
y, m, d: word;
begin
DecodeDate(MonthCalendar1.Date, y, m, d);
Calendar1.Year := y;
Calendar1.Month := m;
Calendar1.Day := d;
end;
得到的月份就不是当前的月份,你昨天说的‘’这里可加一段代码,改变一下MonthCalendar的月份,再该回来,要不然不会刷新;“该如何实现刷新?
还有:
procedure TForm1.MonthCalendar1GetMonthInfo(Sender: TObject;
Month: Cardinal; var MonthBoldInfo: Cardinal);在这个过程中,得到的参数month的值怎么会不是当前月份的值呢?
1:
var
monthboldinfo:Cardinal;
procedure TForm1.MonthCalendar1Click(Sender: TObject);
begin
MonthCalendar1.BoldDays([1,4],monthboldinfo);
end;
这样的话,粗体得不到显示,是不是说明MonthCalendar1.BoldDays方法,必须用在TForm1.MonthCalendar1GetMonthInfo事件中?如果可以,请具体说明方法。2:
form1上放有MonthCalendar1,edit1,代码如下:
y,m,d:word;
procedure TForm1.MonthCalendar1GetMonthInfo(Sender: TObject;
Month: Cardinal; var MonthBoldInfo: Cardinal);
begin
decodedate(MonthCalendar1.date,y,m,d);
edit1.text:=inttostr(m);
end;
当点击日历指向下一个月份的时候,为什么在edit1.text中,没有办法正确反映月份的值?月份的值都比当前月份少一。如何改正?
一定一定加分!!
var
MonthBoldInfo: Cardinal;
y, m, d: Word;
begin
SetLength(a, 3);
a[0] := 1;
a[1] := 6;
a[2] := 8;
MonthCalendar1.BoldDays(a, MonthBoldInfo);
DecodeDate(MonthCalendar1.Date, y, m, d);
if m < 12 then
MonthCalendar1.Date := EncodeDate(y, m + 1, d)
else
MonthCalendar1.Date := EncodeDate(y, m - 1, d)
MonthCalendar1.Date := EncodeDate(y, m, d);
end;取正确月份应该这样:procedure TForm1.MonthCalendar1GetMonthInfo(Sender: TObject;
Month: Cardinal; var MonthBoldInfo: Cardinal);
begin
if Month = 1 then
Month := 12
else
Dec(Month);
Edit1.Text := IntToStr(Month);
end;