polymorphism napisał(a):extern int a; // deklaracja zmiennej, która została zdefiniowana "gdzieś" w programie. To dajesz wszędzie tam, gdzie chcesz się odwoływać do tej zmiennej (z reguły są to pliki H)
Tak, ale w tym przypadku to zbędna komplikacja. To się przydaje, gdy tworzysz taka zmienną w jakimś module w postaci dodatkowego pliku zawierającego np. zbiór funkcji, których nie chcesz trzymać w tym samym pliku co zdarzenia formularza.
oneiro napisał(a):Mam plik formularza Unit1.cpp, za sekcją include daję od razu zmienną z przypisaną wartością np. "int a=3";
W Unit1.h deklaruję jeszcze raz to samo to "int a"
W takim przypadku masz dwie zmienne o identycznej nazwie - jedną globalną - to ta w pliku źródłowym Unit1.cpp poza jakąkolwiek funkcją oraz drugą publiczną będącą własnością klasy formularza zadeklarowaną w pliku nagłówkowym w sekcji public. Nie możesz jednak inicjować zmiennej w pliku nagłówkowym, czyli taki zapis:
public:
int a = 3; /* ERROR */
jest niepoprawny.
Jeżeli masz dwie zmienna o identycznej nazwie - co jest możliwie tylko w sytuacji, gdy są tą zmienne z różnych przestrzeni - to program zawsze użyje zmiennych w kolejności najpierw zmienna lokalna, potem zmienna prywatna (private) lub publiczna (public - przy czym nie można tworzyć dwóch zmiennych o identycznej nazwie jednocześnie w sekcji private i public), zmienna globalna jest używana dopiero gdy program nie ma dostępu do zmiennej z innych przestrzeni.
Można wymusisz by program używał zmiennej globalnej przed innymi stosując tzw. przesłanianie zmiennych. Do przesłaniania zmiennych służą dwa dwukropki, przykład:
Plik nagłówkowy np. Unit1.h
Plik źródłowy np. Unit1.cpp
int a = 3;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
a = 4; /* inicjacja zmiennej publicznej */
Edit1->Text = ::a; /* przesłonięto zmienną publiczną - zmienna globalna - wartość 3 */
Edit1->Text = a; /* zmienna publiczna - wartość 4*/
::a = 5; /* przesłonięto zmienną publiczną - zmienna globalna - wprowadzono nową wartość do zmiennej globalnej */
}
W podanym przez Ciebie przykładzie program używał tylko zmiennej publicznej, zmienna globalna nie była używana.
oneiro napisał(a):Czyli z tego co napisałeś, wystarczy zadeklarować zmienną w pliku nagłówkowym, tak? A w pliku cpp (kodzie) od razu odwoływać się do niej,
Tak!

Co Ty pierwszy raz programujesz w języku obiektowym?
oneiro napisał(a):a wartość przypisać w jakiejś funkcji uruchamianej przy starcie programu (czyli np. w pliku project.cpp jesli nie zminiłem nazwy).
Nie projekt.cpp lecz raczej np. Unit1.cpp, ale tak. Wartość zmiennej możesz zmieniać w dowolnej funkcji lub zdarzeniu. Zapoznaj się z tym artykułem:
Przekazywanie obiektów i funkcji pomiędzy formularzami.oneiro napisał(a):PS. Private z public chyba Ci się pomyliły w ostatniej wiadomości
Chyba tak. Zasada jest taka zmiennej publicznej możesz używać w dowolnym pliku projektu o ile prawidłowo ja zaadresujesz, a zmienną prywatną możesz używać tylko w obrębie klasy formularz w której ja zadeklarowałeś.
oneiro napisał(a):się wywala, bo LastDelimiter nie znajduje separatora.
Nie wywala się. Po prostu uruchamiasz program z poziomu środowiska i debuger zgłasza ci informację - nie błąd - że funkcja nie znalazła znaku, ale w takiej sytuacji po prostu funkcja zwraca wartość 0, czyli false w przeciwnym razie zwraca wartość większą od 0, czyli true. Gdyby to ta funkcja wywoływała błąd to już w sytuacji gdy w Edit1 zamiast prawidłowo separatora byłby ten nieprawidłowy, program powinien się wywalić. Uruchom program poza środowiskiem i zobacz, czy wtedy też się wywala.