AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi wo Initialisierungen von Formularen durchführen.
Thema durchsuchen
Ansicht
Themen-Optionen

wo Initialisierungen von Formularen durchführen.

Ein Thema von diver03 · begonnen am 10. Sep 2008 · letzter Beitrag vom 11. Sep 2008
Antwort Antwort
Seite 2 von 2     12   
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#11

Re: wo Initialisierungen von Formularen durchführen.

  Alt 11. Sep 2008, 12:14
Ich würde mir eine generische Formular-Klasse erstellen, die die Label-Beschriftungen bei Bedarf aus einer Datei lädt.
Weiterhin würde ich mir einen Observer (GOF-Strategy, Observer-Pattern) schreiben, der beim Sprachenwechsel alle Formulare benachrichtigt.

Die Formulare melden sich beim Observer an (subscribe), sobald sie erzeugt werden (FormCreate-Methode) und melden sich wieder ab (unsubscribe), wenn sie zerstört werden (FormDestroy).

Alle deine Formulare leitest Du dann von diesem TMultiLanguageForm ab und musst dich dann um gar nichts mehr kümmern.

Der Observer verwaltet eigentlich nur eine Liste von TMultiLanguageForm. Meldet sich eine Form an, kommt es in die Liste. meldet sie sich ab, wird sie aus der Liste entfernt. Beim Sprachwechsel werden einfach alle Formulare der Liste nacheinander aufgefortert, ihre Spracheinstellungen neu zu laden.
Delphi-Quellcode:
unit MultiLingualForms;

interface
uses Classes, Forms;
Type

  IObserverReceiver = Interface
     Procedure Notify (Const aMessage : String);
     End;

  TLanguageObserver = Class
  private
    FObserver : TInterfaceList;
  Public
    Constructor Create;
    Destructor Destroy; Override;
    Procedure Subscribe (aObserver : IObserverReceiver);
    Procedure Unsubscribe(aObserver : IObserverReceiver);
    Procedure Notify;
    End;

  TMultiLanguageForm = Class (TForm, IObserverReceiver)
  protected
    Procedure DoCreate; Override;
    Procedure DoDestroy; Override;
    Procedure ChangeLanguage;
    Procedure IObserverReceiver.Notify = ChangeLanguage;
  End;

Function Observer : TLanguageObserver;

implementation

{ TLanguageObserver }
Var
  _Observer : TLanguageObserver;

Function Observer : TLanguageObserver;
Begin
  If not Assigned (_Observer) Then _Observer := TLanguageObserver.Create;
  Result := _Observer
End;

constructor TLanguageObserver.Create;
begin
  inherited;
  FObserver := TInterfaceList.Create;
end;

destructor TLanguageObserver.Destroy;
begin
  FObserver.Free;
  inherited;
end;

procedure TLanguageObserver.Notify;
Var
  i : Integer;

begin
  For i:=0 To FObserver.Count-1 do
    IObserverReceiver(FObserver[i]).Notify;
end;

procedure TLanguageObserver.Subscribe(aObserver: IObserverReceiver);
begin
  If FObserver.IndexOf(aObserver)=-1 Then
    FObserver.Add(aObserver)
end;

procedure TLanguageObserver.Unsubscribe(aObserver: IObserverReceiver);
begin
  FObserver.Remove(aObserver)
end;

{ TMultiLanguageForm }

procedure TMultiLanguageForm.DoCreate;
begin
  inherited;
  Observer.Subscribe(Self);
  ChangeLanguage;
end;

procedure TMultiLanguageForm.DoDestroy;
begin
  Observer.Unsubscribe(Self);
  inherited;
end;

procedure TMultiLanguageForm.ChangeLanguage;
begin
// Sprachdatei laden und eigene Label neu setzen
end;

initialization
  _Observer := Nil;
finalization
  _Observer.Free;
end.
Beim Sprachwechsel einfach 'Observer.Notify' aufrufen, der macht den Rest.


Nebenbei gibt es sehr schöne Tools, die einem die Entwicklung mehrsprachiger Anwendungen erleichtern. GnuGetText oder TsiLang sind zwei Kandidaten, aber es gibt sicherlich noch Andere.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 22:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz