TForm i TApplication
30.07.1999
  • Przekazywanie argumentów z linii komend do programu.

       Aby rozwiązać ten problem możesz użyć dwóch technik:

Metoda 1: Pierwsza i prawdopodobnie najłatwiejsza, polega na wywołaniu funkcji VCL ParamStr(). Użyj funkcji ParamCount(), żeby określić ile argumentów z linii komend zostało przekazanych do programu. ParamStr pobiera argument int a zwraca AnsiString. Jeżeli przekażesz 0, to ParamStr zwróci pełną ścieżkę pliku wykonywalnego. Przekazując 1 uzyskasz pierwszy argument z linii komend, przekazując 2 - drugi argument, i tak dalej... Sprawdź tą metodę umieszczając pięć obiektów TLabel na głównej formie. Dodaj ten kod do konstruktora:

  Label1->Caption = ParamStr(0);
  Label2->Caption = ParamStr(1);
  Label3->Caption = ParamStr(2);
  Label4->Caption = ParamStr(3);
  Label5->Caption = ParamStr(4);
Uruchom program. Na moim systemie widzę coś takiego:

E:\CBUILDER\PROJECTS\PROJECT1.EXE
Etykiety 2 - 5 są puste, ponieważ nie przekazałem żadnego argumentu do programu. Zamknij program i wybierz z menu (Run|Parameters). Wpisz kilka argumentów (np. -debug -test - param) i uruchom program raz jeszcze. Powinieneś zobaczyć:

E:\CBUILDER\PROJECTS\PROJECT1.EXE
  -debug
  -testing
  -param
Uwaga: ParamStr potrafi obsłużyć spacje w ścieżce pliku. Aby to sprawdzić przekopiuj swój program do katalogu Program Files i uruchom go tam. Zaobserwuj, że ParamStr(0) zawiera całą ścieżkę, włącznie ze spacją.

Metoda 2: Polega na wywołaniu funkcji API GetCommandLine. Funkcja ta nie pobiera argumentów, a zwraca char * zawierający całą linijkę argumentów. Będziesz musiał wyodrębnić poszczególne argumenty z tej linijki.

Label5->Caption = AnsiString(GetCommandLine());
Na moim komputerze, Label5 zawiera (zauważ dodane cudzysłowy):

"E:\CBuilder\Projects\Project1.exe" -debug -testing -param