dynamiczne tworzenie (cd.archiwum)

0
unit Unit1;
interface
uses Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    procedure TwojaProcedura(Sender: TObject);
  public
  end;
var Form1: TForm1;  NewForm:Tform;  button1:TButton;
implementation
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  NewForm := TForm.Create(Application);
  Newform.Show; Newform.Visible:=true;
  Newform.Width:=40; Newform.Height:=70; Newform.Left:=10; Newform.Top:=10;
 // FreeAndNil(NewForm);
end;
procedure TFORM1.TwojaProcedura(Sender: TObject);
begin
ShowMessage('Tralala');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
button1:=tbutton.Create(self);
Button1.OnClick := TwojaProcedura(button2);
end;
end.

podaje mi blad:"incomptibe types: TNotifyEvent and procedure untyped pointer or untyped prameter"

chchailbym aby jeszce ten button1 byl tworzony na stworzonej przeze mnie formie dynamicznie...

0
Button1.OnClick := TwojaProcedura;

A w ogóle to pisz dokładniej gdzie jest błąd - ciężko tu cokolwiek znaleźć + tag Delphi na przyszłość.

0

robie sobie dynamicznie formy i powiedzmy zrobilem klika potem niktore zamknelem i jest teraz mozliwosc sprawdzenia ile ich jest?

drugie pytanie to jak robie na dynamicznej tablicy form array of Tform;

to zanim stworze forme msuze zmeinic wielkosc tablicy...i jak 2 razy klikne "stworz" to blad w pamieci...

var  form:array of Tform;  
procedure stworzforme(l:integer);
begin
  SetLength(Form,l);
  Form[l] := TForm.Create(Application);
  with form[l] do begin end 
end;
0

Zrób sobie że przy każdym tworzeniu dodajesz 1 do zmiennej a przy zamykaniu odejmujesz... i tyle

0

chciałem zrobic teraz, ze jesli foram dynamicznie stworzona jest to potem czysci z pamieci wiec robie:
[wczesniej robilem < code >< / code >]

unit Unit1;
interface
uses Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,
  ExtCtrls, TeeProcs, TeEngine, Chart;
type
  TForm1 = class(TForm)
    Button3: TButton;
    Button1: TButton;
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    procedure winclose(Sender:TObject;var p:integer);
  public
  end;
var Form1: TForm1;  forms:array of Tform;  button1:TButton;   x:integer;
implementation
{$R *.dfm}
procedure Tform1.winclose;
begin
 FreeAndNil(Forms[p]);
end;

procedure stworzforme(l:integer);
begin
  SetLength(Forms,l+1);
  Forms[l] := TForm.Create(Application);
  with forms[l] do begin
  Left := 185;
  Top := 97;
  Width := 870;
  Height := 640;
  Color := clBtnFace;
  Font.Charset := DEFAULT_CHARSET;
  Font.Style := [];
  FormStyle := fsMDIChild;
  Show;
  Visible:=true;
  forms[l].OnClose:=formclose;
end;end;
end.

procedure TForm1.Button3Click(Sender: TObject);
begin
inc(x);
stworzforme(x);
end;

jak to uporzadkowac bo mase tu bledow :</delphi>

0
unit Unit1;
interface
uses Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,
  ExtCtrls, TeeProcs, TeEngine, Chart;
type
  TForm1 = class(TForm)
    Button3: TButton;
    Button1: TButton;
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    procedure winclose(Sender:TObject;var p:integer);
  public
  end;
var 
  Form1: TForm1;
  forms:array of Tform;
  button1:TButton;
   x:integer=0;

implementation
{$R *.dfm}

procedure Tform1.winclose;
begin
  FreeAndNil(Forms[p]);
end;

procedure stworzforme(l:integer);
begin
  inc(x);
  SetLength(Forms,l+1);
  Forms[l] := TForm.Create(Application);
  with forms[l] do 
  begin
    Left:=185;
    Top:=97;
    Width:=870;
    Height:=640;
    Color:=clBtnFace;
    Font.Charset:=DEFAULT_CHARSET;
    Font.Style:=[]; 
    FormStyle:=fsMDIChild;
    Show;
    Visible:=true;
    forms[l].OnClose:=formclose;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  stworzforme(x);
end;

end.

Po pierwsze: END. (z kropką) to koniec programu...
A nie wiem czy w MdiChild trzeba dawać parent'a.
Pozdr.

0

Hmm jakiś dziwny ten twój kodzik .. tu masz przykład:

procedure TForm1.FormBuild(); // licznik zbedny
begin
  SetLength(MyForms, High(MyForms) + 2);
  MyForms[High(MyForms)] := TForm.Create(Application);
  with MyForms[High(MyForms)] do
  begin
    // Twoje ustawienia
  end;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1