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