2013-04-27 2 views
0

Интересно, есть ли способ создать TShape программно управляет во время выполнения. Например, внедрить 100 форм, скрыть их и когда программа запустится, показать их, в течение некоторого времени можно создать 100 фигур (5 фигур, созданных за 5 секунд, 10 в 10 секунд, 15 за 15 секунд и т. Д.), ,Можно ли программно создавать элементы управления TShape?

+0

Что-то вроде: процедура TForm.Timer1Timer (Sender: TObject); начало С Tshape.Create (self) do начало Родитель: = self; Слева: = xxx end; конец; ?? – bummi

+0

Да, что-то вроде этого – user2296565

+0

GExperts и CnWizards имеют кнопку для преобразования любого визуального компонента в код. Возможно, такие вопросы «как сделать компоненты VCL кодом» все считаются дублирующими ... –

ответ

3

Вы должны не рисовать и анимировать с помощью элементов управления. Вместо этого вы должны рисовать вручную, используя простой GDI или какой-либо другой API. Например, см. this example или this example from one of your questions.

Во всяком случае, простой ответ на ваш вопрос: Поставьте TTimer на вашей форме и установите его Interval в 250, и написать:

unit Unit1; 

interface 

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

type 
    TForm1 = class(TForm) 
    Timer1: TTimer; 
    procedure Timer1Timer(Sender: TObject); 
    private 
    { Private declarations } 
    FShapes: array of TShape; 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

procedure TForm1.Timer1Timer(Sender: TObject); 
begin 
    SetLength(FShapes, Length(FShapes) + 1); // Ugly! 
    FShapes[high(FShapes)] := TShape.Create(Self); 
    FShapes[high(FShapes)].Parent := Self; 
    FShapes[high(FShapes)].Width := Random(100); 
    FShapes[high(FShapes)].Height := Random(100); 
    FShapes[high(FShapes)].Left := Random(Width - FShapes[high(FShapes)].Width); 
    FShapes[high(FShapes)].Top := Random(Height - FShapes[high(FShapes)].Height); 
    FShapes[high(FShapes)].Brush.Color := RGB(Random(255), Random(255), Random(255)); 
    FShapes[high(FShapes)].Shape := TShapeType(random(ord(high(TShapeType)))) 
end; 

end. 
+0

Хорошо, но что такое Fshapes? – user2296565

+0

@ user2296565: Это все. Это частное поле класса формы. –

+0

Хорошо спасибо, я получил его – user2296565

Смежные вопросы