AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Zeichnen sowie ab wann ist alles verfügbar?

Ein Thema von Memnarch · begonnen am 19. Mai 2011 · letzter Beitrag vom 20. Mai 2011
Antwort Antwort
Benutzerbild von Luckie
Luckie

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

AW: Zichenen sowie ab wann ist alles verfügbar?

  Alt 20. Mai 2011, 07:22
muss ich danach per Refresh das onPaint triggern?(Sonst wird ja erst wieder gezeichnen wenn windows es benötigt bzw die vcl)
Richtig. Du kannst das ganze natürlich auch von Hand auslösen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.785 Beiträge
 
Delphi 12 Athens
 
#2

AW: Zichenen sowie ab wann ist alles verfügbar?

  Alt 20. Mai 2011, 07:29
Grundsätzlich sollte bei einer PaintBox immer über Invalidate das OnPaint getriggert werden und alle Zeichenoperationen finden ausschließlich im OnPaint statt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#3

AW: Zichenen sowie ab wann ist alles verfügbar?

  Alt 20. Mai 2011, 08:36
@Uwe: Das heißt aber dass ich meinen Buffer aber auch woanders füllen kann, das zeichnen auf den canvas der Paintbox selbst sollte dann dort stehen, oder?


MFG
Memnarch
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.785 Beiträge
 
Delphi 12 Athens
 
#4

AW: Zichenen sowie ab wann ist alles verfügbar?

  Alt 20. Mai 2011, 08:52
@Uwe: Das heißt aber dass ich meinen Buffer aber auch woanders füllen kann, das zeichnen auf den canvas der Paintbox selbst sollte dann dort stehen, oder?
Genau!
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#5

AW: Zichenen sowie ab wann ist alles verfügbar?

  Alt 20. Mai 2011, 09:04
Ah gut....vielleicht bekomm ich mein Tool jetzt endlich mal gefixxed. v1.3 lässt wegen dem fehler schon auf sich warten
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#6

AW: Zichenen sowie ab wann ist alles verfügbar?

  Alt 20. Mai 2011, 09:41
Eine bischen gespielt...
Delphi-Quellcode:
unit UPaintboxBuffer;

interface

uses
  ExtCtrls, Graphics;

type
  TPaintboxBuffer = class
  private
    FPaintBox : TPaintBox;
    FBitmapA,
    FBitmapB : TBitmap;
    FWorkBmp : TBitmap; // either FBitmapA or FBitmapB
    procedure CreateBitmap(var Bmp : TBitmap; W, H : Integer);
    procedure OnPaintHandler(Sender: TObject);
  public
    constructor Create(APaintBox : TPaintBox);
    destructor Destroy;
    procedure SwitchBitmap;
    property Bitmap : TBitmap read FWorkBmp;
  end;

implementation

constructor TPaintboxBuffer.Create(APaintBox : TPaintBox);
begin
  FPaintBox := APaintBox;
  CreateBitmap(FBitmapA, FPaintBox.Width, FPaintBox.Height);
  CreateBitmap(FBitmapB, FPaintBox.Width, FPaintBox.Height);
  FWorkBmp := FBitmapA;
  FPaintBox.OnPaint := OnPaintHandler;
end;

procedure TPaintboxBuffer.CreateBitmap(var Bmp : TBitmap; W, H : Integer);
begin
  Bmp := TBitmap.Create;
  Bmp.Width := W;
  Bmp.Height := H;
end;

destructor TPaintboxBuffer.Destroy;
begin
  FPaintBox.OnPaint := NIL;
  FBitmapA.Free;
  FBitmapB.Free;
end;

procedure TPaintboxBuffer.OnPaintHandler(Sender: TObject);
begin
  FPaintBox.Canvas.StretchDraw(FPaintBox.Canvas.ClipRect, FWorkBmp);
end;

procedure TPaintboxBuffer.SwitchBitmap;
begin
  if FWorkBmp = FBitMapA then
    FWorkBmp := FBitMapB
  else
    FWorkBmp := FBitMapA;
  FPaintBox.Invalidate;
end;

end.
Beispiel:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  p : Pointer;
  s : String;
begin
  Timer1.Enabled := False;
  with PaintBoxBuffer do
  begin
    // Bitmap füllen
    p := Bitmap;
    s := DateTimeToStr(Now) +' Used Bitmap: $'+ IntToHex(Integer(p), 8);
    Bitmap.Canvas.FillRect(Bitmap.Canvas.ClipRect);
    Bitmap.Canvas.TextOut(10,10, s);
    // umschalten
    SwitchBitmap;
  end;
  Timer1.Enabled := True;
end;
Falls das nichts mit dem Ausgangs-Problem zu tun hat oder anderweitig unpassend ist... egal, hat mich von meiner regulären Arbeit abgehalten, wodurch sich das für mich schon gelohnt hat

Geändert von Satty67 (20. Mai 2011 um 09:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#7

AW: Zichenen sowie ab wann ist alles verfügbar?

  Alt 20. Mai 2011, 11:03
wenn du mir kurz erklärst warum du im hintergund immer die birmaps Bitmaps switched?
den wenn beim ersten mal auf A gezeichnet wird, und beim zweiten mal auf B, ist der inhalt ja nicht gleich ..oder? o.O
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#8

AW: Zichenen sowie ab wann ist alles verfügbar?

  Alt 20. Mai 2011, 12:51
Ändere mal bitte deinen Titel. So bekommt man Augenkrebs
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08:37 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