Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.353 Beiträge
 
Delphi 11 Alexandria
 
#27

AW: System.Generics.Collections fehlt mir

  Alt 31. Jan 2018, 12: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 13:00 Uhr)
  Mit Zitat antworten Zitat