Thema: FreePascal Kollision Image Shape

Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Kollision Image Shape

  Alt 12. Apr 2017, 13:33
Ein kleines Beispiel(ungetestet):
Delphi-Quellcode:
function CanPosChanging(AControl: TControl; const ANewPos: TRect): Boolean;
var
  lControl: TControl;
  lRect: TRect;
begin
  // Überschneidung mit Shape ist unzulässig
  if Assgined(AControl.Parent) then
  begin
    for lControl in AControl.Parent.Controls do
    begin
      if lControl is TShape then
      begin
        if IntersectRect(lRect, lControl.BoundsRect, ANewPos) then
        begin
          Result := False;
          Exit;
        end;
      end;
    end;
  end;
  Result := True;
end;

procedure DoPosChanging(AControl: TControl; const ANewPos: TRect);
begin
  if CanPosChanging(AControl, ANewPos) then
    AControl.BoundsRect := ANewPos;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  dx, dy: Integer;
  lNewPos: TRect;
begin
  dx := 0;
  dy := 0;
  case Key of
    VK_UP: dy := -1;
    VK_DOWN: dy := +1;
    VK_Left: dx := -1;
    VK_RIGHT: dx := +1
  else
    Exit;
  end;
  // Testendruck nicht an anderer Stelle weiter verarbeiten
  Key := 0;

  lNewPos := MyImage.BoundsRect;
  OffsetRect(lNewPos, dx, dy);
  DoPosChanging(MyImage, lNewPos);
end;
  Mit Zitat antworten Zitat