Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Objekt als Parameter; Fehler (https://www.delphipraxis.net/168358-objekt-als-parameter%3B-fehler.html)

Popov 17. Mai 2012 05:44

Objekt als Parameter; Fehler
 
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?

Furtbichler 17. Mai 2012 05:49

AW: Objekt als Parameter; Fehler
 
Der Zeiger wird doch verändert, also benötigst Du ein call by reference.

Wenn Du anstelle der Zuweisung z.B. 'B.AssignTo(Bmp)' geschrieben hättest, bräuchtest Du kein 'var'.
Zitat:

Zitat von Popov (Beitrag 1166890)
...oder ist das ein Fehler vom Compiler?

Nicht bei solch banalen Sachen.

Popov 17. Mai 2012 06:02

AW: Objekt als Parameter; Fehler
 
Stimmt, du hast Recht. Hab vor lauter Bäume wieder den Wald nicht gesehen.

Furtbichler 17. Mai 2012 06:04

AW: Objekt als Parameter; Fehler
 
Welcher Wald? ;-)

Popov 17. Mai 2012 06:11

AW: Objekt als Parameter; Fehler
 
War nur ein Beispiel. Das eigentlich Programm ist der Regenwald.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz