AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Canvas löschen und Componente komplett neu zeichnen...
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Ares · begonnen am 28. Mär 2008 · letzter Beitrag vom 1. Apr 2008
 
Ares

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

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

  Alt 28. Mär 2008, 13: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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz