panel: TPanel; TForm1.Button1Click(Sender: TObject); panel := TPanel.Create(Self); panel.Parent := Self; TButton.Create(panel) Parent := panel; Caption := ; ; ; TForm1.Button2Click(Sender: TObject); Assigned(panel) FreeAndNil(panel); ;
二、使用接口:
Unit1; Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; TForm1 = (TForm) Button1: TButton; Button1Click(Sender: TObject); ; IBass = Interface GetName: ; SetName( AName: ); Name: GetName SetName; ; TBass = (TInterfacedObject, IBass) FName: ; GetName: ; SetName( AName: ); Create( AName: ); ; Form1: TForm1; TForm1.Button1Click(Sender: TObject); X: IBass; X := TBass.Create(); ShowMessage(X.Name); X.Name := ; ShowMessage(X.Name); ; TBass.Create( AName: ); FName := AName; ; TBass.GetName: ; Result := FName; ; TBass.SetName( AName: ); FName := AName; ; .
三、使用结构:
Unit1; Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; TForm1 = (TForm) Button1: TButton; Button1Click(Sender: TObject); ; TBass = FName: ; SetName( AName: ); Create( AName: ); Name: FName SetName; ; Form1: TForm1; TForm1.Button1Click(Sender: TObject); X: TBass; X := TBass.Create(); ShowMessage(X.Name); X.Name := ; ShowMessage(X.Name); ; TBass.Create( AName: ); FName := AName; ; TBass.SetName( AName: ); FName := AName; ; .
四、在 initialization 中建立、在 finalization 中释放:
Unit1; Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; TForm1 = (TForm) Button1: TButton; Button1Click(Sender: TObject); ; Form1: TForm1; List: TStringList; TForm1.Button1Click(Sender: TObject); List.Clear; List.Add(); ShowMessage(List.Text); ; List := TStringList.Create; List.Free; .
五、使用动态数组而不是 TList、TStringList 等:
TForm1.Button1Click(Sender: TObject); arr: Array ; i: Integer; s: ; i := SetLength(arr, Length(arr)+); arr[High(arr)] := StringOfChar(Char(i+), ); ; s arr ShowMessage(s); ; TForm1.Button2Click(Sender: TObject); arr: TArray<>; i: Integer; s: ; i := SetLength(arr, Length(arr)+); arr[High(arr)] := StringOfChar(Char(i+), ); ; s arr ShowMessage(s); ;
六、使用 TObjectList 而不是 TList:
System.Contnrs; TForm1.Button1Click(Sender: TObject); list: TObjectList; i: Integer; btn: TButton; list := TObjectList.Create; i := btn := TButton.Create(Self); btn Caption := Format(, [i+]); Parent := Self; Top := Height * i; Left := Width * i ; ; list.Add(btn); ; ShowMessage(); list.Free; ; TForm1.Button2Click(Sender: TObject); list: TList; i: Integer; btn: TButton; list := TList.Create; i := btn := TButton.Create(Self); btn Caption := Format(, [i+]); Parent := Self; Top := Height * i; Left := Width * i ; ; list.Add(btn); ; ShowMessage(); list.Free; ;
七、使用 TObjectList<T> 而不是 TList<T>:
System.Generics.Collections; TForm1.Button1Click(Sender: TObject); list: TObjectList<TButton>; i: Integer; btn: TButton; list := TObjectList<TButton>.Create; i := btn := TButton.Create(Self); btn Caption := Format(, [i+]); Parent := Self; Top := Height * i; Left := Width * i ; ; list.Add(btn); ; ShowMessage(); list.Free; ; TForm1.Button2Click(Sender: TObject); list: TList<TButton>; i: Integer; btn: TButton; list := TList<TButton>.Create; i := btn := TButton.Create(Self); btn Caption := Format(, [i+]); Parent := Self; Top := Height * i; Left := Width * i ; ; list.Add(btn); ; ShowMessage(); list.Free; ;
八、使用结构体而不是结构体指针:
Area(rect: PRect): Integer; Result := rect.Width * rect.Height; ; TForm1.Button1Click(Sender: TObject); P: PRect; New(P); P^ := Rect(, , , ); ShowMessage(IntToStr(Area(P))); Dispose(P); ; TForm1.Button2Click(Sender: TObject); R: TRect; R := Rect(, , , ); ShowMessage(IntToStr(Area(@R))); ;
转载于:https://blog.51cto.com/rosehacker/753865