AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf Objekt in TObjectList

Ein Thema von Ykcim · begonnen am 9. Dez 2019 · letzter Beitrag vom 10. Dez 2019
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Zugriff auf Objekt in TObjectList

  Alt 10. Dez 2019, 09:43
Hallo,


Zitat:
FListe_Button.Add(Form_LogIn.btn_login_abbruch);
Mach mal danach

ShowMessage(Form_LogIn.btn_login_abbruch.Name); und

Delphi-Quellcode:
if FListe_Button.Items[0] is TTMSFNCToolBarButton then
begin
  ShowMessage('OK');
end;
Heiko

Geändert von hoika (10. Dez 2019 um 09:45 Uhr)
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
856 Beiträge
 
Delphi 12 Athens
 
#2

AW: Zugriff auf Objekt in TObjectList

  Alt 10. Dez 2019, 09:51
Wie es aussieht, ist das Objekt schon wieder weg...

Delphi-Quellcode:
for I := 0 to FListe_Button.Count -1 do begin
      if Assigned(FListe_Button.Items[I]) then
         ShowMessage(FListe_Button.Items[I].ClassName)
      else
         ShowMessage('Not assigned');
   end;
Ergebnis lautet: Not assigned...

Aber warum ist das so? Vorher frage ich die Anzahl der Objekte in der Liste ab und bekomme das Ergebnis 2.
ShowMessage('Anzahl Buttons: '+IntToStr(FListe_Button.Count));
Delphi-Quellcode:
      if FListe_Button.Items[I] is TTMSFNCToolBarButton then
         ShowMessage('OK')
      else
         ShowMessage('Not OK');

Auch hier lautet das Ergebnis: Not OK!

Ich gebe die Liste aktuell auch nicht wieder frei...

Vielen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#3

AW: Zugriff auf Objekt in TObjectList

  Alt 10. Dez 2019, 09:52
Zeig mal deinen abgeänderten Code. Also alles meine ich was wichtig ist.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#4

AW: Zugriff auf Objekt in TObjectList

  Alt 10. Dez 2019, 09:54
Für mich sieht das so aus, als ob du in die Liste schon ein Nil-Object reinpackst. Sprich gibt es die Button zu dem Zeitpunkt wo die Prozedur läuft schon?
Ralph
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Zugriff auf Objekt in TObjectList

  Alt 10. Dez 2019, 10:05
Hallo,
Zitat:
Form_LogIn.btn_login_abbruch
entweder das Form ist bereits freigegeben, oder der Button ist gar kein TTMSFNCToolBarButton.
Zeig mal die DFM (falls es das noch gibt, ich kenne mich mit WebCore nicht aus).
Heiko
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
856 Beiträge
 
Delphi 12 Athens
 
#6

AW: Zugriff auf Objekt in TObjectList

  Alt 10. Dez 2019, 10:06
Zitat:
Für mich sieht das so aus, als ob du in die Liste schon ein Nil-Object reinpackst. Sprich gibt es die Button zu dem Zeitpunkt wo die Prozedur läuft schon?
Wahrscheinlich liegt hier der Fehler. Ich habe gerade mal getestet, ob ich in der Procedure, die die Buttons in die Liste packt, den Button.Name abgreifen kann. Das Ergebnis war wieder der gleiche Error...

Hier der Aufbau meines Programm-Starts. Ich habe die richtige Reihenfolge mit den nummerierten ShowMessages abgeprüft!

Form_NMain
Delphi-Quellcode:
implementation

uses
   Form_LogInUnit, Form_UebersichtUnit, Form_DispoUnit, TDataUnit, TDesignUnit,
   TLogicUnit;
Delphi-Quellcode:
procedure TForm_NMain.WebFormShow(Sender: TObject);
begin
   FullScreen;
   ShowMessage('1 Main_Show');
   ShowMessage(Sheet_LogIn.Name);
   Data_Module.xConnection_connect(procedure
      begin
         ShowMessage('3 AonConnect');
         Data_Module.Get_Property;
         ShowMessage('4 Get_Property done');
         Data_Module.Get_Sprache(Create_frmLogIn);
      end
      );
end;
Data_Module
Delphi-Quellcode:
implementation

uses TLogicUnit, TDesignUnit;
Delphi-Quellcode:
procedure TData_Module.xConnection_connect (AOnConnect: TConnectCallback);
   procedure OnConnect;
   begin
      if Assigned(AOnConnect) then begin
         ShowMessage('2 Connection Ready');
         AOnConnect();
      end;
   end;
   procedure OnError(Error: TXDataWebConnectionError);
   begin
      ShowMessage('XData server connection failed with error: ' +
      Error.ErrorMessage);
   end;
begin
   if xConnection.Connected then begin
      if Assigned(AOnConnect) then begin
         AOnConnect();
      end;
   end
   else begin
      xConnection.Open(@OnConnect, @OnError);
   end;
end;
Delphi-Quellcode:
procedure TData_Module.Get_Sprache(AOnDataRecieved: TDataRecievedCallback);
   procedure OnResponse(Response: TXDataClientResponse);
   begin
      JSON_DataSet(xDST_Sprache, Response);
      ShowMessage('6 GetSprache DataReceived');
      if Assigned(AOnDataRecieved) then begin
         AOnDataRecieved();
      end;
   end;
begin
   xClient.RawInvoke('IData_xChangeService.Get_Sprache',[], @OnResponse);
   ShowMessage('5 GetSprache');
end;

Form_NMain
Delphi-Quellcode:
procedure TForm_NMain.Create_frmLogIn;
begin
   ShowMessage('7 Create FrameLogin');
   if not Assigned(Form_LogIn) then begin
      Form_LogIn := TForm_LogIn.CreateNew(Form_NMain.Sheet_LogIn.ElementID, nil);
      Form_LogIn.OnLogIn_Run:=Logic.Run_LogIn;
      Design.Design_LogIn;
   end;
   Form_NMain.Frame_Control.TabIndex:=0;
end;
Unit Design
Delphi-Quellcode:
implementation
uses TDataUnit, TLogicUnit, Form_NMainUnit, Form_LogInUnit;
Delphi-Quellcode:
procedure TDesign.Design_LogIn;
begin
   ShowMessage('8 Design LogIn');
   FListe_Button.Add(Form_LogIn.btn_login_abbruch);
   FListe_Button.Add(Form_LogIn.btn_login_ok);
   Labeling_GlowButtons;
end;
Delphi-Quellcode:
procedure TDesign.Labeling_GlowButtons;
var
   I: integer;
   MyButton: TTMSFNCToolBarButton;
   Button_Text: string;
begin
   Showmessage('9 Labeling LogIn');
   ShowMessage('Anzahl Buttons: '+IntToStr(FListe_Button.Count));
   ShowMessage('Anzahl Sprach-Einträge: '+IntToStr(Data_Module.xDST_Sprache.RecordCount));
   ShowMessage(Data_Module.xDST_Sprache.FieldByName('btn_login_abbruch').AsString);
   for I := 0 to FListe_Button.Count -1 do begin
      if Assigned(FListe_Button.Items[I]) then
         ShowMessage(FListe_Button.Items[I].ClassName)
      else
         ShowMessage('Not assigned'); //Das ist das Ergbenis

      if FListe_Button.Items[I] is TTMSFNCToolBarButton then
         ShowMessage('OK')
      else
         ShowMessage('Not OK'); //Das ist das Ergebnis
   end;
end;
Die Reihenfolge 1-9 wird in korrekter Reihenfolge aufgerufen.

Sieht jemand, was ich falsch mache???

Vielen Dank für Eure Unterstützung!
Patrick
Patrick

Geändert von Ykcim (10. Dez 2019 um 10:09 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Zugriff auf Objekt in TObjectList

  Alt 10. Dez 2019, 10:11
Hallo,
was wird denn hier

ShowMessage(FListe_Button.Items[I].ClassName)

angezeigt?
Heiko
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
856 Beiträge
 
Delphi 12 Athens
 
#8

AW: Zugriff auf Objekt in TObjectList

  Alt 10. Dez 2019, 10:13
Er springt nach else und gibt "Not assigned" aus...

Delphi-Quellcode:
for I := 0 to FListe_Button.Count -1 do begin
      ShowMessage(FListe_Button.Items[I].ClassName);
      if Assigned(FListe_Button.Items[I]) then
         ShowMessage(FListe_Button.Items[I].ClassName)
      else
         ShowMessage('Not assigned');
      if FListe_Button.Items[I] is TTMSFNCToolBarButton then
         ShowMessage('OK')
      else
         ShowMessage('Not OK');
   end;

Und wenn ich das assigned nicht abprüfe gibt er folgenden Error aus:
Zitat:
TypeError: Cannot read property '$classname' of null at Object.Labeling_GlowButtons
Patrick

Geändert von Ykcim (10. Dez 2019 um 10:15 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Zugriff auf Objekt in TObjectList

  Alt 10. Dez 2019, 10:18
Hallo,
ok, oder auch nicht, dann weiter

ShowMessage(Form_LogIn.ClassName)
ShowMessage(Form_LogIn.btn_login_abbruch.ClassName )

und zwar unmittelbar vor dem
Labeling_GlowButtons;


und noch was
Delphi-Quellcode:
procedure TForm_NMain.Create_frmLogIn;
begin
   ShowMessage('7 Create FrameLogin');
   if not Assigned(Form_LogIn) then begin
-->> ShowMessage('7.1 TForm_LogIn.CreateNew');
      Form_LogIn := TForm_LogIn.CreateNew(Form_NMain.Sheet_LogIn.ElementID, nil);
      Form_LogIn.OnLogIn_Run:=Logic.Run_LogIn;
      Design.Design_LogIn;
   end;

   Form_NMain.Frame_Control.TabIndex:=0;
end;
Heiko

Geändert von hoika (10. Dez 2019 um 10:20 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz