Einzelnen Beitrag anzeigen

Furtbichler
(Gast)

n/a Beiträge
 
#2

AW: Ranking Komponente gesucht, bzw. wie kann man sowas umsetzen?

  Alt 10. Aug 2013, 14:33
Da das sehr einfach umzusetzen ist, würde ich es mal eben selbst bauen. Du kannst auch einfach einen weißen und einen roten Stern als Bitmap nehmen und die dann hintereinander zeichnen.

Vielleicht verwendest Du einfach eine TPaintbox und überschreibst sowohl die Click- als auch die Paint-Methode. Die OnClick-Methode nimmt Maus-X, relativ zur Paintbox und teilt sie durch 5. das ist die Anzahl der Sterne (+1), die die Paint-Methode dann zeichnen muss.

Eine Form, eine Paintbox und eine Imagelist mit zwei Bitmaps: Weißer und gelber Stern.

Delphi-Quellcode:
Procedure TForm14.PaintBoxClick(Sender: TObject);
Var
  p: TPoint;
  pb: TPaintBox;

Begin
  pb := Sender As TPaintBox;
  p := pb.ScreenToClient(Mouse.CursorPos);
  pb.tag := p.x Div (pb.Width Div 5);
  pb.Invalidate;
End;

Procedure TForm14.PaintBoxPaint(Sender: TObject);
Var
  stars: Integer;
  canvas: TCanvas;
  bounds: TRect;
  I, wd: Integer;

  Procedure _PaintStar(PaintClickedStar: Boolean; x: Integer);
  Var
    imageIndex: Integer;

  Begin
    If PaintClickedStar Then
      imageIndex := 1
    Else imageIndex := 0;

    ImageList.Draw(canvas, x + 2, 2, imageIndex, dsTransparent, itImage);
  End;
Begin

  canvas := (Sender As TPaintBox).Canvas;
  stars := (Sender As TPaintBox).Tag;
  bounds := (Sender As TPaintBox).BoundsRect;
  OffsetRect(bounds, -bounds.left, -bounds.top);
  canvas.Brush.Color := clWhite;
  canvas.Rectangle(bounds);
  wd := bounds.Right Div 5;
  For I := 0 To 4 Do
    _PaintStar(i <= stars, i * wd);
End;
  Mit Zitat antworten Zitat