Autor Beitrag
ConditionZero
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 190

Win XP
Delphi 7 PE, C++ (Dev-C++), HTML+PHP (Dreamweaver MX), JavaScript(MS FrontPage)
BeitragVerfasst: Sa 05.09.09 13:06 
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 :)

ausblenden 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);


  (*
  //Alternativ
  Image1.Left:= ShapeD4.Left + (ShapeD4.Width div 2) - (Image1.Width div 2);
  Image1.Top:= ShapeD4.Top + (ShapeD4.Height div 2) - (Image1.Height div 2);
  *)

end;



Grüße Zero
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Sa 05.09.09 13:11 
ausblenden 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;

_________________
Na denn, dann. Bis dann, denn.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 05.09.09 13: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.


Zuletzt bearbeitet von DeddyH am Sa 05.09.09 13:27, insgesamt 1-mal bearbeitet
ConditionZero Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 190

Win XP
Delphi 7 PE, C++ (Dev-C++), HTML+PHP (Dreamweaver MX), JavaScript(MS FrontPage)
BeitragVerfasst: Sa 05.09.09 13:17 
user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden Delphi-Quelltext
1:
2:
var
aObject: Object;

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.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 05.09.09 13: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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 190

Win XP
Delphi 7 PE, C++ (Dev-C++), HTML+PHP (Dreamweaver MX), JavaScript(MS FrontPage)
BeitragVerfasst: Sa 05.09.09 13:31 
user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
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.

ausblenden 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.

ausblenden 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..

ausblenden 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;



//result.X:= ABitmap.bmWidth div 2;
//result.Y:= ABitmap.bmHeight div 2;
end;

procedure TForm2.FormCreate(Sender: TObject);
var
P1: TPoint;

begin
DoubleBuffered:= true;

P1:= GetBitmapMitte(ShapeD4);

  //Image1.Left:= ShapeD4.Left + GetBitmapMitte.X(ShapeD4) - GetBitmapMitte.X(Image1.Picture.Bitmap);
  //Image1.Top:= ShapeD4.Top + GetBitmapMitte.Y(ShapeD4) - GetBitmapMitte.Y(Image1.Picture.Bitmap);



  //Alternativ
  //Image1.Left:= ShapeD4.Left + (ShapeD4.Width div 2) - (Image1.Width div 2);
  //Image1.Top:= ShapeD4.Top + (ShapeD4.Height div 2) - (Image1.Height div 2);

end;



Grüße Zero
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Sa 05.09.09 13: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

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
ConditionZero Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 190

Win XP
Delphi 7 PE, C++ (Dev-C++), HTML+PHP (Dreamweaver MX), JavaScript(MS FrontPage)
BeitragVerfasst: Sa 05.09.09 14: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
ausblenden 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;


  //Alternativ
  //Image1.Left:= ShapeD4.Left + (ShapeD4.Width div 2) - (Image1.Width div 2);
  //Image1.Top:= ShapeD4.Top + (ShapeD4.Height div 2) - (Image1.Height div 2);

end;




Grüße Stuck