Registriert seit: 5. Dez 2002
269 Beiträge
|
Re: Canvas löschen und Componente komplett neu zeichnen...
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;
|
|
Zitat
|