Einzelnen Beitrag anzeigen

hadschi92

Registriert seit: 25. Okt 2006
83 Beiträge
 
Delphi XE3 Professional
 
#72

Re: RiB - Reflect it Baby

  Alt 28. Aug 2009, 10:35
Ich muss sagen das Programm macht einem Spaß, es ist echt super gemacht

So, ich möchte ein Stück Code aus deinem Quelltext "klauen" bzw. verstehen. Und zwar handelt es sich um die Funktion, dass ein Objekt mit einem Auswahlrahmen umgeben wird wenn man darüber fährt. So wie es aussieht hast du das mit einem Timer gelöst, mir erschließt sich jedoch nicht wie du den Rahmen zeichnest.

Hier der Ausschnitt:

Delphi-Quellcode:
procedure TScene.OnStippleTimer(Sender: TObject);
begin
  if Assigned(FMouseOver) then
  begin
    FStippleCount := FStippleCount + 0.4;
    DrawFrame;
    Redraw;
  end
  else
  begin
    DrawFrame;
    Redraw;
    FStippleTimer.Enabled := false;
  end;
end;

procedure TScene.DrawFrame;
var
  sel, moov: TFloatRect;
begin
  FFrameBMP.Clear(0);
  FFrameBMP.BeginUpdate;
  if Assigned(FSelection) then
  begin
    sel := FSelection.Rect;
    FFrameBMP.LineS(round(sel.Left), round(sel.Top), round(sel.Right), round(sel.Top), Color32(0,127,255));
    FFrameBMP.LineS(round(sel.Right), round(sel.Top), round(sel.Right), round(sel.Bottom), Color32(0,127,255));
    FFrameBMP.LineS(round(sel.Right), round(sel.Bottom), round(sel.Left), round(sel.Bottom), Color32(0,127,255));
    FFrameBMP.LineS(round(sel.Left), round(sel.Bottom), round(sel.Left), round(sel.Top), Color32(0,127,255));
  end;

  if Assigned(FMouseOver) then
  begin
    moov := FMouseOver.Rect;
    FFrameBMP.StippleCounter := FStippleCount;
    FFrameBMP.LineFSP(round(moov.Left), round(moov.Top), round(moov.Right), round(moov.Top));
    FFrameBMP.LineFSP(round(moov.Right), round(moov.Top), round(moov.Right), round(moov.Bottom));
    FFrameBMP.LineFSP(round(moov.Right), round(moov.Bottom), round(moov.Left), round(moov.Bottom));
    FFrameBMP.LineFSP(round(moov.Left), round(moov.Bottom), round(moov.Left), round(moov.Top));
  end;
  FFrameBMP.EndUpdate;
end;

procedure TScene.Redraw;
begin
  FObjectBMP.DrawTo(Display);
  FFieldBMP.DrawTo(Display);
  FFrameBMP.DrawTo(Display);
  Control.Refresh;
end;
  Mit Zitat antworten Zitat