怎样动态创建控件
解决方案 »
- 如果idtcpclient创建2个线程来读取数据,这样可以吗?
- 单机版分布式数据库系统,人员调动问题怎么解决呢?
- Availiable forms 與 Auto-create forms 的問題,高手請指點一下! 謝謝了!!!!!!!!
- 多线程的问题
- Fastreport中不能打开TfrDBDataSet!!!!!
- 如何设置RichTextBox中字体的格式?
- DBGrid表头汉化问题!
- For: 中秋佳节还在异乡流浪的兄弟姊妹
- web 页上的数据信息怎样读到我的结构中去?
- 想辞职,大家有什么看法,UP者有分。
- 在窗体form1中放了一个bdgrid控件,双击dbgrid一单元格,取得该单位格值,赋给全局变量,并传递给另一个窗体form2,接着打开form2窗体时
- 看下面语句怎么不正确啊
unit ColorComboBox;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls;typeTIdent = RecordColor:Integer;Name:String;end;TColorComboBox = class(TCustomComboBox)private{ Private declarations }ColorArray:array of TIdent;function GetSelectedColor: TColor;procedure SetSelectedColor(Value: TColor);protected{ Protected declarations }procedure CreateWnd; override;procedure DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); override;procedure Click;override;public{ Public declarations }constructor Create(AOwner: TComponent); override;destructor Destroy; override;published{ Published declarations }property SelectedColor: TColor read GetSelectedColor write SetSelectedColor;end;procedure Register;implementationprocedure Register;beginRegisterComponents('Samples', [TColorComboBox]);end;{ TColorComboBox }procedure TColorComboBox.Click;VarColorDlg:TColorDialog;beginif ItemIndex=High(ColorArray) thenBeginColorDlg:=TColorDialog.Create(Self);if ColorDlg.Execute thenColorArray[ItemIndex].Color:=ColorDlg.Color;ColorDlg.Free;End;inherited;end;constructor TColorComboBox.Create(AOwner: TComponent);begininherited;Style := csOwnerDrawFixed;Height:=25;itemHeight:=19;Font.Charset := GB2312_CHARSET;Font.Name := '宋体';Font.Height:=-15;SetLength(ColorArray,10);ColorArray[0].Color:=clRed;ColorArray[0].Name:='红色';ColorArray[1].Color:=clGreen;ColorArray[1].Name:='绿色';ColorArray[2].Color:=clBlue;ColorArray[2].Name:='蓝色';ColorArray[3].Color:=clYellow;ColorArray[3].Name:='黄色';ColorArray[4].Color:=clWhite;ColorArray[4].Name:='白色';ColorArray[5].Color:=clMaroon;ColorArray[5].Name:='褐色';ColorArray[6].Color:=clNavy;ColorArray[6].Name:='深蓝色';ColorArray[7].Color:=clSilver;ColorArray[7].Name:='银灰色';ColorArray[8].Color:=clAqua;ColorArray[8].Name:='浅蓝色';ColorArray[9].Color:=clWhite;ColorArray[9].Name:='定制';end;procedure TColorComboBox.CreateWnd;varIndex: integer;begininherited CreateWnd;Items.BeginUpdate;for Index := 0 to High(ColorArray) doItems.Add(ColorArray[Index].Name);Items.EndUpdate;ItemIndex := 0;end;destructor TColorComboBox.Destroy;begininherited;end;procedure TColorComboBox.DrawItem(Index: Integer; Rect: TRect;State: TOwnerDrawState);varSquare: TRect;beginTControlCanvas(Canvas).UpdateTextFlags;if odSelected in State thenbeginCanvas.Brush.Color := clHighlight;end;Canvas.FillRect(Rect);Canvas.Brush.Color := clBlack;Square := Rect;Square.Left := Square.Left + 1;Square.Right := Square.Left + ItemHeight -2;Square.Top := Square.Top + 1;Square.Bottom := Square.Bottom - 1;Canvas.FrameRect(Square);Canvas.Brush.Color := ColorArray[Index].Color;InflateRect(Square, -1, -1);Canvas.FillRect(Square);if odFocused in State thenbeginCanvas.Brush.Color := clHighlightText;Canvas.DrawFocusRect(Rect);end;Inc(Rect.Left, ItemHeight);InflateRect(Rect, 0, -1);if odSelected in State thenbeginCanvas.Pen.Color := clHighlightText;Canvas.Brush.Color := clHighlight;endelsebeginCanvas.Pen.Color := Font.Color;Canvas.Brush.Color := Color;end;DrawText(Canvas.Handle, PChar(Items[Index]), Length(Items[Index]), Rect, DT_VCENTER or DT_LEFT or DT_SINGLELINE);end;function TColorComboBox.GetSelectedColor: TColor;beginResult := ColorArray[ItemIndex].Color;end;procedure TColorComboBox.SetSelectedColor(Value: TColor);varIndex: Integer;beginfor Index := 0 to High(ColorArray) doif ColorArray[Index].Color = Value thenbeginItemIndex := Index;Exit;end;end;end.
动态创建控件,如果没有指定其 Parent 属性是无法显示的.
比如:
With TEdit1.Create(Self) Do Begin
Parent:= Self;
Top:= 0;
Left:= 0
.....
End;
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
btnArray : array of TButton;
begin
SetLength(btnArray,5);
for i:=0 to 4 do
begin
btnArray[i]:=TButton.Create(self);
if i=0 then
btnArray[i].Top :=20
else
btnArray[i].Top :=btnArray[i-1].Top +30; btnArray[i].Left :=20;
btnArray[i].Width :=100;
btnArray[i].Caption :='DynamicButton'+IntToStr(i);
btnArray[i].Parent :=Panel1;//必须指定Parent
end;
end;
with AButton do
begin
Parent:=AParent;
Visible:=True;
OnClick:=AButtonOnClick;
end;
begin
Parent := yourparent;
Visible := True;
OnClick := yourclick;
end;