Kezdőoldal » Számítástechnika » Programozás » Delphi saját típus Hogyan...

Delphi saját típus Hogyan tegyek bele pl. Edit-et?

Figyelt kérdés

Létrehoztam egy saját típust.

TSor = Class

Nev: TEdit;

Info: TLabel;

Gomb: TButton;

ID: integer;

end;


var

Tagok: array[1..10] of TSor;

TagSzam: integer = 0;


És mikor rákattintok "Az új tag" gombra akkor szeretném, ha megjelenne egy új sor ami tartalmazza, a saját Edit, Label, Button komponenseit.


Tagok[TagSzam] := TSor.Create;


Ez még megy, de ennél már hibát ír ki:


Tagok[TagSzam].Nev.Top := 50 + ID * 20;


Eléje gondolom kéne egy Tagok[TagSzam].Nev.Create;

De a Create vár egy paramétert, oda mi kéne??



2015. dec. 29. 12:19
 1/4 ejbenjaro ***** válasza:

Esetleg így: Tagok[TagSzam].Nev.Create(Self);?


Anno csináltam egy ilyen Strigulázó programot Lazarussal, de én ott egy rekord típust hoztam létre egy GroupBoxxal, illetve abba került bele két Button meg egy Edit.

Itt a kódja, ha érdekel: [link]

2015. dec. 29. 18:23
Hasznos számodra ez a válasz?
 2/4 A kérdező kommentje:

Időközben én is megtaláltam ezt a Self paramétert, de ígysem működik. Azt írja, hogy Access violation at...

Majd áttanulmányozom a tiedet, hátha az segít.

Kösz szépen!

2015. dec. 30. 16:41
 3/4 SimkoL ***** válasza:

unit Unit1;


interface


uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;


type

TSor = class(TObject)

Nev: TEdit;

Info: TLabel;

Gomb: TButton;

ID: integer;

constructor Create; virtual;

end;



type

TForm1 = class(TForm)

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;


var

Form1: TForm1;

Tagok: array[1..10] of TSor;

TagSzam: integer = 0;


implementation


{$R *.dfm}


constructor TSor.Create;

begin

Nev := TEdit.Create(nil);

Nev.Parent := Form1;

Info := TLabel.Create(nil);

Info.Parent := Form1;

Gomb := TButton.Create(nil);

Gomb.Parent := Form1;

ID := 0;

end;


procedure TForm1.Button1Click(Sender: TObject);

begin

if Tagszam < 10 then

begin

Inc(TagSzam);

Tagok[TagSzam] := TSor.Create;

Tagok[TagSzam].ID := TagSzam;

Tagok[TagSzam].Nev.Top := 50 + Tagok[TagSzam].ID * 30 ;

Tagok[TagSzam].Nev.Left := 100;

Tagok[TagSzam].Nev.Visible := true;

Tagok[TagSzam].Nev.Name := 'edtTagok' + IntToStr(Tagok[TagSzam].ID);

Tagok[TagSzam].Nev.Text := Tagok[TagSzam].Nev.Name;

Tagok[TagSzam].Gomb.Top := 50 + Tagok[TagSzam].ID * 30 ;

Tagok[TagSzam].Gomb.Left := 250;

Tagok[TagSzam].Gomb.Visible := true;

Tagok[TagSzam].Gomb.Name := 'btnTagok' + IntToStr(Tagok[TagSzam].ID);

Tagok[TagSzam].Gomb.Caption := Tagok[TagSzam].Gomb.Name;

Tagok[TagSzam].Info.Top := 50 + Tagok[TagSzam].ID * 30 ;

Tagok[TagSzam].Info.Left := 350;

Tagok[TagSzam].Info.Visible := true;

Tagok[TagSzam].Info.Name := 'lblTagok' + IntToStr(Tagok[TagSzam].ID);

Tagok[TagSzam].Info.Caption := Tagok[TagSzam].Info.Name;

end;

end;


end.

2015. dec. 30. 17:51
Hasznos számodra ez a válasz?
 4/4 SimkoL ***** válasza:

Ha nem a Form1-re akarod helyezni őket akkor:


type

TSor = class(TObject)

Nev: TEdit;

Info: TLabel;

Gomb: TButton;

ID: integer;

constructor Create(myParent : TWincontrol); virtual;

end;


...


constructor TSor.Create(myParent : TWincontrol);

begin

Nev := TEdit.Create(nil);

Nev.Parent := myParent;

Info := TLabel.Create(nil);

Info.Parent := myParent;

Gomb := TButton.Create(nil);

Gomb.Parent := myParent;

ID := 0;

end;


....


Tagok[TagSzam] := TSor.Create(Form1.Panel1);

2015. dec. 30. 18:39
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!