动态创建控件,如何调用! (200分)

  • 主题发起人 goodfriend1
  • 开始时间
G

goodfriend1

Unregistered / Unconfirmed
GUEST, unregistred user!
请问各位大虾,我通过输入的参数动态创建N个动态控件,并通过动态控件属性,关联
popupmenu的右键菜单,现在我想通过点击右键菜单中选择"删除",即释放这个选定的动态
控件,但无法获得该控件,利用(sender),却释放了该右键菜单了...请问要如何解决..谢谢!
 
可自定义一个私有属性来完成!
 
你必须自己定义,因为它的上一级TCustomControl没有Font和Caption属性,还有一个办法,改变继承
 
....
published
property Align;
property Anchors;
property AutoSize;
property BiDiMode;
property BorderWidth;
property Color: TColor read FColor write SetColor;
property Ctl3D;
property Enabled;
property Style: TGlassStyle read FStyle write SetStyle default gsSrcAnd;
property Visible;

property OnClick;
property OnDblClick;
property OnEnter;
property OnExit;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnResize;
property OnPaint: TNotifyEvent read FOnPaint write FOnPaint;

property Font;
property Caption;
end;

that's all.

Font和Caption定义在TControl中, 所以你可以直接publish它。
 
在win2000中,不是可以直接用
Form1.AlphaBlendValue:=200;
Form1.AlphaBlend:=true;
form1.TransparentColor :=true;
的吗
 
Another_eYes兄,所答沒錯...我加入property Font; property Caption;后,確能增加
Caption和Font的屬性,但為何在Caption中輸入相應文字后,無法在Panel中顯示出來呢?
煩請你再幫忙看一下,謝謝!
 
不解,如果要panel透明的话,还要panel作甚??
 
to cb_hfxy
呵呵,可以放在最上层,让用户不能操作,很酷的哦
 
你在右键菜单的OnPopup事件中,把当前的控件通过Integer(当前控件)
转化成整型数值保存到右键菜单的Tag中,在删除单击事件中通过Pointer(右键菜单.Tag)
再转化成指针使用
 
只有听课的份。
 
用这句话不就行了。
TPopupMenu(Sender).PopupComponent.Free;
 
用这句话TPopupMenu(Sender).PopupComponent.Free;不行啊!出错了..还有没其它方法呢?
 
感觉前面回答的人说的不是这个问题,是不是改题目了?

设定一个变量,用来表示弹出PopupMenu的组件。
在弹出Popupmenu的组件的OnContextPopup(PopupMenu的OnPopup中FindVCLWindow)给该变量
赋值,不就可以了?
 
不好意思,我写错了,不能用Sender因为Sender是一个MenuItem所以
你直接用PopupMenu的名称
也就是PopupMenuName.PopupComonent.Free;这样一定可以的,你试试。
 
ok.
在窗体上放一个工具栏,在工具栏上放三个TButton;
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus,ComCtrls,StdCtrls, ToolWin;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
ToolBar1: TToolBar;
procedure SetValue( SheetNum:integer =3);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
CPageControl:TPageControl;
CTabSheet:TTabSheet;
CButton:TButton;
procedure ButtonClick(Sender:TObject);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
uses Unit2;

procedure TForm1.ButtonClick(Sender:TObject);
var
TempTS:TTabSheet;
begin
if (Sender is TButton) and ((TButton(Sender).Parent) is TTabsheet) then
TempTs:=TTabSheet(TButton(Sender).Parent)
else
Exit;
with Sender as TButton do
ShowMessage(Format('%s%s%s%s%s',['所点击的按钮所在页:',TempTs.Caption,#13,'按钮的序号为:',IntToStr(Tag)]));
end;

procedure TForm1.SetValue( SheetNum:integer =3);
var
I,J:integer;
begin
Form1.Color:=clBtnFace;
CPageControl:=TPageControl.Create(Self);
CPageControl.Parent:=Form1;
CPageControl.Align:=alClient;
for I:=1 to SheetNum do
begin
CTabSheet:=TTabSheet.Create(CPageControl);
CTabSheet.PageControl:=CPageControl;
CTabSheet.Parent:=CPageControl;
CTabSheet.Caption:=Format('%s%s',['Tab',IntToStr(I)]);
CTabSheet.Name:=CTabSheet.Caption;
for J:=1 to 5 do
begin
CButton:=TButton.Create(CTabSheet);
CButton.Parent:=CTabSheet;
CButton.Font.Size:=12;
CButton.Left:=150;
CButton.Top:=5+J*40;
CButton.Height:=35;
CButton.Width:=250;
CButton.Caption:=Format('%s%s%s%s',[CTabSheet.Caption,'中的第',IntToStr(J),'个按钮']);
CButton.Tag:=J;
CButton.OnClick:=ButtonClick;
end;
end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
i,j:integer;
begin
if CPageControl=nil then exit;
i:=CPageControl.ControlCount-1;
for j:=0 to i do
begin
if CPageControl.Controls[0] is TTabSheet then
TTabSheet(CPageControl.Controls[0]).Free;
end;
CPageControl.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Caption:='设置(3页)';
SetValue;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
I:integer;
begin
Button3.Caption:='删除一页';
if CPageControl=nil then exit;
I:=CPageControl.PageCount;
if I=1 then
begin
CPageControl.Visible:=False;
Form1.Color:=clBtnShadow;
CPageControl.Free;
Exit;
end;
CPageControl.ActivePage:=CPageControl.Pages[0];
CPageControl.Pages[I-1].Visible:=False;
CPageControl.Pages[I-1].Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Button2.Caption:='增加一页';
if CPageControl=nil then exit;
CTabSheet:=TTabSheet.Create(CPageControl);
CTabSheet.Parent:=CPageControl;
CTabSheet.PageControl:=CPageControl;
CTabSheet.Caption:=Format('%s%s',['Tab',IntToStr(CPageControl.PageCount)]);
end;
end.

可以吧,可以删,
 
还有
>>问题:动态创建控件,如何调用!???
题目怎么变了
 
我上面的代码要去掉
uses Unit2;
 
点击控件时记录所点击控件的名称即可
 
coldew:你的正确的!太感谢你了,谢谢!
 
顶部