Einzelnen Beitrag anzeigen

Joerginger

Registriert seit: 22. Jan 2009
Ort: Wien
38 Beiträge
 
Delphi 7 Enterprise
 
#1

Array aus TControl / TComponent, noch einmal...

  Alt 16. Mär 2011, 00:44
Delphi-Version: 7
Hallo liebe Delphianer,

bis jetzt hab' ich in diesem Forum sooo viele schöne Schnipsel - und auch großartige Hilfe - gefunden, aber jetzt steh' ich mit allem daneben. Vorgeschichte: Ich möchte einen Maskeneditor schreiben - und auch wenn mein Code seltsam aussieht, theoretisch kann ich ja schon ein bisschen programmieren

Zuallererst gibt's eine globale Variable
Code:
var
  arCtl: array of TControl;
und an beliebiger Stelle (derzeit zum testen in einer Listbox, später mal in einem Datenbanksatz oder WhatSoEver) stehen einzelne Sätze, die eben einzelne Controls/Komponenten abbilden sollten, mit deren Eigenschaften, wie z.B.
- Was ist es für ein Control (B=Button, E=Editfeld, L=Label, R=Radiobutton etc.)
- Die Bezeichnung auf der Maske (also quasi den Inhalt der Eigenschaft Caption)
- weiters (später) Position auf der Maske, Grösse, MaxLength, UpperCase etc...

Diese Werte lese ich sequentiell ein, interpretiere mir den Inhalt in Variablen und möchte dann daraus die Elemente darstellen, aber wie's bei Elementen so ist: es scheitert bereits am elementaren
Code:
begin
  iMaxA:=0;                                              //ARRAY HAT NULL SÄTZE
  SetLength(arCtl,0);                                           //ARRAY KNICKEN
  iMaxL:=Form1.lstCtl.Count-1;                             //ANZAHL SÄTZE LESEN
  for i:=0 to iMaxL do                //ALLE ZEILEN DURCHGEHEN, EGAL OB LISTBOX
  begin
    sI:=Form1.lstCtl.Items[i];           //INFO HOLEN, WIE DAS CONTROL AUSSIEHT
    cW:=sI[1];                               //CHAR: WAS IST ES FÜR EIN CONTROL
    sL:=Trim(Copy(sI,2,length(sI)-1));                        //LABEL FESTLEGEN
    Case cW of                                           //CASE ÜBER CONTROLTYP
    'E': //EDIT FELD
      begin
        if sL<>'' then                                   //WENN LABEL ANGEGEBEN
        begin
          iMaxA:=High(arCtl)+1;                          //ARRAY UM 1 ERWEITERN
          SetLength(arCtl,iMaxA+1);             //KANN MAN SICHER SCHÖNER LÖSEN
          arCtl[iMaxA]:=TLabel.Create(Self);                //DAS LABEL BASTELN
          arCtl[iMaxA].Parent:=Form1;                      //ALS KIND VON FORM1

          arCtl[iMaxA].Caption:=sL;       //<- GENAU HIER HAUT'S DAS SYSTEM AUF

          arCtl[iMaxA].Left:=20;
          arCtl[iMaxA].Top:=20+((arCtl[iMaxA].Height+10)*iMaxA);
        end;
        iMaxA:=High(arCtl)+1;                          //ARRAY UM 1 ERWEITERN
        SetLength(arCtl,iMaxA+1);
        arCtl[iMaxA]:=TEdit.Create(Self);
        arCtl[iMaxA].Parent:=Form1;
        arCtl[iMaxA].Left:=20;
        arCtl[iMaxA].Top:=20+((arCtl[iMaxA].Height+10)*i);
      end;
danach kommen die weiteren Controls in den einzelnen Case-Segmenten... Egal welche Eigenschaften ich übergeben möchte, es geht "Zack" und ich bekomme den Fehler
Undefinierter Bezeichner:Caption
Ich bin sicher dass ich da nur eine Kleinigkeit übersehe, aber ich find's heute einfach nimmer

Vielleicht hat's einer von Euch auf die schnelle? Bitte Danke! Und bevor ich mit dem Projekt all zu sehr in die Irre laufe bitte ich um Hinweise wenn jetzt schon was ganz arg verkehrt ist.

greetz, Joerginger
  Mit Zitat antworten Zitat