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