Procedura dla obiektu ze zmienną nazwą.

0

Otóż sprawa jest prosta.
Posiadam formatkę na której jest Panel do którego dodaję dynamicznie kolejne panele.
Na Panelu głównym na którym dodaję kolejne panele jest ustawiona procedura dla poruszania paneli.

Przykładowo:
OnClick dla utworzonego Panelu:

If Move_Active = false then 
  Move_Active := true
else
  Move_Active := false;

OnMove dla panelu głównego:

If Move_Active = true then
begin
  Panel01.Left := X;
  Panel01.Top := Y;
end;

Ale poruszać w tym panelu mogę tylko Panelem01, ale nie mogę innymi. Próbowałem przypisać TPanel(Sender).Left i TPanel(Sender).Right ale jest to odniesienie do aktywnego objektu, czyli panelu głównego. A jak chce w OnClick przypisać nazwę do zmiennej i potem ją odczytać Zmienna.Left := X; to wyrzuca błąd, gdyż widocznie nie mogę użyć zmiennej a jedynie objektu.
Nie chce tego robić Casem, czyli numer objektu of bo to będzie syzyfowa praca, gdyż utworzonych paneli może być 195, a dodatkowo nie da się przypisać nic do nie istniejącego jeszcze objektu.
Proszę o pomoc.

A jakby się ktoś pytał po co mi tyle paneli to odpowiedź jest taka: Tworzę gre w Delphi.

0

If Move_Active = false then
Move_Active := true
else
Move_Active := false;

Move_Active := not Move_Active;

gdyż utworzonych paneli może być 195
To chyba kiepski pomysł. Nie lepiej całą grę rysować na jednym?

1

wewnątrz klasy:

Active:TPanel;
Shift:TPoint;

OnMouseDown dla utworzonego Panelu:
Active:=Sender;
Shift:=GlownyPanel.ScreenToClient(TPanel(Sender).ClientToScreen(Point(X,Y)));

OnMouseUp dla utworzonego Panelu:
Active:=nil;

OnMove dla utworzonego Panelu:
P:TPoint;
P:=GlownyPanel.ScreenToClient(TPanel(Sender).ClientToScreen(Point(X,Y)));
OnMoveGlowny(GlownyPanel,Buttons,Shift,P.X,P.Y);

OnMove dla głównego Panelu:
R:TRect;
if Active<>nil then
begin
  R:=Active.BoundsRect;
  Inc(R.Left,X-Shift.X);
  Inc(R.Top,Y-Shift.Y);
  Active.BoundsRect:=R;
end;

Uwaga, pisane z palca.

1

jakby się ktoś pytał po co mi tyle paneli to odpowiedź jest taka: Tworzę gre w Delphi.

Ja się zapytam: po co tworzysz grę za pomocą komponentów przeznaczonych do tworzenia zwykłych aplikacji?
Po ludzku skorzystaj z jakiegoś silnika 2D/3D.

1 użytkowników online, w tym zalogowanych: 0, gości: 1