Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Zeichen auf Paintbox aus Klasse geht nicht

  Alt 24. Nov 2003, 17:59
Folgendes Ich habe mir eine Zeichenroutine gemacht. Was sie zeichnet ist egal, es werden nur GDI Zeichenfunktionen aufgerufen. Dies habe ich in eine Klasse gekapselt. Diese sieht wie folgt aus:
Delphi-Quellcode:
type
  TGun = class
  private
    FDC: HDC;
    FGunPosition: TPoint;
    FDegree: Cardinal;
    FGunEndPoints: TPoint;
    procedure GunEndPoints(Degree: Cardinal);
    procedure DrawMuzzle(Degree: Cardinal);
  public
    constructor Create(DC: HDC);
    property DC: HDC read FDC;
    procedure DrawMount(pt: TPoint);
    property Degree: Cardinal read FDegree write DrawMuzzle;
    property GunEndPoint: TPoint read FGunEndPoints;
  end;

implementation

constructor TGun.Create(DC: HDC);
begin
  FDC := DC;
end;

procedure TGun.DrawMount(pt: TPoint);
var
  Pen, PenOld: HPen;
  GreyBrush, GreyBrushOld: HBrush;
begin
  Pen := CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
  PenOld := SelectObject(FDC, Pen);
  GreyBrush := CreateSolidBrush(RGB(240, 240, 240));
  GreyBrushOld := SelectObject(FDC, GreyBrush);
  Rectangle(FDC, FGunPosition.X, FGunPosition.Y, FGunPosition.X - 20,
    FGunPosition.Y - 7);
  Chord(FDC, FGunPosition.X - 1, FGunPosition.Y + 19, FGunPosition.X - 19,
    FGunPosition.Y - 14,
    FGunPosition.X - 4, FGunPosition.Y - 5, FGunPosition.X - 16, FGunPosition.Y
      - 5);
  SelectObject(FDC, GreyBrushOld);
  DeleteObject(GreyBrush);
  SelectObject(FDC, PenOld);
  DeleteObject(Pen);
end;

procedure TGun.GunEndPoints(Degree: Cardinal);
begin
  FGunEndPoints.X := Round(cos(Degree / 180 * Pi) * LENMUZZLE);
  FGunEndPoints.Y := Round(sin(Degree / 180 * Pi) * LENMUZZLE);
end;

procedure TGun.DrawMuzzle(Degree: Cardinal);
begin
  GunEndPoints(Degree);
  MoveToEx(FDC, FGunPosition.X-10, FGunPosition.Y-12, nil);
  LineTo(FDC, FGunPosition.X-10+FGunEndPoints.X, FGunPosition.Y-FGunEndPoints.Y-12);
end;
Aufrufen tue ich sie wie folgt:
Delphi-Quellcode:
procedure TForm1.btnStartClick(Sender: TObject);
var
  pt: TPoint;
  Gun: TGun;
begin
  Gun := TGun.Create(PaintBox1.Canvas.Handle);
  try
    pt.X := 106;
    pt.Y := PaintBox1.Height - 20;
    Gun.DrawMount(pt);
    Gun.Degree := 45;
  finally
    FreeAndNil(Gun);
  end;
end;
Aber ich sehe nichts. Ich bekomme als letzten Fehler:
Zitat von Der dumme blöde Debugger:
'Ein Aufruf einer Betriebssystemfunktion ist fehlgeschlagen'.
Ich bin etwas rat los.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat