Einzelnen Beitrag anzeigen

Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#1

TList 10.1 Berlin vs 10.3 Rio

  Alt 18. Aug 2020, 11:42
Delphi-Version: 10.3 Rio
Guten Tag,

Ich verwende unter Delphi 10.3 Rio folgende routine:

Delphi-Quellcode:
procedure Tfrm_Umsatz_Statistik.GUIUmsatzMitKunde(_visible: boolean);
var elements : TList;
      ele : TObject;
begin
   elements := Tlist.Create;
   elements.Add(Label3);
   elements.Add(lblDatumUnbestimmt);
   elements.Add(ChkBoxDatumsbereich);
   elements.Add(chkBoxGattungSelect);
   elements.Add(lblTitelGattung);
   elements.Add(ChkBoxAlleGattung);
   elements.Add(Label7);


   for ele in elements do
   begin
       if ele is TLabel then
       begin
            Tlabel(ele).Visible := _visible;
       end
       else if ele is TCheckBox then
       begin
            TCheckBox(ele).Visible := _visible;
       else if ele is TListBox then
       begin
            TListBox(ele).Visible := _visible;
       end;
   end;
   elements.Free;
end;
Lässt sich unter 10.3 Rio ohne weiteres compillieren.

Unter 10.1 erhalte ich folgende Fehlermeldung:
Zitat:
[dcc32 Fehler] form_Umsatz_Statistik.pas(1412): E2010 Inkompatible Typen: 'TObject' und 'Pointer'
Die Fehlermeldung ist bezogen auf die for-in-Schleife.

Wie lässt sich diese procedure in 10.1 verwenden ?

Ich habe es versucht mit Pointern wie folgt zu realisieren :
Delphi-Quellcode:
procedure Tfrm_Umsatz_Statistik.GUIUmsatzMitKunde(_visible: boolean);
var elements : TList;
      ele : ^TObject;
begin
   elements := Tlist.Create;
   elements.Add(Label3);
   elements.Add(lblDatumUnbestimmt);
   elements.Add(ChkBoxDatumsbereich);
   elements.Add(chkBoxGattungSelect);
   elements.Add(lblTitelGattung);
   elements.Add(ChkBoxAlleGattung);
   elements.Add(Label7);


   for ele in elements do
   begin
       if ele^ is TLabel then
       begin
            Tlabel(ele^).Visible := _visible;
       end
       else if ele^ is TCheckBox then
       begin
            TCheckBox(ele^).Visible := _visible;
       else if ele^ is TListBox then
       begin
            TListBox(ele^).Visible := _visible;
       end;
   end;
   elements.Free;
end;
Hier erhalte ich eine access-violation beim dereferenzieren zur Laufzeit. An der Stelle if ele^ is TLabel then

Gruss Int3g3r
  Mit Zitat antworten Zitat