Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Funktion erwartet unbekannten Parameter
ConditionZero - Sa 05.09.09 14:06
Titel: Funktion erwartet unbekannten Parameter
Tag,
Habe heute morgen mit dem Grundgerüst eines neuen Spiel begonnen.
Bei einer simplen Funktion wird jedoch ein Parameter verlangt, den ich in der Kopfzeile nicht angegeben habe. Hoffe ihr könnt helfen :)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| function TForm2.GetBitmapMitte(ABitmap: Bitmap): TPoint; begin result.X:= ABitmap.bmWidth div 2; result.Y:= ABitmap.bmHeight div 2; end;
procedure TForm2.FormCreate(Sender: TObject); begin DoubleBuffered:= true;
Image1.Left:= ShapeD4.Left + GetBitmapMitte.X(ShapeD4) - GetBitmapMitte.X(Image1.Picture.Bitmap); Image1.Top:= ShapeD4.Top + GetBitmapMitte.Y(ShapeD4) - GetBitmapMitte.Y(Image1.Picture.Bitmap);
end; |
Grüße Zero
alzaimar - Sa 05.09.09 14:11
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| function TForm2.GetBitmapMitte(ABitmap: Bitmap): TPoint; begin result.X:= ABitmap.bmWidth div 2; result.Y:= ABitmap.bmHeight div 2; end;
procedure TForm2.FormCreate(Sender: TObject); Var M1, M2 : TPoint; begin DoubleBuffered:= true; M1 := GetBitmapMitte(ShapeD4); M2 := Image1.Picture.Bitmap; Image1.Left:= ShapeD4.Left + M1.X - M2.X; Image1.Top:= ShapeD4.Top + M1.Y - M2.Y; end; |
Delete - Sa 05.09.09 14:11
Ist ShapeD4 eine Bitmap? Wenn es ein TShape ist, worauf der Name hindeutet, geht das natürlich nicht, da die Funktion ja eine Bitmap erwartet.
ConditionZero - Sa 05.09.09 14:17
DeddyH hat folgendes geschrieben : |
| Ist ShapeD4 eine Bitmap? Wenn es eiin TShape ist, worauf der Name hindeutet, geht das natürlich nicht, da die Funktion ja eine Bitmap erwartet. |
Hoppla, hatte ich nicht drauf geachtet, danke :roll:
Gibt es denn einen Typ, der allgemein auf Objekte angewandt werden kann?
Habe hier gerade kein Delphi, ca. in 10 Minuten aber. Die Version von alzaimar hat dann doch das selbe Problem, oder?
Danke für die schnellen Antworten, ging ja echt flott :D
Grüße Zero
PS:
geht das? :?:
//Edit2: Die Shapes sind jetzt nur zur Visualisierung des Rasters (für spätere Pfadfindung) und wird später durch ein 2-Dimensionales Array ersetzt; Nur am Rande.
Delete - Sa 05.09.09 14:27
Es kommt nun darauf an, ob Du die Breite des TImage haben willst oder diejenige der enthaltenen Grafik, die beiden können ja unterschiedlich sein. Wenn Ersteres, könntest Du es mal mit TControl versuchen.
ConditionZero - Sa 05.09.09 14:31
DeddyH hat folgendes geschrieben : |
| Es kommt nun darauf an, ob Du die Breite des TImage haben willst oder diejenige der enthaltenen Grafik, die beiden können ja unterschiedlich sein. Wenn Ersteres, könntest Du es mal mit TControl versuchen. |
Breite und Höhe des Images sin immer identisch mit der, der enthaltenen Grafik.
Installiere gerade Delphi, kanns gleich probieren.
Danke schonmal
Gebe gleich Rückmeldung
Grüße Zero
// Edit:
So habe jetzt mal 2 Varianten zum testen probiert:
1.
Parameter wie davor als Bitmap definiert und versucht die Funktion mit einem Bitmap (woran der Fehler anscheinend lag) als Parameter aufzurufen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function TForm2.GetBitmapMitte(ABitmap: Bitmap): TPoint; begin result.X:= ABitmap.bmWidth div 2; result.Y:= ABitmap.bmHeight div 2; end;
procedure TForm2.FormCreate(Sender: TObject); begin DoubleBuffered:= true;
Image1.Left:= GetBitmapMitte.X(Image1.Picture.Bitmap); end; |
Fehler: Nicht genügend wirkliche Parameter
2.
Parameter als TControl definiert und versucht mit einem Shape als Parameter die Funktion aufzurufen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function TForm2.GetBitmapMitte(ABitmap: TControl): TPoint; begin result.X:= ABitmap.Width div 2; result.Y:= ABitmap.Height div 2; end;
procedure TForm2.FormCreate(Sender: TObject); begin DoubleBuffered:= true;
Image1.Left:= GetBitmapMitte.X(ShapeD4); end; |
//Und wieder ein Nachtrag..
Das hat Funktioniert, bringt mir aber so nichts..
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| function TForm2.GetBitmapMitte(ABitmap: TControl): TPoint; begin result.X:= ABitmap.Width div 2; result.Y:= ABitmap.Height div 2;
end;
procedure TForm2.FormCreate(Sender: TObject); var P1: TPoint;
begin DoubleBuffered:= true;
P1:= GetBitmapMitte(ShapeD4);
end; |
Grüße Zero
uall@ogc - Sa 05.09.09 14:51
GetBitmapMitte.X(Image1.Picture.Bitmap);
-> GetBitmapMitte(Image1.Picture.Bitmap).X;
und besser ist das 2.
P1:= GetBitmapMitte(ShapeD4);
bla.left := P1.X;
bla.top := P1.Y
ConditionZero - Sa 05.09.09 15:11
Okay klappt alles wie gewollt 8)
Danke für die schnelle Hilfe an alle Antworter.
So sieht nun die fertige Funktion mit Aufruf aus. (Für Googler etc.)
Funktion um ein beliebiges Objekt exakt in die Mitte eines anderen Objekts zu legen
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| function TForm2.GetObjectMitte(aObject: TControl): TPoint; begin result.X:= aObject.Width div 2; result.Y:= aObject.Height div 2; end;
procedure TForm2.FormCreate(Sender: TObject); var P1,P2: TPoint;
begin P1:= GetObjectMitte(ShapeD4); P2:= GetObjectMitte(Image1); Image1.Left:= ShapeD4.Left + P1.X - P2.X; Image1.Top:= ShapeD4.Top + P1.Y - P2.Y;
end; |
Grüße Stuck
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!