捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  粤ICP备10103342号-1 DELPHI盒子 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 盒子检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
 
广告
评论:TStringGrid调用ComboBox的演示例子
ucg1987 114253 2014/4/22 19:28:27
好厉害! 找了很久一直使用的都是网上别的嵌入combobox的方法,相比之下这个牛太多了!
huangjian_w 31151 2007/9/14 20:34:49
//实现了简单日历功能

var
  frm_Calendar: Tfrm_Calendar;
  cbblist: TComboBox;
  cbbPanel: TPanel;

implementation

uses DateUtils;

{$R *.dfm}
procedure Tfrm_Calendar.sbtbtn1Click(Sender: TObject);
var
  Col,Row:Integer;
  Year,Month,Day,Week,DysOfMn:Word;
begin

  Year := Round(edt_Year.Value);
  for Col := 1 to 12 do
  begin
    DysOfMn := DaysInMonth(StrToDate(IntToStr(Year) + '-' + IntToStr(Col) + '-01' ));
    for Row := 1 to 31 do
    begin
      Month := Col;
      Day   := Row;
      if Row > DysOfMn then
      begin
        sgd_Cd.Cells[Col,Row] := '';
        Continue;
      end;

      if IsValidDate(year,Month,Day) then
      begin
        Week := DayOfTheWeek(StrToDate(IntToStr(Year) + '-' + IntToStr(Month) + '-' + IntToStr(Day)));
        cbblist.ItemIndex := Week - 1;
        sgd_Cd.Cells[Col,Row] := cbblist.Items[Week - 1];
      end;
    end;
  end;
end;

procedure Tfrm_Calendar.sbtbtn3Click(Sender: TObject);
begin
  close;
end;

procedure Tfrm_Calendar.FormCreate(Sender: TObject);
var
  Rect :TRect;
  Col,Row:Integer;
  CRPanle:TPanel;
begin
  Self.DoubleBuffered := True;

  sgd_Cd.Cells[0,0] := '   日';

  for Col := 1 to 12 DO
  begin
    sgd_Cd.Cells[Col,0] := '  '+ IntToStr(Col) + '月';
  end;

  for Row := 1 to 31 DO
  begin
    sgd_Cd.Cells[0,Row] := '   第' + IntToStr(Row) + '日' ;
  end;

  Rect:= sgd_Cd.CellRect(1,1);
  cbbPanel := TPanel.Create(Self);
  cbbPanel.Parent := sgd_Cd;
  cbbPanel.Visible := false;
  cbbPanel.Left := rect.Left;
  cbbPanel.Top := rect.Top;
  cbbPanel.Width := Rect.Right - Rect.Left;
  cbbPanel.Height := Rect.Bottom - Rect.Top;
  cbbPanel.BevelInner := bvNone;
  cbbPanel.BevelOuter := bvNone;
  cbbPanel.BorderStyle := bsNone;

  cbblist := TComboBox.Create(cbbPanel); //把Combox放入Panel主要是能借助Panel的容器功能,打开下啦列表
  cbblist.Parent := cbbPanel;
  cbblist.Align := alClient;
  cbblist.Visible := True;

  cbblist.Style := csDropDownList;
  cbblist.DropDownCount := 7;
  cbblist.OnChange := cbb1Change;

  cbblist.Items.Add('周一');
  cbblist.Items.Add('周二');
  cbblist.Items.Add('周三');
  cbblist.Items.Add('周四');
  cbblist.Items.Add('周五');
  cbblist.Items.Add('周六');
  cbblist.Items.Add('周日');
end;

//这里仅仅需要改变Cell的值,就会在DrawCell中发现变化,并执行相应改变
procedure Tfrm_Calendar.cbb1Change(Sender: TObject);
var
  Tex : String;
begin
  Tex := cbblist.Text;
  if Trim(sgd_Cd.Cells[sgd_Cd.Col,sgd_Cd.Row]) = '' then Exit;
  sgd_Cd.Cells[sgd_Cd.Col,sgd_Cd.Row] := Tex; 
end;

//该事件是由Timer驱动的不停扫描的,所以该事件一旦定义就会不断执行,当扫描到符合判断条件执行响应代码
procedure Tfrm_Calendar.sgd_CdDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  if (ACol = 0) and (ARow = 0) then Exit;
  if gdFixed in State then Exit;

  With TStringGrid(Sender) do
  begin
      if (TStringGrid(Sender).Cells[ACol,ARow] = '周六') or (TStringGrid(Sender).Cells[ACol,ARow] = '周日') then
      begin
        Canvas.Brush.Color :=clYellow;// ClBlue;
        Canvas.FillRect(Rect);
        Canvas.font.color:=clRed;
        Canvas.TextOut(rect.left + 5 , rect.top + 5 , cells[acol, arow]);
      end else
      begin
        Canvas.Brush.Color :=clWindow;
        Canvas.FillRect(Rect);
        Canvas.font.color:=ClBlack;
        Canvas.TextOut(rect.left + 5 , rect.top + 5, cells[acol, arow]);
      end;
  end;

end;

//该事件是在Cell选择时,触发的
procedure Tfrm_Calendar.sgd_CdSelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
var
  Rect :TRect;
begin
  Rect:= sgd_Cd.CellRect(ACol,ARow);
  cbbPanel.Left := rect.Left;
  cbbPanel.Top := rect.Top;
  cbbPanel.Width := Rect.Right - Rect.Left;
  cbbPanel.Height := Rect.Bottom - Rect.Top;
  cbbPanel.Visible := True; 
end;
nihaoqiang 23212 2006/4/26 11:07:34
我没试过行不行
请问,这也能编译吗?

 T2cccStringGrid = class(TStringGrid)
  ...
 TStringGrid = class(T2cccStringGrid);

类还能这样继承?
jacky1011 22618 2006/4/3 16:28:55
楼上的2CCCSTRINGGRID是重载之后的控件
mlucky 22469 2006/3/29 8:39:16
请问下2cccStringGrid是第三方控件吧?在盒子找不到,能不能给我传一个?
邮箱:mzplucky@126.com
xingzj0117 21929 2006/3/6 10:43:06
动态绑定
hsgrass 21725 2006/2/24 8:45:32
  TStringGrid = class(T2cccStringGrid);
  TForm1 = class(TForm)
    StringGrid1: TStringGrid; // 为什么这里不能替换为T2cccStringGrid?
第一页 上一页 下一页 最后页 有 7 条纪录 共1页 1 - 7
 用户名:
 密 码:
自动登陆(30天有效)
 
  DELPHI盒子版权所有 技术支持:深圳市麟瑞科技有限公司 1999-2024 V4.01 粤ICP备10103342号-1 更新RSS列表