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
Seite 4 von 5   « Erste     234 5      
hoika

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

AW: Zugriff auf Objekt in TObjectList

  Alt 10. Dez 2019, 11: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
831 Beiträge
 
Delphi 10.4 Sydney
 
#32

AW: Zugriff auf Objekt in TObjectList

  Alt 10. Dez 2019, 11: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 11:09 Uhr)
  Mit Zitat antworten Zitat
hoika

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

AW: Zugriff auf Objekt in TObjectList

  Alt 10. Dez 2019, 11: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
831 Beiträge
 
Delphi 10.4 Sydney
 
#34

AW: Zugriff auf Objekt in TObjectList

  Alt 10. Dez 2019, 11: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 11:15 Uhr)
  Mit Zitat antworten Zitat
hoika

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

AW: Zugriff auf Objekt in TObjectList

  Alt 10. Dez 2019, 11: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 11:20 Uhr)
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
831 Beiträge
 
Delphi 10.4 Sydney
 
#36

AW: Zugriff auf Objekt in TObjectList

  Alt 10. Dez 2019, 11:25
Also,

ShowMessage('7.1 TForm_LogIn.CreateNew'); hat 7.1 ... korrekt angezeigt.
ShowMessage(Form_LogIn.ClassName); hat TForm_LogIn ausgegeben

ShowMessage(Form_LogIn.btn_login_abbruch.ClassName ); hat wieder zu einem Error geführt:
Zitat:
ERROR
Uncaught TypeError: Cannot read property '$classname' of null | TypeError: Cannot read property '$classname' of null at Object.Design_LogIn (http://localhost:8000/NedCom_Web/Ned...b.js:119492:89) at Create_frmLogIn
Wenn ich die Autovervollständigung nutze [STRG+LEERTASTE], dann erkennt Delphi den btn_login_abbruch und zeigt auch an, dass es ein TTMSFNCToolBarButton ist. Aber auf den Button kann ich trotzdem nicht zugreifen...
Patrick

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

Registriert seit: 29. Dez 2006
Ort: NRW
831 Beiträge
 
Delphi 10.4 Sydney
 
#37

AW: Zugriff auf Objekt in TObjectList

  Alt 10. Dez 2019, 12:07
Es funktioniert!

Ich verstehe zwar nicht, warum es gerade nicht funktioniert hat, aber ich habe Folgendes geändert:

Aus der Procedure Create_frmLogIn habe ich das Design.Design_LogIn gelöscht.
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;
In der Procedure WebFormShow habe ich erst das Form LogIn created und das Design als CallBack von Get_Sprache gesetzt.
Delphi-Quellcode:
procedure TForm_NMain.WebFormShow(Sender: TObject);
begin
   FullScreen;
   Create_frmLogIn;
   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(Design.Design_LogIn);
      end
      );
end;
Eigentlich hätte ich erwartet, dass das keinen Unterschied macht...

Vielen Dank für die tolle Unterstützung!!!!

Patrick
Patrick
  Mit Zitat antworten Zitat
DieDolly

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

AW: Zugriff auf Objekt in TObjectList

  Alt 10. Dez 2019, 12:19
Jetzt mach noch was als Lösung in https://www.delphipraxis.net/1453114-post17.html vorgeschlagen wurde und alles ist sauber.
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
831 Beiträge
 
Delphi 10.4 Sydney
 
#39

AW: Zugriff auf Objekt in TObjectList

  Alt 10. Dez 2019, 12:32
Sorry, dass ich da noch einmal nachfragen muss.

Delphi-Quellcode:
procedure TDesign.Design_LogIn;
var
   BList: TObjectList;
begin
   BList:= TObjectList.Create;
   BList.OwnsObjects:= false;
   Try
      BList.Add(Form_LogIn.btn_login_abbruch);
      BList.Add(Form_LogIn.btn_login_ok);
      Design.Labeling_GlowButtons(BList); // Bringe ich nicht hier die Tüte zum Auto? (Ich finde das Beispiel klasse!)
   Finally
      BList.Free; //Werfe ich die Tüte nicht erst jetzt, wo ich meine Einkäufe im Auto habe, weg?
   End;
end;
Oder geht es darum, dass ich diese Liste im weiteren Programm immer wieder mal heranziehen soll, wenn benötigt?

Vielen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat
hoika

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

AW: Zugriff auf Objekt in TObjectList

  Alt 10. Dez 2019, 12:39
Hallo,
so, wie Du das machst, ist es (auch) OK.
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


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 22:35 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