Announcement

Collapse
No announcement yet.

Felder dynamisch erstellen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Felder dynamisch erstellen

    Hallo<br>
    ich lese aus einer Datei Strings aus, zu denen ich dann in einer Paradox-Tabelle Spalten anlege. Um die Werte bearbeiten zu können, brauche ich TDBEdit-Felder (ähnlich wie TEdit).
    Jetzt möchte ich beim Importieren bzw. anlegen der Spalten für jede Spalte ein eigenes TDBEdit-Feld anlegen und Attribute festlegen, Schrift usw.<br>
    Ich möchte außerdem, dass diese Felder gespeichert werden bzw. bei jeden Programmaufruf wieder erscheinen und erst beim nächsten Mal importieren der Daten neu angelegt werden.

    Vielen Dank
    Christian

  • #2
    Hallo Christian,

    so ganz klar ist mir nicht was Du willst. Felder sollen bei jedem Programmstart erscheinen aber erst beim Importieren wieder angelegt werden?????
    Ich habe das so verstanden:

    TDBEdit *MyDbEdit;

    Jetzt gehst Du deine Datei durch und legst die Felder an.
    while( !Datei->eof ) {
    MyDbEdit = new TDbEdit(this);
    MyDbEdit->Parent = this; // Wichtig sonst siehst Du das Feld nicht auf dem Formular
    // Weitere Eigenschaft zuordnen
    MyDbEdit->Left =
    MyDbEdit->Top =
    // usw.
    }

    Jetzt hast Du die felder auf dem Formular. Beim Beenden des Progs
    muß der Speicher natürlich wieder freigegeben werden. Du kannst die entweder ne Klasse basteln (verkettete Liste) mit Namen und Zeiger
    auf die einzelnen Objekte, oder aber die die Eigenschaft Components[]
    des Formulars nutzen.

    int skip=0;
    int Komponenten = this->ComponentCount;
    for( int i=0; i<Komponenten; i++ ) {
    if( this->Components[skip]->ClassNameIs("TDbEdit") ) {
    delete this->Components[skip];
    } else {
    skip++;
    }
    }

    Hoffe ich konnte dir helfen

    Manfre

    Comment


    • #3
      Hi Manfred<br>
      ja das konnest du, aber nur beim ersten Teil <br>
      Also, ich versuchs nochmal besser(!) zu erklären:<bR>
      Ich habe eine Datenbank mit 5 Spalten<br>
      Die Felder werden - dynamisch - zu jeder Spalte eins erstellt<br>
      Dieser Vorgang - also das erstellen - soll nur bei ca. jedem 20 Programmstart geschehen, und damit ich die Felder nicht bei JEDEM Start wieder neu erstellen muss, dachte ich, man könnte die irgendwie speichern....<br>
      Ich hoffe, das war verständlicher, ansonsten probiers ich nochmal...<br><br>
      Vielen Dank schon mal jetzt
      Christia

      Comment


      • #4
        Moin Christian,

        wieso willst Du die felder nur bei jedem 20. Start neu erzeugen?
        Du mußt dir natürlich sämtliche Eigenschaft aller Felder in der Textdatei sichern, damit diese dann z.B. auch wieder an der Position im Formular auftauchen an der sie waren.
        Das irgendwie Speichern tust Du ja genau dann, wenn Du die Eigenschaften in die Textdatei packst.
        Wenn nun natürlich eine Spalte in der datenbank hinzukommt, könntest Du dies durch einen Eintrag in der Textdatei realisieren.
        Oder aber Du schnappst dir die Tabelle und generierst die visuellen Komponenten anhand der Feldliste .... dann mußt Du dir natürlich was bezüglich der Positioniernug der Komponenten einfallen lassen.

        Andere Idee: Schreib dir die ganzen felder einschließlich Eigenschaften in einer Tabelle(sagen wir layout) der Datenbank , erzeuge die felder dynamisch bei jedem Aufruf anhand dieser Tabelle. Prüfe, ob ein Datenbankfeld hinzugekommen ist und aktualisiere die Tabelle layout - bleibt die frage wie du die neuen visuellen Elemente positionierst.

        Manfre

        Comment


        • #5
          Hi<br>
          das mit dem 20. mal war nur um die Sache einfacher zu erklären. Tatsächlich habe ich einen "Import-Assistenten", der vielleicht alle 3 Monate aufgerufen wird. Dieser Assistent legt eine neue Tabelle mit neuen Feldern an... und zu diesen Feldern sollen die TDBEdits neu gestaltet werden. Deshalb das 20.... mit der DB is ne gute Idee...<br>

          VIELEN DANK
          Christia

          Comment

          Working...
          X