Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zugriff auf dynamisch erstellte Objecte (https://www.delphipraxis.net/199333-zugriff-auf-dynamisch-erstellte-objecte.html)

Ykcim 16. Jan 2019 11:17

Zugriff auf dynamisch erstellte Objecte
 
Hallo Zusammen,

ich bitte um Hilfe.

Ich erstelle zur Laufzeit ein TAdvDateTimePicker (TMS-Komponente)
Delphi-Quellcode:
procedure TFrame_Planung.TabGridCreate(Name: string);
var  StartDate: TAdvDateTimePicker;
//Start_DateTimePicker
   StartDate:= TAdvDateTimePicker.Create(Self);
   StartDate.Parent:= Panel;
   StartDate.Name:='Date'+Name;
   StartDate.Visible:=true;
   StartDate.Left:=23;
   StartDate.Top:=20;
   StartDate.Height:=21;
   StartDate.Width:=200;
   //Start-Default-Wert
   StartDate.DateTime:= StrToDateTime(DateToStr(Now)+' '+MySQL.Find_Property('Default_Start_1_FA', 'Wert'));
Das klappt auch wunderbar und ich kann auch den DefaultWert zuweisen.

Jetzt möchte ich in einer anderen Prozedur den DateTime-Wert abgreifen, aber das bekomme ich nicht hin...

Delphi-Quellcode:
procedure TFrame_Planung.Datengrid_Counting(SG: TAdvStringGrid);
var  I: integer;
      DateTimePicker: TAdvDateTimePicker;
      Anfang: TDateTime;
begin
   DateTimePicker:=PageControl_Maschinen.ActivePage.FindComponent('Date'+Copy(SG.Name,6,Length(SG.Name)-5)) as TAdvDateTimePicker;
   Anfang:=DateTimePicker.DateTime;
   for I := 2 to SG.RowCount -2 do begin
      ...
      //Kumuliertes Datum ermitteln
      if SG.Cells[13,I]<>'00:00' then begin
         Anfang:=Anfang+StrToTime(SG.Cells[13,I]);
         SG.Cells[14,I]:=DateToStr(Anfang);
      end;
   end;
end;
Ich habe immmer einen Zugriffsfehler, als würde der TAdvDateTimePicker garnicht gefunden werden...

Wenn ich folgendes versuche:

Delphi-Quellcode:
Anfang:=PageControl_Maschinen.ActivePage.FindComponent('Date'+Copy(SG.Name,6,Length(SG.Name)-5)) as TAdvDateTimePicker.DateTime;

dann kann ich gar nicht compilieren, weil ich folgenden Hinweis bekomme:
Delphi-Quellcode:
[DCC Fehler] Frame_PlanungUnit.pas(823): E2233 Auf Eigenschaft 'DateTime' kann hier nicht zugegriffen werden


Sieht jemand meinen Fehler?

Vielen Dank
Patrick

Uwe Raabe 16. Jan 2019 11:24

AW: Zugriff auf dynamisch erstellte Objecte
 
Mit
Delphi-Quellcode:
StartDate:= TAdvDateTimePicker.Create(Self);

erzeugst du die Instanz mit Owner =
Delphi-Quellcode:
Self
. In diesem Fall ist das die Frame-Instanz von TFrame_Planung. Daher musst du die Komponente auch über das FindComponent der Frame-Instanz suchen:

Delphi-Quellcode:
DateTimePicker:=FindComponent('Date'+Copy(SG.Name,6,Length(SG.Name)-5)) as TAdvDateTimePicker;

Ykcim 16. Jan 2019 11:40

AW: Zugriff auf dynamisch erstellte Objecte
 
PRIMA! Danke, das war der Grund!
Jetzt klappt es!
Vielen Dank
Patrick

hoika 16. Jan 2019 12:00

AW: Zugriff auf dynamisch erstellte Objecte
 
Hallo,
hm, wenn du eh innerhalb des Frames bist, warum merkst Du dir den DateTimePicker nicht in einer Frame-Variable,
oder wenn es mehrere sind, in einer TList /TObjectList oder ähnlichem?


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz