AGB  ·  Datenschutz  ·  Impressum  







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

in ini speichern

Ein Thema von eleonora · begonnen am 13. Jun 2003 · letzter Beitrag vom 13. Jun 2003
Antwort Antwort
Seite 1 von 2  1 2      
eleonora

Registriert seit: 24. Jan 2003
80 Beiträge
 
#1

in ini speichern

  Alt 13. Jun 2003, 08:30
Hallo!

Ich kann in meinem Programm zwischen Deutsch und Englisch wählen. Diese Einstellungen speicher ich dann in eine ini-Datei in meinem Hauptformular. Allerdings bringt er mir jetzt eine Zugriffsverletzung wenn ich die englische Version starte!

Könnte es daran liegen, das ich die ini Datei unter Form Create wieder aufrufe, damit er mir auch das zweite Fenster gleich mitübersetzt, dies allerdings nicht gleich mitgestartet wird?
Wenn ja, wie kann ich das umgehen?

Bitte um schnelle Hilfe!
Danke schon mal!

Eleonora
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#2
  Alt 13. Jun 2003, 08:32
Hallo Eleonora,

könntest Du bitte einen kurzen Code-Ausschnitt posten? Ich denke, dass Dein Problem dann deutlicher und die Lösung offensichtlicher wird. thx.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: in ini speichern

  Alt 13. Jun 2003, 08:36
Zitat von eleonora:
Könnte es daran liegen, das ich die ini Datei unter Form Create wieder aufrufe, damit er mir auch das zweite Fenster gleich mitübersetzt, dies allerdings nicht gleich mitgestartet wird?
Ja.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
eleonora

Registriert seit: 24. Jan 2003
80 Beiträge
 
#4
  Alt 13. Jun 2003, 08:58
@Sakura: Wie löse ich denn dann dieses Problem?

@Daniel:
Im Untermenü Englisch folgender Code:
Code:
ini := TiniFile.Create(C:/...);
path.path_file.Caption := 'File';  //Bringt mir hier den Fehler!!!!
with ini do
begin
     writestring('language', 'type', 'english');
end;
ini.Free;
Unter FormCreate
Code:
ini := TiniFile.Create(C:/...);
language := readstring('language', 'type', '');

       if language = 'german'
       then
           language_german.Click
       else
           language_english.Click;

     end;
     ini.Free;
Ist das OK so?

Eleonora
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#5
  Alt 13. Jun 2003, 09:14
Zitat von eleonora:
@Sakura: Wie löse ich denn dann dieses Problem?
Eigentlich recht einfach. Du musst ein Form nach dem anderen übersetzen und jedes Mal darauf achten, daß die Ini-Datei wieder geschlossen wird, bevor Du diese wieder öffnest.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
eleonora

Registriert seit: 24. Jan 2003
80 Beiträge
 
#6
  Alt 13. Jun 2003, 10:03
Zitat:
Eigentlich recht einfach. Du musst ein Form nach dem anderen übersetzen und jedes Mal darauf achten, daß die Ini-Datei wieder geschlossen wird, bevor Du diese wieder öffnest.
Meinst Du mit Schliessen ini.Free;?
Ich übersetzte die zweite Form unter dem Menüpunkt Englisch in der ersten Form, also im Hauptformular.
eleonora
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#7
  Alt 13. Jun 2003, 10:10
Zitat von eleonora:
Meinst Du mit Schliessen ini.Free;?
Ja.

...:..
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
eleonora

Registriert seit: 24. Jan 2003
80 Beiträge
 
#8
  Alt 13. Jun 2003, 10:25
Ich mache nach jeder Form ein ini.Free; aber er bringt mir trotzdem diese Zugriffsverletzung!

Ich poste mal eine Teil von dem jeweiligen Code!

Im Menüpunkt Englisch welches sich im Hauptformular befindet:

Code:
procedure language_englishClick(Sender: TObject);
begin
     ini := TiniFile.Create(C:/...);
     //Übersetzung des Hauptformulares
     file_file.Caption := 'File';
     file_exit.Caption := 'Exit';
     file_language.Caption := 'Language';
     language_german.Caption := 'German';
     language_english.Caption := 'English';
     
     //Übersetzung des Konfig-Fensters
     path.path_file.Caption := 'File';
     path.path_exit.Caption := 'Exit';
     path.path_language.Caption := 'Language';

     //Übersetzt das Browser-Fenster
     engage.engage_delete.Caption := 'Which Browser would you like to delete?';
     engage.engage_d.Caption := 'Delete';
   
     with ini do
     begin
          writestring('language', 'type', 'english');
     end;
     ini.Free;
end; //procedur
Das gleiche befindet sich auch im Deutschen menü.
Anschliessend mache ich diese in FormCreate des Hauptformulares

Code:
procedure TFormCreate(Sender: TObject);
begin
     ini := TiniFile.Create(C:/.....);

     with ini do
     begin
           
       language := readstring('language', 'type', '');

       if language = 'german'
       then
           language_german.Click
       else
           language_english.Click;

     end;//with...
     ini.Free;
end;
Sorry für so viel Code und Danke für die Hilfe!

Eleonora
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#9
  Alt 13. Jun 2003, 10:57
Ändere mal den Code (zweiter Abschnitt)
Delphi-Quellcode:
       if language = 'german
       then
           language_germanClick(Self)
       else
           language_englishClick(Self);
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#10
  Alt 13. Jun 2003, 11:05
Moin Eleonora,

das Problem ist, das zum Zeitpunkt des Aufrufes der Übersetzung erst das Hauptformular existiert.

Wenn Du mal in der Projektdatei nachsiehst, siehst Du die Reihenfolge, in der die Formulare erzeugt werden. Das OnCreate wird aufgerufen, nachdem das jeweilige Formular, vollständig erzeugt wurde (also z.B. incl. aller weiterer darin enthaltenen Komponenten.

Da Deine Übersetzungsfunktion aber immer alle Formulare anspricht geht der Aufruf beim Zuweisen von Werten an Unterfenster schief, da diese noch gar nicht existieren.

Entweder Du packst den Aufruf für die Übersetzung in das OnCreate des letzten Formulares in der Liste (halte ich nicht für so sinnvoll, ein neues Formular und schon muss der Aufruf verschoben werden, oder Du benutzt eine Kennung für welches Formular übersetzt werden soll.
Dafür dürfte sich am Besten wohl die Eigenschaft Tag des anzuklickenden Menüpunktes eignen.
Dann würden auch nicht bei der Übersetzung eines Formulares, immer gleich alle anderen, wiederholt, mit übersetzt werden.

Da das Ganze auch im laufenden Programm erfolgen soll, kannst Du das dann unterscheiden, indem Du den Aufruf über language_germanClick(nil) machst, und den Sender prüfst. Ist der nil, dann werden die Einstellungen vom Programmstart angesprochen, ansonsten hat es jemand angeklickt.

Eine weitere Idee (die mir eigentlich besser gefällt)
Du erstellst für jedes Formular eine eigene Methode, je Sprache, in der die Text für das jeweilige Formular, eingestellt werden und rufst diese aus dem OnCreate jedes Formulares auf.
Bei den Menüpunkten für die Sprache werden dann der Reihe nach nur noch diese jeweiligen Methoden aufgerufen.
Dann hast Du auch alle Übersetzungen für jedes Formular direkt in der gleichen Unit, was sich bei Änderungen als günstig erweisen kann.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:41 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