Einzelnen Beitrag anzeigen

Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#1

Zugriffsverletzung beim Laden eines Frames in Form (Container)

  Alt 20. Feb 2017, 10:59
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...
Miniaturansicht angehängter Grafiken
kundenliste-frame-im-tab.png   button-kundenliste-modaler-form.png   exception.png   callstack.png  

Geändert von haentschman (20. Feb 2017 um 11:12 Uhr)
  Mit Zitat antworten Zitat