1. Musst du dem Parameter var voranstellen damit du ihn als Referenzparameter d. h. Zeiger auf den Speicherbereich des Objekts (Call-by-Reference) verwenden kannst. Bei normalen Parametern erhältst du nur eine Kopie die natürlich nicht ins Original-Objekt zurück kopiert wird.
Delphi-Quellcode:
procedure Test_1(Param: String);
begin
Param := 'TEST';
end;
procedure Test_2(var Param: String);
begin
Param := 'TEST';
end;
procedure ButtonClick;
var
S: String;
begin
S := 'Hallo';
Test_1(S); //S = Hallo
Test_2(S); //S = TEST
end;
2. warum machst du das über eine lokale Variable?
Delphi-Quellcode:
procedure AddToolBarButton(var AToolbar: TToolbar);
var
NewButton: TToolButton;
begin
NewButton := TToolButton.Create(AToolbar);
...
NewButton.Parent := AToolbar;
end;
EDIT: Verflixte Schlechtschreibung...