捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  粤ICP备10103342号-1 DELPHI盒子 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 盒子检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
盒子资源分类
全部展开 - 全部合拢
TStringGrid调用ComboBox的演示例子
关键字:T2cccStringGrid ComboBox TInplaceEditList esEllipsis esPickList
来 自:原创
平 台:Win9x,Win2k/XP/NT,Win2003 下载所需:0 火柴
深浅度:初级 完成时间:2006/2/23
发布者:zizii 发布时间:2006/2/23
编辑器:BDS2006 语  种:简体中文
分 类:组件 下载浏览:10173/14944
加入到我的收藏
下载错误报错
登陆以后才能下载
 用户名:
 密 码:
自动登陆(30天有效)
图片如果打不开,说明流量不够了,请稍候下载……
TStringGrid调用ComboBox的演示例子,这个应该是比较简单有效的方法。

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids;

type
  T2cccStringGrid = class(TStringGrid)
  protected
    function CreateEditor: TInplaceEdit; override;
    function GetEditStyle(ACol, ARow: Longint): TEditStyle; override;
    procedure EditListGetItems(ACol, ARow: Integer; Items: TStrings);
    procedure EditButtonClick(Sender: TObject);
  end;
  TStringGrid = class(T2cccStringGrid);

  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function T2cccStringGrid.CreateEditor: TInplaceEdit;
begin
  Result := TInplaceEditList.Create(Self);
  (Result as TInplaceEditList).OnGetPickListitems := EditListGetItems;
  (Result as TInplaceEditList).OnEditButtonClick := EditButtonClick;
end;

function T2cccStringGrid.GetEditStyle(ACol, ARow: Integer): TEditStyle;
begin
  case ACol mod 2 of
    0: Result := esEllipsis;
    1: Result := esPickList;
  else
    Result := inherited GetEditStyle(ACol, ARow);
  end;
end;

procedure T2cccStringGrid.EditListGetItems(ACol, ARow: Integer; Items: TStrings);
begin
  case ACol mod 2 of
    0: Items.CommaText := '2ccc,delphibox,zizii';
    1: Items.CommaText := 'welcome,stringgrid,demo';
  end;
end;

procedure T2cccStringGrid.EditButtonClick(Sender: TObject);
begin
  Cells[Col, Row] := 'Hello 2ccc';
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  StringGrid1.Options := StringGrid1.Options + [goEditing];
  StringGrid1.DefaultRowHeight := 21;
end;

end.
Google
 
本站原创作品,未经作者许可,严禁任何方式转载;转载作品,如果侵犯了您的权益,请联系我们
龙脉加密锁 15元起 Grid++Report 报表 申请支付@网
 相关文章
没有相关文章
相关评论
共有评论7条 当前显示最后6条评论
xingzj0117 2006/3/6 10:43:06
动态绑定
mlucky 2006/3/29 8:39:16
请问下2cccStringGrid是第三方控件吧?在盒子找不到,能不能给我传一个?
邮箱:mzplucky@126.com
jacky1011 2006/4/3 16:28:55
楼上的2CCCSTRINGGRID是重载之后的控件
nihaoqiang 2006/4/26 11:07:34
我没试过行不行
请问,这也能编译吗?

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

类还能这样继承?
huangjian_w 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;
ucg1987 2014/4/22 19:28:27
好厉害! 找了很久一直使用的都是网上别的嵌入combobox的方法,相比之下这个牛太多了!
我要发表评论 查看全部评论
 
  DELPHI盒子版权所有 技术支持:深圳市麟瑞科技有限公司 1999-2024 V4.01 粤ICP备10103342号-1 更新RSS列表