AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Syntax für generischen Typ

Ein Thema von Codewalker · begonnen am 4. Nov 2012 · letzter Beitrag vom 5. Nov 2012
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Syntax für generischen Typ

  Alt 4. Nov 2012, 13:46
Die meinen das damit
Delphi-Quellcode:
TLocalizeData<T> = class( TDictionary<TLanguageCode, T> )
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Syntax für generischen Typ

  Alt 4. Nov 2012, 13:49
Die meinen das damit
Delphi-Quellcode:
TLocalizeData<T> = class( TDictionary<TLanguageCode, T> )
end;
Ach so. Können die sich dann in der Hilfe nicht gescheit ausdrücken und das als Lösungsbeispiel geben.
Danke Dir für die schnelle Hilfe
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Syntax für generischen Typ

  Alt 5. Nov 2012, 06:16
Kann man auch noch anders machen, indem man das Dictionary Teil einer Klasse macht.
Delphi-Quellcode:
unit ...;

interface

uses ..., Generics.Collections;

type
  TLocalize = class
  strict protected
    FDictionary: TDictionary<String,String>;
  public
    property GetText[AText: String]: String
      read GetLocalizedText; default;

    // Controls übersetzen
    procedure Translate(AForm: TForm); override;
    procedure Translate(AFrame: TFrame); override;
    procedure Translate(AControl: TWinControl); override;
  end;

implementation

function TLocalize.GetLocalizedText(AText: String): String;
begin
  Result := '';
  if Length(Trim(AText)) = 0 then
    Exit;

  if not FDict.TryGetValue(AText, Result) then
    begin
      FDict.Add(AText, AText);
      Result := AText;
    end;
end;
Verwenden kann man's dann zB so:
Delphi-Quellcode:
var
  L: TLocalize;

begin
  L := TLocalize.Create;
  try
    L.Translate(Self);
    // ...
    ShowMessage(L['Hallo Welt']);
  finally
    FreeAndNil(L);
  end;
end;
Vorteil ist, dass man mehr in die Klasse packen kann, zB Funktionen um Controls zu übersetzen, speichern und laden des Dict usw.

EDIT
Grad gesehen. Wenn du im gleichen Dict verschiedene Sprachen unterbringen willst, müsstest du in dem Fall entweder verschiedene Dicts verwenden (in getrennten Dateien speichern / laden) oder noch ein übergeordnetes Dict schaffen á la TDictionary<Language-String,TLocalize-Klasse>.

Geändert von nuclearping ( 5. Nov 2012 um 06:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Syntax für generischen Typ

  Alt 5. Nov 2012, 07:52
Grad gesehen. Wenn du im gleichen Dict verschiedene Sprachen unterbringen willst, müsstest du in dem Fall entweder verschiedene Dicts verwenden (in getrennten Dateien speichern / laden) oder noch ein übergeordnetes Dict schaffen á la TDictionary<Language-String,TLocalize-Klasse>.
öh, es gibt auch noch [OH]TPair<TKey,TValue>[/OH] das würde sich doch anbieten
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Syntax für generischen Typ

  Alt 5. Nov 2012, 09:22
Oh ok, danke. Selbst noch nicht gewusst.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Syntax für generischen Typ

  Alt 5. Nov 2012, 09:41
Um einen Primary Key in einem TDictionary<TKey,TValue> abzubilden, kann man als TKey ja einen Typen seiner Wahl angeben.

Habe ich für diesen Primary Key ...
  • einen Wert, dann nehme ich genau den Datentyp dieses einen Wertes.
    MyDict : TDictionary<string,TMySubject>;
  • zwei Werte, dann nehme ich TPair<TKey,TValue>
    MyDict : TDictionary<TPair<string,Int64>,TMySubject>; oder alternativ auch
  • n Werte, dann erzeuge ich mir ein Record mit allen Werten
    Delphi-Quellcode:
    TFooPrimaryKey = record
      Value1 : string;
      Value2 : Int64;
      Value3 : Boolean;
      Value4 : string;
    end;

    MyDict : TDictionary<TFooPrimaryKey,TMySubject>;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.355 Beiträge
 
Delphi 12 Athens
 
#7

AW: Syntax für generischen Typ

  Alt 5. Nov 2012, 09:49
Wobei man bei den letzen 2 eventuell noch einen Comparer erstellen sollte, da TDictionary nicht von selbst diese Typen vergleichen kann.

Das kann nur Binär, bei solchen komplexen Typen, und da wird 'Text' nicht unbedingt gleich 'Text' sein. (wenn das unterschiedliche Variablen sind, da nur der Zeiger und nicht der Inhalt verglichen würde)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz