Zuerst ein kleines Beispiel, es macht nichts besonderes, es hängt nur eine Bitmap als Objekt am ListBox bei Button1Click und greift über Test in Button2Click wieder drauf zu:
Delphi-Quellcode:
procedure Test(ListBox: TListBox; Bmp: TBitmap);
var
B: TBitmap;
begin
B := TBitmap(ListBox.Items.Objects[0]);
Bmp := B; //wird ignoriert
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Bmp: TBitmap;
begin
Bmp := TBitmap.Create;
ListBox1.Items.AddObject('Blablabla', Bmp);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
Bmp: TBitmap;
begin
Test(ListBox1, Bmp);
Bmp.Width := 100;
Bmp.Height := 50;
Bmp.Canvas.Rectangle(Bmp.Canvas.ClipRect);
Canvas.Draw(0, 0, Bmp);
//... das Free lasse ich hier mal weg
end;
Sonderbarerdweise funktioniert die Prozedur "Test" nicht wie ich es mir vorstelle. Parameter "Bmp" ist TBitmap, ein Zeiger, kein Wert, ein "var" für Rückgabe ist ja somit nicht nötig. Das problem ist aber, dass ohne "var" die letzte Zeile vom Compiler entfernt/ignoriert wird.
Mein Frage ist, ist mir da was entgangen oder ist das ein Fehler vom Compiler?