Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Zensurenübersicht mit automatisches hinzufügen von formu

  Alt 19. Mär 2006, 17:23
Hi,
was meinst du denn mit
Zitat von cissi88:
... neue felder entstehen die den quelltext beeinhalten
Also was für Quelltext sollen die denn beinhalten?
Was du brauchst ist das Erzeugen von Controls (Klassen die Sichtbar sind) zur Laufzeit. Das ist an sich auch ganz einfach, es besteht immer aus den Schritten :
  • Variable zum Zwischenspeichern deklarieren (optional, man kann auch annonym arbeiten)
  • Neue Instanz erstellen
  • Eigenschaften anpassen
  • Auf einem Control einfügen
  • ggf. (wenn kein Owner angegeben) um Speicherfreigabe kümmern

In Delphi sähe dass dann ungefähr so aus (kann sehr leicht auf andere Beispiele übertragen werden)
Delphi-Quellcode:
procedure insertDummyControl(const Destination : TControl);
var buffer : TLabel;
begin
  buffer := TLabel.Create(Destination); // Erzeugt neue Instanz und setzt Destination als Owner
  buffer.Caption := 'Bla Blubb'; // beliebige Eigenschaften anpassen
  ....
  Destination.InsertControl(buffer); // Damit wird buffer auf Destination platziert / angezeigt
end;
Destination ist hier sehr abstrakt ein TControl, damit kannst du hier also jede beliebige Sichtbare Komponente verwenden (z.B. ein Form, ein Panel,...). Kannst natürlich auch direkt etwas wie Form1.insertControl(...); aufrufen.
Da du sicherlich alle erzeugten Instanzen kennen möchtest, solltest du diese einfach in einer Liste speichern. Delphi bietet dir in der Unit Contnrs eine TControlList, die speichert eine beliebige Anzahl von TControls. Hiermit kannst du dann auch etwas anonym arbeiten:

Delphi-Quellcode:
var controlList : TControlList; // möglichst im private Teil deiner Klasse / global speichern
...
  controlList.Add(TLabel.Create(Destination));
  // zugriff auf das letzte eingefügte Element
  // Zugriffe erfolgen immer auf eine TControl => muss gecastet werden
  with TLabel(controlList.Items[controlList.Count - 1] do
    begin
      // Eigenschaften setzen
      Caption := 'Bla Blubb';
      // besser vor dem casting auf Typsicherheit prüfen
      // if controlList.Items[controlList.Count - 1] is TLabel then...
    end;
Gruß Der Unwissende
  Mit Zitat antworten Zitat