AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Komponenten-Array zur Laufzeit erstellen

Ein Thema von Schwedenbitter · begonnen am 10. Aug 2009 · letzter Beitrag vom 10. Aug 2009
Antwort Antwort
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#1

Komponenten-Array zur Laufzeit erstellen

  Alt 10. Aug 2009, 11:30
Hallo,

ich habe mich mit dem Thema schon beschäftigt und es ist für mich auch kein Problem, zur Laufzeit eine oder mehrere Komponenten auf einem Formular zu erstellen. Nur nützt mir das für mein geplantes Projekt nichts.

Ich habe das Problem, dass ich nicht nur eine, sonder im Grunde unendlich viele - so es der Nutzer wünscht und es der Speicher zulässt - Komponenten erstellen lassen möchte. Deshalb versuche ich es mit einem offenen Array. Verschlimmert wird das ganze dadurch, dass es jeweils Gruppen aus 4 TLabel und 1 TProgressBar sein sollen. Um das zu vereinfachen und nicht jedes TLabel einzeln anlegen zu müssen, versuchte ich das ganze zu kapseln.

Jetzt bekomme ich immer Zugriffsfehler. Bis hin dazu, dass sich das Programm ohne den Taskmanager nicht mehr beenden lässt.

Kann mir mal bitte jemand auf die Sprünge helfen, was ich falsche mache? Der Quellcode liegt bei.

Gruß, Alex
Angehängte Dateien
Dateityp: zip dssstat_p_559.zip (2,7 KB, 2x aufgerufen)
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.990 Beiträge
 
Delphi 12 Athens
 
#2

Re: Komponenten-Array zur Laufzeit erstellen

  Alt 10. Aug 2009, 13:31
Der Fehler liegt hier:

Delphi-Quellcode:
   
SetLength(Zeile,Anzahl);
Zeile[Anzahl]:=TZeile.Create(Form1);
besser so:

Delphi-Quellcode:
   
SetLength(Zeile,Anzahl);
Zeile[Anzahl-1]:=TZeile.Create(Form1);

Desgleichen hier:

Delphi-Quellcode:
      
Zeile[Anzahl-1].Free;
Dec(Anzahl);
Uwe Raabe
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Komponenten-Array zur Laufzeit erstellen

  Alt 10. Aug 2009, 14:28
Danke!
Habe es kapiert. Das offene Array beginnt seine Zählung bei Null. Steht bestimmt auch in der Hilfe

Ich habe aber dennoch 2 Fragen:
  • Warum bekomme ich eine Fehlermeldung, wenn ich mein Form (Programm) einfach schließe, wenn noch Zeilen da sind? Erst wenn ich vor dem Beenden die ganze Liste durchgehe und alles explizit aufräume, klappt es. Das an sich stört mich noch nicht. Aber:
  • Warum werden die Elemente nicht sichtbar? Ich habe doch - wenn auch etwas kompliziert - Form1 als Parent übergeben.

Gruß und Dank, Alex
Angehängte Dateien
Dateityp: zip dssstat_p_187.zip (2,9 KB, 2x aufgerufen)
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.990 Beiträge
 
Delphi 12 Athens
 
#4

Re: Komponenten-Array zur Laufzeit erstellen

  Alt 10. Aug 2009, 14:54
Zitat von Schwedenbitter:
Warum werden die Elemente nicht sichtbar? Ich habe doch - wenn auch etwas kompliziert - Form1 als Parent übergeben.
In TZeile.Create erzeugst du die Labels und weist deren Parent den aktuellen Inhalt von FZeichner zu - dieser ist aber zu diesem Zeitpunkt noch nil! Er wird erst nach dem TZeile.Create gesetzt. Folgende Änderung sollte helfen:

Delphi-Quellcode:
Procedure TZeile.SetZeichner(IsZeichner: TWinControl);
Begin
  FZeichner:=IsZeichner;
  ZUser.Parent := FZeichner;
  ZAnteil.Parent := FZeichner;
  ZProzent.Parent := FZeichner;
  ZDauer.Parent := FZeichner;
  ZAnzahl.Parent := FZeichner;
End;
Uwe Raabe
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Komponenten-Array zur Laufzeit erstellen

  Alt 10. Aug 2009, 15:53
Zitat von Uwe Raabe:
In TZeile.Create erzeugst du die Labels und weist deren Parent den aktuellen Inhalt von FZeichner zu - dieser ist aber zu diesem Zeitpunkt noch nil!
Ist auch wieder logisch.

Zitat von Uwe Raabe:
Delphi-Quellcode:
Procedure TZeile.SetZeichner(IsZeichner: TWinControl);
Begin
  FZeichner:=IsZeichner;
  ZUser.Parent := FZeichner;
  ZAnteil.Parent := FZeichner;
  ZProzent.Parent := FZeichner;
  ZDauer.Parent := FZeichner;
  ZAnzahl.Parent := FZeichner;
End;
Ich habe es probiert. Aber leider klappt es nicht. Ich habe es sogar in TurboDelphi und Delphi6 probiert. Bei letzterem wurden wenigstens Scrollbalken im compilierten Programm angezeigt, wenn man eine Gruppe angelegt hat. Löschte man sie wieder, war auch der Balken weg. Da weiß man dann wenigstens, dass dort etwas ist. Bei TurboDelphi nicht einmal das.

Gruß, Alex <- der ratlos ist
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Komponenten-Array zur Laufzeit erstellen

  Alt 10. Aug 2009, 16:04
Vielleicht hilft Dir das Video zu Composite Controls weiter.
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
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:29 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