Einzelnen Beitrag anzeigen

Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#3

Re: Canvas löschen und Componente komplett neu zeichnen...

  Alt 28. Mär 2008, 14:23
Die Paint Methode habe ich unten eingefügt. MemoyBitmap soll verwendet werden um ohne Flackern zu zeichnen. Hiermit gibt es aber noch Probleme (siehe mein anderer Beitrag), daher habe ich dass alles rausgenommen.

Delphi-Quellcode:
procedure TMyPNGButton.Paint;
var
  FTransColor : TColor;
  FImageList : TImageList;
  sourceRect, destRect: TRect;
  tempGlyph, memoryBitmap: TBitmap;
  Offset: TPoint;

  ButtonImage: TPNGObject;
  ImageSize: TSize;
begin
  // Transparenzfarbe des Glyph festlegen
  FTransColor := FGlyph.Canvas.Pixels[0, FGlyph.Height - 1];

  // Memory-Bitmap um ohne Flackern zu zeichnen...
  //memoryBitmap := TBitmap.Create;
  try
    //memoryBitmap.Height := ClientRect.Bottom;
    //memoryBitmap.Width := ClientRect.Right;
    {memoryBitmap.}Canvas.Brush.Style := bsClear;
    {memoryBitmap.}Canvas.Font.Assign(Self.Font);

    // Button Image auswählen und Zeichnen
    case FState of
      bsUp: begin
        if FMouseInControl then begin
          if (FImageOver.Empty=false) then
            ButtonImage := FImageOver
          else
            ButtonImage := FImageNormal;
        end else begin
          ButtonImage := FImageNormal;
        end;
      end;
      bsDown, bsExclusive: begin
        if (FImageDown.Empty=false) then
          ButtonImage := FImageDown
        else
          ButtonImage := FImageNormal;
      end;
      bsDisabled: begin
        if (FImageDisabled.Empty=false) then
          ButtonImage := FImageDisabled
        else
          ButtonImage := FImageNormal;
      end;
    end;

    {memoryBitmap.}Canvas.Draw(0, 0, ButtonImage);

    // Glyph zeichnen
    if not FGlyph.Empty then
      (...)
    end;

    // DrawText
    {memoryBitmap.}Canvas.Brush.Style := bsClear;
    DrawText({memoryBitmap.}Canvas.Handle, PChar(Caption), Length(Caption), TextBounds, DT_CENTER or DT_VCENTER or DT_SINGLELINE);

    // Memoy-Bitmap ausgeben
    //canvas.CopyRect(ClientRect, memoryBitmap.canvas, ClientRect);
  finally
    //memoryBitmap.free;
  end;
end;
  Mit Zitat antworten Zitat