Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
Delphi 12 Athens
|
AW: Form + DataModule mehrere Instanzen
31. Jul 2017, 14:26
Delphi-Quellcode:
dm := TdmFoo.Create(nil);
try
result := TfrmFoo.Create(AOwner);
result.DataModule := dm; // für Zugriffe auf das Datenmodul im Code
dm.Owner := result; // oder result.InsertComponent(dm); mit dm.Owner.RemoveComponent(dm) wenn dm.Owner<>nil
dm.Name := '';
except
dm.Free;
raise;
end;
Ich weiß, das Owner-Property ist ReadOnly, aber eigentlich ist die Owner-Beziehung das nicht.
Delphi-Quellcode:
type
TComponentHelper = class helper for TComponent
private
function GetOwner: TComponent;
procedure SetOwner(NewOwner: TComponent);
public
property Owner: TComponent read GetOwner write SetOwner;
function SecureOwner: TComponent; // if Assigned(Self) then Result:=Owner else Result:=nil;
function SecureName: string;
{$REGION 'Documentation'}
/// <summary>
/// Setzt C.Name für das Error-Logging, wenn das nicht geht, dann wird eine ID angehängt. (z.B. zwei mal
/// DB.LoadBool zur selben Zeit)
/// </summary>
{$ENDREGION}
procedure SetErrorName(NewName: string);
end;
{ TComponentHelper }
function TComponentHelper.GetOwner: TComponent;
begin
Result := inherited Owner;
end;
function TComponentHelper.SecureName: string;
begin
if not Assigned(Self) then
Result := ' (nil)'
else
try
Result := Name;
except
Result := ' (except)';
end;
end;
function TComponentHelper.SecureOwner: TComponent;
begin
if not Assigned(Self) then
Result := nil
else
try
Result := inherited Owner;
except
Result := nil;
end;
end;
procedure TComponentHelper.SetErrorName(NewName: string);
begin
try
if Name = NewName then
Exit;
if (NewName <> ' ') and Assigned(Owner) and Assigned(Owner.FindComponent(NewName)) then
Name := NewName + Format(' _%p', [Pointer(Self)])
else
Name := NewName;
except
end;
end;
procedure TComponentHelper.SetOwner(NewOwner: TComponent);
begin
if Assigned(NewOwner) then
NewOwner.InsertComponent(Self)
else if Assigned(Owner) then
Owner.RemoveComponent(Self);
end;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
Geändert von himitsu (31. Jul 2017 um 14:42 Uhr)
|