Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
Delphi 11 Alexandria
|
AW: System.Generics.Collections fehlt mir
31. Jan 2018, 13:57
Ich musste ziemlich viel davon wegnehmen.
Was denn?
Was bei welcher Version genau war müsste ich schauen. Einfach nur ein Beispiel:
Delphi-Quellcode:
function TMtclDialogThread.Get<T>(const AControlID: Integer): T;
var
ResultControl: TMtclBaseControl;
begin
if FControlsByID.TryGetValue(AControlID, ResultControl) and (ResultControl is T) then
Result := T(ResultControl)
else
Result := nil;
end;
Das funktioniert ab XE problemlos. Unter Delphi 2010 jedoch nicht... Da muss man casten:
Delphi-Quellcode:
function TMtclDialogThread.Get<T>(const AControlID: Integer): T;
var
ResultControl: TMtclBaseControl;
begin
if FControlsByID.TryGetValue(AControlID, ResultControl) and (ResultControl is TClass(T)) then
Result := T(ResultControl)
else
Result := TValue.Empty.AsType<T>;
end;
// EDIT:
Oder (ich glaube das geht erst ab XE6 oder so):
Delphi-Quellcode:
function TMtclDialogThread.GetNew<T>: T;
var
ResultControl: T;
begin
TThread.Synchronize(Self, procedure
begin
ResultControl := T.Create(Self.Handle, Self.GetNewControlID);
end);
Result := ResultControl;
end;
Das musste ich dann so machen:
Delphi-Quellcode:
function TMtclDialogThread.GetNew<T>: T;
var
ResultControl: TMtclBaseControl;
begin
TThread.Synchronize(Self, procedure
begin
ResultControl := TMtclBaseControlClass(T).Create(Self.Handle, Self.GetNewControlID);
end);
Result := T(ResultControl);
end;
Sebastian Jänicke Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
Geändert von jaenicke (31. Jan 2018 um 14:00 Uhr)
|