如何将DBGrid作为某个组件的一个Published属性?

WindowsAPI 2006-05-22 11:06:57
我做了一个下拉列表控件,里面有一个DBGrid,我想要把他放在Published区域,以便在对象浏览器中编辑它的Columns属性.可是我发现,如果不设置DBGrid.SetSubComponent(True),则Columns将无法保存在dfm文件中,设置DBGrid.SetSubComponent(True)后,又发现无法读取Columns属性.请问各位有什么好办法解决这个问题?
...全文
96 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
magie16036936 2006-10-26
  • 打赏
  • 举报
回复
unit AnyNurbsActions;

interface

uses
Windows, SysUtils, Variants, Classes, Controls, AnyStdCtrlsTools, AnyNurbs,
AnyGlobalConsts, AnyXYs, AnyMap;

type
TCreateNurbsAction=class(TCreateShapeAction)
private
LineTracker:TAnyNurbs;
public
//------------------------------------------------------------------------//
constructor Create(AView: TAnyMap);override;
destructor Destroy; override;
//------------------------------------------------------------------------//
class function ToolId:Word;override;
class function ToolType:TToolType;override;
//------------------------------------------------------------------------//
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
//------------------------------------------------------------------------//
procedure Paint; override;
procedure MarkNoTrackFrame; override;
//------------------------------------------------------------------------//
end;

implementation

{ TCreateNurbsAction }

constructor TCreateNurbsAction.Create(AView: TAnyMap);
begin
inherited Create(AView);
LineTracker:=TAnyNurbs.Create;
end;

destructor TCreateNurbsAction.Destroy;
begin
LineTracker.Free;
inherited Destroy;
end;

procedure TCreateNurbsAction.MarkNoTrackFrame;
begin
LineTracker.MarkNoTrackFrame;
end;

procedure TCreateNurbsAction.MouseDown(Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
APolyLine:TAnyNurbs;
Pt:TAny2DPoint;
PointIndex:Integer;
LocalTrackData:TAnyNurbsFrameData;
begin
inherited;
case Button of
mbLeft:begin
if LineTracker.InTracking then
begin
with LineTracker do
begin
ClearTrackFrame;
{增加顶点}
LocalTrackData:=TAnyNurbsFrameData(TrackData);
Pt:=Parent.CanvasToClient(X, Y);
PointIndex:=LocalTrackData.Points.Count-1;
LocalTrackData.Points.CUEditXY(PointIndex, Pt.X, Pt.Y);
LocalTrackData.Points.CUAddXY(Pt.X, Pt.Y);
DrawTrackFrame;
end;
end
else
begin
View.Container.CheckActiveEditLayer;
with LineTracker do
begin
{则重新初始化LineTracker}
Parent:=View.SelectionManager.Root;
MapCanvas:=View.MapCanvas;
Points.CUClear;
{增加第一个点}
Pt:=Parent.CanvasToClient(X, Y);
Points.CUAddXY(Pt.X, Pt.Y);
Points.CUAddXY(Pt.X, Pt.Y);
{开始跟踪}
BeginTrack;
end;
end;
end;
mbRight:begin
with LineTracker do
begin
{如果正在编辑,则结束编辑}
if InTracking then
begin
{结束跟踪}
EndTrack;
{创建多边形,并应用当前的LineTracker设置}
APolyLine:=TAnyNurbs(CreateShapeAt(TAnyNurbs, 0, 0));
APolyLine.Assign(LineTracker);
AddAndRefresh(APolyLine);
end;
end;
end;
end;
end;


procedure TCreateNurbsAction.MouseMove(Shift: TShiftState; X, Y: Integer);
var
Pt:TAny2DPoint;
PointIndex:Integer;
LocalTrackData:TAnyNurbsFrameData;
begin
inherited;
with LineTracker do
if InTracking then
begin
ClearTrackFrame;
LocalTrackData:=TAnyNurbsFrameData(TrackData);
Pt:=Parent.CanvasToClient(X, Y);
PointIndex:=LocalTrackData.Points.Count-1;
LocalTrackData.Points.Items[PointIndex]^:=Geo2DPoint(Pt.X, Pt.Y);
DrawTrackFrame;
end;
end;

procedure TCreateNurbsAction.Paint;
begin
if LineTracker.InTracking then
LineTracker.DrawTrackFrame;
end;

class function TCreateNurbsAction.ToolId: Word;
begin
Result:=ID_TOOL_CREATE_NURBS;
end;

class function TCreateNurbsAction.ToolType: TToolType;
begin
Result:=ttCreate;
end;

end.
tianxueshan 2006-05-23
  • 打赏
  • 举报
回复
用对象文件保存组件信息试试。
dabaicai 2006-05-23
  • 打赏
  • 举报
回复
呵呵,老早也写过,忘了, 帮你顶下
GALFORDD 2006-05-23
  • 打赏
  • 举报
回复
帮顶~~~~~~``

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧