Genervte Grüße...
Vorab:
Die Frames waren
alle fertig und funktional auch im Form Container. Geändert habe ich nur die
IDE auf Berlin (von XE) und das aktuellste TMS ComponentPack.
Problem
Wenn ich den Frame in einen Tab lade ist alles in Ordnung. Wenn ich aber den
gleichen Frame in eine Form (Container) lade dann habe ich neuerdings eine Zugriffsverletzung in CreateWnd immer an der gleichen Stelle...
Mas ich probiert habe:
Früher hatte ich mal mit der AdvListview ein Problem mit TReader. Da half ein Klick im Designer auf ein anderes Control als die Listview. Ich habe alle Frames in der Hirachie nochmal geöffnet und gespeichert. Ohne Erfolg.
Frame in Tab:
Delphi-Quellcode:
function TfoMain.CreateCustomersListTab: TAdvOfficePage;
var
Tab: TAdvOfficePage;
Frame: TfrCustomers;
begin
Tab := TAdvOfficePage.Create(nil);
Tab.Name := 'tabCustomersList';
Tab.ImageIndex := 235;
Tab.Caption := conTextCustomerList;
Frame := TfrCustomers.Create(nil, FLogic.Preferences, FLogic.Database); // funktional
FinishTab(Frame, Tab);
Result := Tab;
end;
Frame in Container:
Delphi-Quellcode:
class function TdAV_FormFactory.CreateForm(FormType: TdAV_FormType; Preferences: TdAV_Preferences; Database: IdAV_Database; IsChoice: Boolean = False): TfoContainer;
var
ChildFrame: TfrBase;
begin
Result := nil;
ChildFrame := nil;
case FormType of
ftPreferences:
begin
ChildFrame := TfrPreferences.Create(Result, Preferences, Database);
end;
ftLoginSplash, ftLoginMain:
begin
ChildFrame := TfrLogin.Create(Result, Preferences, Database); // funktional
end;
ftPlant:
;
ftLocation:
;
ftOrder:
;
ftUserManagement:
begin
ChildFrame := TfrUserManager.Create(Result, Preferences, Database); // funktional
end;
ftUser:
begin
ChildFrame := TfrUsers.Create(Result, Preferences, Database);
end;
ftCustomer:
begin
ChildFrame := TfrCustomers.Create(Result, Preferences, Database); // mit Zugriffsverletzung
end;
ftCompany:
;
ftChanges:
begin
ChildFrame := TfrChanges.Create(Result, Preferences, Database);
end;
ftUnlock:
begin
ChildFrame := TfrUnlockDatasets.Create(Result, Preferences, Database);
end;
end;
Result := TfoContainer.Create(nil, ChildFrame);
ChildFrame.IsChoice := IsChoice;
ChildFrame.ParentForm := Result;
Result.Constraints.MinHeight := ChildFrame.Constraints.MinHeight;
Result.Constraints.MinWidth := ChildFrame.Constraints.MinWidth;
Result.Constraints.MaxHeight := ChildFrame.Constraints.MaxHeight;
Result.Constraints.MaxWidth := ChildFrame.Constraints.MaxWidth;
// Positionen ggf. über Preferences setzen
case FormType of
ftPreferences:
begin
Result.Position := poMainFormCenter;
end;
ftLoginSplash:
begin
Result.Position := poScreenCenter;
Result.BorderStyle := bsToolWindow;
end;
ftLoginMain:
begin
Result.Position := poMainFormCenter;
Result.BorderStyle := bsToolWindow;
end;
ftUserManagement:
begin
Result.Position := poMainFormCenter;
end;
ftCustomer:
begin
Result.Position := poMainFormCenter;
end;
ftUser:
begin
Result.Position := poMainFormCenter;
end;
end;
end;
Aufruf des modalen Fensters
Delphi-Quellcode:
procedure TfrLocationEdit.actChoiceCustomerExecute(Sender: TObject);
var
CustomerForm: TfoContainer;
begin
CustomerForm:= TdAV_FormFactory.CreateForm(ftCustomer, FPreferences, FDatabase, True);
try
CustomerForm.Width := 700;
CustomerForm.Height := 500;
CustomerForm.ShowModal;
finally
FreeAndNil(CustomerForm);
end;
end;
PS: Der Login Dialog bzw. der Benutzermanager ist auch ein TFrame der mit der gleichen Factory im Container angezeigt wird... problemlos.
...ich mag nicht mehr.
Wem gebe ich jetzt die Schuld? Jetzt kann ich alles von vorn prüfen...
Danke für Infos...