przez Cyfrowy Baron » piÄ…tek, 9 wrzeÅ›nia 2011, 12:16
Tworzenie programu wielojęzykowego z wieloma formularzami.
Jeżeli tworzymy aplikację wielojęzykową na którą składa się wiele formularzy, to zaczynamy od tego, że na każdym formularzu umieszczamy jeden (tylko jeden) komponent Langcb1, następnie w komponencie Langcb1 znajdującym się na pierwszym, a więc głównym formularzu we właściwości 'LangList' tworzymy listę językową tak jak to zostało opisane wyżej, gdy lista jest już gotowa przystępujemy do szeregowego łączenia ze sobą wszystkich komponentów. Załóżmy, że mamy aplikację składającą się z 4 formularzy, Form1 - główny; Form2; Form3 i Form4. Na każdym formularzu umieściliśmy po jednym komponencie Langcb1, najpierw w plikach źródłowych dla każdego formularza (Unit1.cpp; Unit2.cpp; Unit3.cpp i Unit4.cpp) w sekcji include umieszczamy odwołanie do pozostałych formularzy, czyli w każdym pliku źródłowym powinien znaleźć się następujący wpis:
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
To jest ważne ponieważ formularze, a co za tym idzie komponenty Langcb1 "muszą o sobie wiedzieć". Gdy zostanie to już zrobione zapisujemy projekt, a następnie przechodzimy do komponentu Langcb1 znajdującego się na formularzu Form1 i w jego właściwości 'OtherLangcb' wybieramy 'Form2->Langcb1' (wybieramy nie wpisujemy) łącząc w ten sposób Langcb1 z Form1 z komponentem Langcb1 z Form2, jeśli na liście wyboru nie ma podanego wpisu to znaczy, że zapomnieliśmy połączyć ze sobą pliki źródłowe poprzez sekcję include. Następnie przechodzimy do komponentu Langcb1 znajdującego się na formularzu Form2 i w jego właściwości 'OtherLangcb' wybieramy 'Form3->Langcb1', potem przechodzimy do komponentu Langcb1 znajdującego się na formularzu Form3 i w jego właściwości 'OtherLangcb' wybieramy 'Form4->Langcb1', ostatniego komponentu Langcb1 znajdującego się na formularzu Form4 nie łączymy z niczym, w żadnym razie nie podłączamy go pod 'Form1->Langcb1', ani pod żaden inny komponent typu TLangcb, ponieważ spowodowałoby to zapętlenie programu, a w efekcie jego zawieszenie. Jest to klasyczne połączenie szeregowe, tworzące łańcuch w którym komponent Langcb1 znajdujący się na Form1 automatycznie steruje pozostałymi komponentami, komponent znajdujący się na końcu łańcucha nie jest do niczego podłączany.
Po połączeniu komponentów musimy jeszcze zaktualizować właściwości 'LangList' we wszystkich komponentach by były identyczne jak w komponencie znajdującym się na początku łańcucha, czyli w Langcb1 znajdującym się na formularzu głównym Form1. Podczas podłączania do siebie komponentów listy językowe (właściwość 'LangList') powinna kopiować się z pierwszego komponentu, ale należy to sprawdzić, ponieważ jeśli pomyliliśmy kolejności łączenia, to lista się nie przekopiuje i wtedy należy ją przekopiować ręcznie z pierwszego komponentu.
UWAGA!
Listy językowe - właściwość 'LangList' muszą być identyczne we wszystkich komponentach.
Pierwszym komponentem jest zawsze ten znajdujący się na początku łańcucha.
Komponenty nie mogą wzajemnie się do siebie odwoływać, czyli komponent Langcb1 z formularza Form1 może się odwoływać do komponentu Langcb1 z formularza Form2, ale wtedy komponent Langcb1 z formularza Form2 nie może się odwoływać do komponentu Langcb1 z formularza Form1.
Ostatni komponent w łańcuchy nie może się odwoływać do żadnego innego komponentu.
Po szeregowym połączeniu ze sobą komponentów postępujemy dalej tak samo jak przy tworzeniu aplikacji z jednym formularzem, czyli programujemy tylko pierwszy komponent Langcb1 i to on będzie sterował pozostałymi komponentami znajdującymi się na innych formularzach.
Przy takim połączeniu zmiana języka na formularzu Form1 powoduje równoczesną zmianę języków na pozostałych formularzach.
W aplikacji z wieloma formularzami język jest zmieniany tylko na formularzu głównym.
Sprawdź połączenia we wszystkich komponentach, na wszystkich formularzach, zwróć uwagę na to, czy gdzieś nie występuje przerwa w połączeniu łańcucha, następnie sprawdź czy we wszystkich komponentach Langcb na wszystkich formularzach listy językowe umieszczone we właściwości LangList są identyczne.