Создание и уничтожение объекта

Cancion2able

Всем привет! Давно известная проблема "Statement expected but 'PROCEDURE' found" постигла и меня. На Delphi сижу совсем недавно, поэтому прошу помочь моей неопытности. Буду благодарен
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Panel1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  List:TList;
  AObj:TShape;
 
  implementation
 
  {$R *.dfm}
 
procedure TForm1.Panel1Click(Sender: TObject);
var AObj: TShape;
begin
AObj:=TShape.Create(Panel1);
AObj.Parent:=Panel1;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
List:=TList.Create;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var AObj:TShape; delta:word;
begin
AObj:=TShape.Create(Panel1); 
AObj.Parent:=Panel1; 
AObj.Shape:=stCircle;
delta:=10+random(50); 
AObj.Width:=delta; 
AObj.Height:=delta;
AObj.Left:=random(Panel1.Width-AObj.Width); 
AObj.Top:=random(Panel1.Height-AObj.Height); 
AObj.Brush.Color:=RGB(random(256),random(256),random(256));
List.Add(AObj); 
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var Temp: TShape;
begin
with List do 
if Count>0 then begin
Temp:=Items[Count-1]; 
Temp.Free; 
Delete(Count-1);
end;
 
procedure TForm1.Button3Click(Sender: TObject); //Ошибка возникает ЗДЕСЬ//
var Temp: TShape;
begin
with List do
while Count>0 do begin
Temp:=Items[Count-1];
Temp.Free; 
Delete(Count-1); 
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Button3.Click;
List.Free;
end;
 
initialization
  randomize;
 
end.
6 ответов

Cancion2able

Всем привет! Давно известная проблема "Statement expected but 'PROCEDURE' found" постигла и меня. На Delphi сижу совсем недавно, поэтому прошу помочь моей неопытности. Буду благодарен
Кликните здесь для просмотра всего текста
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;type TForm1 = class(TForm) Panel1: TPanel; Button1: TButton; Button2: TButton; Button3: TButton; procedure Panel1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; List:TList; AObj:TShape;implementation{$R *.dfm}procedure TForm1.Panel1Click(Sender: TObject); var AObj: TShape; begin AObj:=TShape.Create(Panel1); AObj.Parent:=Panel1; end;procedure TForm1.FormCreate(Sender: TObject); begin List:=TList.Create; end;procedure TForm1.Button1Click(Sender: TObject); var AObj:TShape; delta:word; begin AObj:=TShape.Create(Panel1); AObj.Parent:=Panel1; AObj.Shape:=stCircle; delta:=10+random(50); AObj.Width:=delta; AObj.Height:=delta; AObj.Left:=random(Panel1.Width-AObj.Width); AObj.Top:=random(Panel1.Height-AObj.Height); AObj.Brush.Color:=RGB(random(256),random(256),random(256)); List.Add(AObj); end;procedure TForm1.Button2Click(Sender: TObject); var Temp: TShape; begin with List do if Count>0 then begin Temp:=Items[Count-1]; Temp.Free; Delete(Count-1); end;procedure TForm1.Button3Click(Sender: TObject); //Ошибка возникает ЗДЕСЬ// var Temp: TShape; begin with List do while Count>0 do begin Temp:=Items[Count-1]; Temp.Free; Delete(Count-1); end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Button3.Click; List.Free; end;initialization randomize;end.
проект в студию


Cancion2able

Тут у тебя енда не хватает:
procedure TForm1.Button3Click(Sender: TObject); //Ошибка возникает ЗДЕСЬ//
 var Temp: TShape;
 begin
 with List do
 while Count>0 do begin
 Temp:=Items[Count-1];
 Temp.Free; 
 Delete(Count-1); 
 end;
end;
А что это за хрень я вообще затрудняюсь ответить:
end;
 
 initialization
 randomize;
 
 end.


Cancion2able

Тут у тебя енда не хватает:
procedure TForm1.Button3Click(Sender: TObject); //Ошибка возникает ЗДЕСЬ//
 var Temp: TShape;
 begin
 with List do
 while Count>0 do begin
 Temp:=Items[Count-1];
 Temp.Free; 
 Delete(Count-1); 
 end;
end;
Добавлял уже, та же ошибка остается.
А что это за хрень я вообще затрудняюсь ответить:
end;
 
 initialization
 randomize;
 
 end.
Это чтоб фигурки клепались рандомно на панели. По крайней мере, по моей версии.


Cancion2able

Добавлял уже, та же ошибка остается.
Я недоглядел. Там еще один енд нужен.
Это чтоб фигурки клепались рандомно на панели. По крайней мере, по моей версии.
В Дельфи так не катит. Сделай так:
procedure TForm1.FormCreate(Sender: TObject);
 begin
 List:=TList.Create;
 randomize;
 end;
или там, где рандом используешь:
procedure TForm1.Button1Click(Sender: TObject);
 var AObj:TShape; delta:word;
 begin
   randomize;
   ...


Cancion2able

А что это за хрень я вообще затрудняюсь ответить:
initialization
 randomize;
end.
Можно так делать.А что бы end'ы не терялить надо оформлять код как положено, с отступами.
unit Unit1;
 
interface
 
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls;
 
type
   TForm1 = class(TForm)
     Panel1: TPanel;
     Button1: TButton;
     Button2: TButton;
     Button3: TButton;
     procedure Panel1Click(Sender: TObject);
     procedure FormCreate(Sender: TObject);
     procedure Button1Click(Sender: TObject);
     procedure Button2Click(Sender: TObject);
     procedure FormClose(Sender: TObject; var Action: TCloseAction);
     procedure Button3Click(Sender: TObject);
   private
   { Private declarations }
   public
   { Public declarations }
   end;
 
var
   Form1: TForm1;
   List:TList;
   AObj:TShape;
 
 implementation
 
 {$R *.dfm}
 
 procedure TForm1.Panel1Click(Sender: TObject);
 var
   AObj: TShape;
 begin
   AObj:=TShape.Create(Panel1);
   AObj.Parent:=Panel1;
 end;
 
 procedure TForm1.FormCreate(Sender: TObject);
 begin
   List:=TList.Create;
 end;
 
 procedure TForm1.Button1Click(Sender: TObject);
 var
   AObj:TShape; delta:word;
 begin
   AObj:=TShape.Create(Panel1);
   AObj.Parent:=Panel1;
   AObj.Shape:=stCircle;
   delta:=10+random(50);
   AObj.Width:=delta;
   AObj.Height:=delta;
   AObj.Left:=random(Panel1.Width-AObj.Width);
   AObj.Top:=random(Panel1.Height-AObj.Height);
   AObj.Brush.Color:=RGB(random(256),random(256),random(256));
   List.Add(AObj);
 end;
 
 procedure TForm1.Button2Click(Sender: TObject);
 var
   Temp: TShape;
 begin
   with List do
     if Count>0 then begin
       Temp:=Items[Count-1];
       Temp.Free;
       Delete(Count-1);
     end;
 end;
 
 procedure TForm1.Button3Click(Sender: TObject); //Ошибка возникает ЗДЕСЬ//
 var
   Temp: TShape;
 begin
   with List do
     while Count>0 do begin
       Temp:=Items[Count-1];
       Temp.Free;
       Delete(Count-1);
     end;
 end;
 
 procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
 begin
   Button3.Click;
   List.Free;
 end;
 
 initialization
 randomize;
 
 end.


Cancion2able

gorfil, DaMortum, Спасибо большое!