Einzelnen Beitrag anzeigen

Codix32

Registriert seit: 23. Apr 2009
137 Beiträge
 
Delphi 2005 Personal
 
#1

Labels dynamisch erzeugen...merkwürdiges Verhalten

  Alt 19. Jan 2014, 12:23
Woran es wohl liegt?

Ich möchte ein Panel während der Laufzeit erzeugen und kriege die Merldung:
Delphi-Quellcode:
  public
    { Public-Deklarationen }
    procedure erzeugePanel(Lft,tp,wdth,hght:integer);
    procedure erzeugeLabels(MDatum:TDatetime);
    function LblFeiertag(LTag,LMonat:byte;LArray:THolidayTable):string;
//...
implementation
//...
procedure TForm1.erzeugePanel(Lft,tp,wdth,hght:integer);
begin
Panel1:=TPanel.Create(Form1);
Panel1.Parent:=Form1;
Panel1.visible:=true;
Panel1.Left:= Lft;
Panel1.top:=tp;
Panel1.width:=wdth;
Panel1.height:=hght;
end;
[Fehler] Unit1.pas(65): E2003 Undefinierter Bezeichner: 'Panel1'

Setze ich aber eine Komponente TPanel auf das Formular, dann wird auch die Prozedur 'erzeugePanel' ausgeführt.

Dasselbe bei einem Array aus Labeln:
Delphi-Quellcode:
{global}
var
  Labels: array of TLabel; // <- unbekannter Bezeichner ???
//....

procedure TForm1.erzeugeLabels(MDatum:TDatetime);
var
index, // Zeilenzähler
Reihe:integer; // Spaltenzähler
index2,FTmp:integer;
tg: byte;
begin
//...
tg:= TageInMonat(MDatum);
SetLength(Labels,tg+1);
FTmp:=TagNummer(MDatum);
index2 := 1; Reihe:=0;
  for index:=1 to tg do
   begin
     Labels[index]:=TLabel.Create(Panel1);
     If ((Labels[index].top+Labels[index].height)*index2 + 100) >= Panel1.ClientHeight then
       begin
        inc(Reihe); index2:=1;
         Labels[index].left:=60*Reihe;
         Labels[index].Top:= 1+(index2*20);
       end;
     Labels[index].Parent:= Panel1;
     Labels[index].Top := 1+(index2*20);
     Labels[index].Left := 60+(150*Reihe);
     Labels[index].Height:= 20;
     Labels[index].Width:=140;
     Labels[index].AutoSize := false;
     Labels[index].Font.Size := 10;
     Labels[index].name:='Labels'+inttostr(index);
     Labels[index].Caption:= inttostr(index)+' '+NamendesTages(ArrIdxalsTagDatum(index,MonthOf(Now),YearOf(Now)));
     Labels[index].Alignment := taLeftjustify;
     Labels[index].Cursor:=crHandPoint;
     Labels[index].Font.color:=clmaroon;
     Labels[index].color:= clmoneygreen;
     if (NamendesTages(ArrIdxalsTagDatum(index,MonthOf(Now),YearOf(Now))) = 'Samstag') or
        (NamendesTages(ArrIdxalsTagDatum(index,MonthOf(Now),YearOf(Now))) = 'Sonntag') then Labels[index].Color:= clskyblue;
     if (MonthOf(MDatum)= MonthOf(Now))and (FTmp=index)then Labels[index].Color:= clred;
     if LblFeiertag(index, monthOf(MDatum), FTArray)<>'then
     begin
     Labels[index].caption:= LblFeiertag(index,monthOf(MDatum), FTArray);
     Labels[index].Color:= clyellow;
     end;
     Labels[index].Tag:= index;
     Labels[index].OnClick := ClickEvent; //<-ClickEreignis zuweisen !!!
   inc(index2);
   end;
  end;
Auch hier muss mindestens ein Label auf das Formular gezogen werden, damit bei ' var Labels: Array of TLabel' das 'TLabel' nicht unbekannt ist.
Da stimmt doch was nicht, oder?
  Mit Zitat antworten Zitat