AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Object dynamisch in einem Array erzeufen

Ein Thema von gangs-taas · begonnen am 11. Okt 2010 · letzter Beitrag vom 14. Okt 2010
Antwort Antwort
Seite 1 von 2  1 2      
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#1

AW: Object dynamisch in einem Array erzeufen

  Alt 13. Okt 2010, 14:53
Diese Arrays für Komponenten oder Controls sind doch Käse!
Sorry, aber ich muss immer wieder feststellen, dass viele die Kurve zu OOP nicht kriegen.

Dabei gibt es neben TObjectList auch die Klasse TComponent.
Damit kann man die Objekte sehr elegant und mit geringstem Aufwand verwalten.

Hier ein Beispiel wie man TComponent als Ersatz für das Array benützt:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    ButtonControlsErzeugen: TButton;
    ButtonControlsLoeschen: TButton;
    procedure FormCreate(Sender: TObject);
    procedure ButtonControlsErzeugenClick(Sender: TObject);
    procedure ButtonControlsLoeschenClick(Sender: TObject);
  private
    { Private-Deklarationen }
    FMyList : TComponent; // Ersatz für Array
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
   FMyList := TComponent.Create(Self);
   // Besitzer ist das Formular; FMyList braucht also nicht freigegeben werden
end;

procedure TForm1.ButtonControlsErzeugenClick(Sender: TObject);
var
   i : Integer;
   lbl : TLabel;
   edt : TEdit;
begin
   // dynamisch Komponenten erzeugen und in die Liste packen
   for i := 0 to 10 do
   begin
      lbl := TLabel.Create(FMyList {<==});
      lbl.Caption := Format('Label %d',[i]);
      lbl.Top := i * 15;
      lbl.Left := i * 9;
      lbl.Parent := Self;
   end;

   for i := 0 to 10 do
   begin
      edt := TEdit.Create(FMyList);
      edt.Text := Format('Edit %d',[i]);
      edt.Top := i * 15;
      edt.Left := 300 - i * 20;
      edt.Parent := Self;
   end;

end;

procedure TForm1.ButtonControlsLoeschenClick(Sender: TObject);
begin
   // alle Komponenten in der Liste zerstören
   FMyList.DestroyComponents;
end;
Auch die Typsicherheit lässt sich ganz einfach durch Ableiten von TComponent herstellen.
Bei Interesse kann ich das zeigen.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.659 Beiträge
 
Delphi 12 Athens
 
#2

AW: Object dynamisch in einem Array erzeufen

  Alt 13. Okt 2010, 15:26
Es gibt btw. auch noch TComponentList.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#3

AW: Object dynamisch in einem Array erzeufen

  Alt 13. Okt 2010, 17:42
Also ich finde Templates nicht schwierig.

Im Bezug auf mein voriges Posting:

- das erste Listing 1 zu 1 übernehmen
- der zweite Listing ist das Objekt das in der Liste gespeichert werden, ein ganz normales Objekt. Das hat nichts mit dem Template zu tun.
- das dritte Listing macht jetzt den Trick, dazu kann man einfach mein Listing nehmen und an den entscheidenden Stellen ändern. (Bei uses die Unit angeben und beim 1. type die Klasse angeben, ab dem 2. type KANN der Name der Liste geändert werden.)

Benutzung wie normales TList mit Typisierung.

Delphi-Quellcode:
  ObjectX := TObjectX.Create(...);
  ObjectXList := TObjectXList.Create(...);

  ObjectX.blabla := ....
  ...

  ObjectXList.Add(Object);

  ...
  ...

  ObjectXList.Items[i].blaba..... (und nicht TObjectX(ObjectXList.Items[i]).blaba) oder
  ObjectXList[i].blaba..... (und nicht TObjectX(ObjectXList[i]).blaba)
Hat den entscheidenden Vorteil, daß in der Liste immer Objekte vom gewünschten Typ sind und keine Fehler produziert wenn ein falsches typecasting (weil nicht nötig ) gemacht wird.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Object dynamisch in einem Array erzeufen

  Alt 14. Okt 2010, 00:16
Wo wird hier was der Liste hinzugefügt:
Delphi-Quellcode:
   // dynamisch Komponenten erzeugen und in die Liste packen
   for i := 0 to 10 do
   begin
      lbl := TLabel.Create(FMyList {<==});
      lbl.Caption := Format('Label %d',[i]);
      lbl.Top := i * 15;
      lbl.Left := i * 9;
      lbl.Parent := Self;
   end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
schlecki

Registriert seit: 11. Apr 2005
Ort: Darmstadt
148 Beiträge
 
Delphi XE2 Enterprise
 
#5

AW: Object dynamisch in einem Array erzeufen

  Alt 14. Okt 2010, 07:22
Wo wird hier was der Liste hinzugefügt:
Delphi-Quellcode:
   
      lbl := TLabel.Create(FMyList {<==});
hier

Gruß
schlecki

[edit]wurde aber auch schon in #14 erwähnt[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Object dynamisch in einem Array erzeufen

  Alt 14. Okt 2010, 11:31
Wird da nicht nur der Besitzer gesetzt?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Object dynamisch in einem Array erzeufen

  Alt 14. Okt 2010, 11:34
Das wurde doch schon in #15 angesprochen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

AW: Object dynamisch in einem Array erzeufen

  Alt 14. Okt 2010, 11:41
Das ist der Schlüsselsatz:
Zitat:
Dadurch das du FMylist als sogannten Owner (Besitzer) im Create angegeben hast,
landet das neue Label in FMyList.
Danke für den Hinweis.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
gangs-taas

Registriert seit: 24. Mär 2009
364 Beiträge
 
#9

AW: Object dynamisch in einem Array erzeufen

  Alt 13. Okt 2010, 17:00
soo ich hab dann jetzt noch einmal ein paar frage :

1) OOP beduetet doch, dass ich die einzellnen Procedures und Properties "fest in ein objekt binde, so dass sie nach außen gekapselt erscheinen und nicht manipuliert werden können" (sinngemäß nach wikipedia)
ich versteh nicht warum ihr meint, dass die Array nicht OOP seien. Schließlich verwaltet das Array doch nur OBJEKTE (=> es gibt objekte => oop)
Was ist daran jetzt so falsch ? oder was hab ich noch nicht verstanden ?

2) zu dem code von shmia :
du schreibst, du würdest die Komponenten erzeugen und in die Liste packen
aber ich sehe einfach nicht, warum deine mehtode jetzt unbedigt so viel einfacher oder so wäre ...


lg
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Object dynamisch in einem Array erzeufen

  Alt 13. Okt 2010, 17:37
OOP fängt bei Delphi mit TObject an und baut sich darauf auf
Keine Arrays (das war damals) sondern TList (kommt von TObject) oder von TList abgeleitet.

Ein Großer Vorteil von OOP ist die Vererbung und das geht bei Array nicht
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz