2016-05-01 5 views
-1

Was ist der "Motor" unter TLang ...Ich möchte wissen, wie man die in CollectLangString definierten TStings "füllt"?

TLang ist ok in meinem kleinen Projekt, aber mit größeren Projekt Es ist schwierig zu verwalten. Ich versuche herauszufinden, wie es funktioniert. Ich habe viele proc und Funktionen in FMX.Types. Ich konzentriere mich auf: CollectLangStart, CollectLangFinish und CollectLangStrings. Der Aufruf dieser Funktionen kann kompiliert werden, aber ich weiß nicht, wo und wann diese TStrings gefüllt sind, die TStrings bleiben leer. Die Dokumentation spricht von "Szene", aber es ist sehr begrenzt.

Antwort

1

TStyleManager.UpdateScenes muss zwischen CollectLangStart und Kopieren CollectLangStrings

var 
    Str: TStrings; 
begin 
    CollectLangStart; 
    TStyleManager.UpdateScenes; 
    Str := TStringList.Create; 
    try 
    Str.Assign(CollectLangStrings); 
    Str.SaveToFile(ExtractFilePath(ParamStr(0)) + 'lang.lng'); 
    finally 
    Str.Free; 
    CollectLangFinish; 
    end; 
end; 
+1

'CollectLangStart/Finish' und' TStringList.Create/fREe' sollten in getrennten 'try/finally' Blöcke genannt werden. –

+1

@Remy: tatsächlich. Also 'CollectLangStart; versuch ... Str: = TStringList.Create; versuch ... endlich Str.Frei; Ende; endlich CollectLangFinish; Ende; 'oder wahrscheinlich sogar umgekehrt. –

+0

Ich würde zuerst die 'TStringList' erstellen, dann die lang strings sammeln und freigeben, dann speichern und die' TStringList' freigeben. Auf diese Weise wurde der Langspeicher freigegeben, bevor 'SaveToFile()' seinen eigenen Speicher reservieren muss. –