AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Objekte während der Programmlaufzeit erzeugen?
Thema durchsuchen
Ansicht
Themen-Optionen

Objekte während der Programmlaufzeit erzeugen?

Ein Thema von cetinbiryoldayim · begonnen am 18. Mai 2008 · letzter Beitrag vom 18. Mai 2008
Antwort Antwort
cetinbiryoldayim

Registriert seit: 6. Mai 2008
33 Beiträge
 
#1

Objekte während der Programmlaufzeit erzeugen?

  Alt 18. Mai 2008, 17:11
Guten Abend meine Herren/Damen

Ich hätte heute wieder einmal eine Frage an euch wenns recht ist.
Undzwar möchte ich Objekte von festgelegten Klassen (wie z.B. TButton, TImage, usw.) während der Laufzeit erzeugen und diesen bei der Erzeugung mit durch die Übergabe Parametern Eigenschaften zuteielen.

Ich habe schonmal bisschen probiert, doch lieg ich da glaube ich etwas falsch, denn es passiert nichts wenn ich auf Button1 klicke.

Delphi-Quellcode:
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);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Button2 := TButton.Create(Form1);
  Button2.Name := 'Button2';
  Button2.Enabled := true;
  Button2.Top := 50;
  Button2.Left := 50;
  Button2.Caption := 'Button2';
end;

end.
grüßchen
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.096 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Objekte während der Programmlaufzeit erzeugen?

  Alt 18. Mai 2008, 17:12
Hi,

Button2.Parent := self; Der Parent ist das, wo der Button drauf ist (kann z. B. auch ein Panel sein), du must ihn festlegen, sonst ist deine Komponente nirgends drauf.

Mfg
FAlter
Felix Alter
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#3

Re: Objekte während der Programmlaufzeit erzeugen?

  Alt 18. Mai 2008, 17:13
Hallo, was soll denn passieren, wenn du auf den Button klickst?
Du musst dem Button noch ein OnClick Ereignis zuweisen.
Thomas
  Mit Zitat antworten Zitat
cetinbiryoldayim

Registriert seit: 6. Mai 2008
33 Beiträge
 
#4

Re: Objekte während der Programmlaufzeit erzeugen?

  Alt 18. Mai 2008, 17:30
@toms
würde es so gehen?

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  showmessage('Button2.Clicked');
end;

@FAlter
Danke, so funktioniert es.


Aber ich hätte noch eine Frage wenns geht:
Beim Komplementieren wird folgender Fehler gemeldet: "Feld Form1.Button2 besitzt keine entsprechende Komponente. Soll die Deklaration entfernt werden?" --> Ja/Nein/Abbrechen

Wenn ich es entfernen lasse erscheinen ein haufen Fehler, wenn ich Nein klicke so läuft es aber der Fehler besteht weiterhin...

Woran liegt das?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: Objekte während der Programmlaufzeit erzeugen?

  Alt 18. Mai 2008, 17:33
Button2.OnClick := Button2Click; der meckert immer rum, wenn solche Prozeduren nirgends zugewiesen sind ... sei's im QuellCode, oder im OI.

und du hast nur die Ereignisprozedur erstellt, aber sie nicht zugewiesen.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#6

Re: Objekte während der Programmlaufzeit erzeugen?

  Alt 18. Mai 2008, 17:34
Zitat von cetinbiryoldayim:
@toms
würde es so gehen?
Nein, nicht so.

Zitat von toms:
Du musst dem Button noch ein OnClick Ereignis zuweisen.
Button2.OnClick := DeinOnClickEreignis
Thomas
  Mit Zitat antworten Zitat
cetinbiryoldayim

Registriert seit: 6. Mai 2008
33 Beiträge
 
#7

Re: Objekte während der Programmlaufzeit erzeugen?

  Alt 18. Mai 2008, 17:49
Sorry, aber habe es irgendwie nicht hingekriegt..
Meldet jetzt:
"Erste Zufalls-Exception bei $7C812A5B. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 00455846 in Modul 'Project1.exe'. Schreiben von Adresse 00000124'. Prozess Project1.exe (2936)"

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Button2 := TButton.Create(Form1);
  Button2.Parent := self;
  Button2.Name := 'Button2';
  Button2.Enabled := true;
  Button2.Top := 50;
  Button2.Left := 50;
  Button2.Caption := 'Button2';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  showmessage('Button2.Clicked');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Button2.OnClick := Button2Click;
end;
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#8

Re: Objekte während der Programmlaufzeit erzeugen?

  Alt 18. Mai 2008, 17:51
Wenn du das Ereignis im OnCreate zuweist, existiert der Button noch nicht.
Darum gibt es eine AV.
Thomas
  Mit Zitat antworten Zitat
cetinbiryoldayim

Registriert seit: 6. Mai 2008
33 Beiträge
 
#9

Re: Objekte während der Programmlaufzeit erzeugen?

  Alt 18. Mai 2008, 17:56
Alles klar jetzt gehts

danke euch allen !!
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Objekte während der Programmlaufzeit erzeugen?

  Alt 18. Mai 2008, 18:01
Könntest du bitte die Überschrift ändern nach:
Controls während der Programmlaufzeit erzeugen
denn Controls sind zwar auch Objekte, aber ganz spezielle Objekte:
Visuelle Steuerelemente ist die deutsche Bezeichnung dafür.

Ich habe deinen Code mal überarbeitet, denn du hast noch 2 Fehler drinne:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
    MyButton: TButton; // dynamisches Control gehört zur priv. Deklaration, da nicht von der IDE verwaltet
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  MyButton := TButton.Create(Form1);
  MyButton.Parent := self;
  MyButton.Name := 'MeinErsterButton';
  MyButton.Enabled := true;
  MyButton.Top := 50;
  MyButton.Left := 50;
  MyButton.Caption := 'Button2';
  MyButton.OnClick := Button2Click;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  showmessage((Sender as TControl).Name+'.Clicked');
end;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz