Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Paintbox Buffer (https://www.delphipraxis.net/157734-paintbox-buffer.html)

Dunkelbunt27 23. Jan 2011 10:12

Paintbox Buffer
 
Hallo Delphi Praxis,

ich möchte in meinem Programm zwei Paintboxen benutzen. Auf die eine wird gezeichnet, und auf die andere Wenn die erste fertig ist.
Mein Problem ist, dass ich die Fehlermeldung: "TPaintbox kann nicht zu TPaintbox zugewiesen werden".

Hier der Code im Beispiel:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Paintbox1         :=TPaintbox.Create(self);    
  Paintbox1.Parent :=Panel1;                      

  Paintbox2         :=TPaintbox.Create(Self);
  Paintbox2.Parent :=Panel;

  zeichne;
end;
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
      VK_DOWN : begin
                  verschieben_nach_unten;               //eigentlicher Code unwichtig
                  zeichne;                              // Paintbox1 wird bezeichnet
                  Paintbox2.Assign(Paintbox1);
                end;
      VK_UP  : begin
                  verschieben_nach_oben;                //eigentlicher Code unwichtig
                  zeichne;                              // Paintbox1 wird bezeichnet
                  Paintbox2.Assign(Paintbox1);
                end;
  end;
end;
Immer wenn er den Inhalt der Paintbox1 auf Paintbox2 per Assign übertragen soll (also bei Pfeiltastenklick) kommt die Fehlermeldung...

Ich hoffe jemand weiß Hilfe.

FG Dunkelbunt

Luckie 23. Jan 2011 10:14

AW: Paintbox Buffer
 
Nimm ein Bitmap im Speicher.

Klaus01 23. Jan 2011 10:16

AW: Paintbox Buffer
 
Guten Morgen,

versuche mal
Delphi-Quellcode:
Paintbox2.picture.assign(Painbox1.picture);

Sorry. Paintbox.picture gibt es nicht.
Grüße
Klaus

himitsu 23. Jan 2011 10:16

AW: Paintbox Buffer
 
Die Paintbox kennt ihr Bild nicht ... sieh' die PaintBox einfach nur als "Nur-Ausgabe-Gerät" an, also nur als Stift.

Mit 'nem Stift kannst du malen, aber nicht das Bild abfragen.

@Klaus, ich glaub du bist beim TImage gelandet, mit deinem Picture :wink:

Dunkelbunt27 23. Jan 2011 10:31

AW: Paintbox Buffer
 
Ich versuche jetzt mal ein Bitmap zu benutzen. Wenn ich nicht zurecht komme meld ich mich wieder ;D

<Edit>
Ich habe jetzt folgendes Hinzugefügt:
Delphi-Quellcode:
  Bitmap:=TBitmap.Create;
  Bitmap.PixelFormat := pf32bit;                      
  Bitmap.Width:=Paintbox1.Width;
  Bitmap.Height:=Paintbox1.Height;
Delphi-Quellcode:
procedure speichern;
begin
    Bitmap.Canvas.CopyRect(Bounds(0,0,bitmap.Width, Bitmap.Height),
    Paintbox1.Canvas, Schreibflaeche.ClientRect);
    Bitmap.SaveToFile('Bild.bmp');
    Bitmap.Free;
end;
Jetzt kommt die Fehlermeldung: "TBitmap kann nicht zu TPaintbox zugewiesen werden."

Was ist falsch?
</Edit1>

<Edit2>
Ich bin mir ziemlich sicher, dass der Fehler in speichern; liegt.
</Edit2>

Luckie 23. Jan 2011 11:00

AW: Paintbox Buffer
 
http://www.michael-puff.de/Programmi...enBitmap.shtml

Dunkelbunt27 23. Jan 2011 15:25

AW: Paintbox Buffer
 
Immer wenn das Programm
Delphi-Quellcode:
Paintbox2.Assign(Bitmap);
machen soll kommt die besagte Fehlermeldung: "TBitmap kann nicht zu TPaintbox zugeweisen werden."
Bitmap speichert den Inhalt der Paintbox1. Die Paintbox2 soll diesen Inhalt kopieren.
Muss man vielleicht Bitmap noch irgendwie konvertieren, so dass TPaintbox das nutzen kann?

Namenloser 23. Jan 2011 15:32

AW: Paintbox Buffer
 
Delphi-Quellcode:
BitBlt(PaintBox.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, Bitmap.Canvas.Handle, 0, 0, SRCCOPY)

sx2008 23. Jan 2011 15:54

AW: Paintbox Buffer
 
Es ist keine gute Idee, das Bild einer Paintbox kopieren zu wollen.
Eine Paintbox ist eine reine Einbahnstrasse: ein virtuelles Modell wird gezeichnet und angezeigt.
Ausserdem ist es überhaupt nicht nötig dies zu tun.
Man kann das virtuelle Modell ja jederzeit neu zeichnen.
Entscheidend dabei ist, dass man der Zeichne-Procedure den Canvas als Parameter übergibt:
Delphi-Quellcode:
procedure TForm1.Zeichne(canvas:TCanvas);
begin
  canvas.FillRect(....);
  ....
end;
Ausserdem, und das die das Wichtigste bei einer Paintbox, darf man nur innerhalb
des Event OnPaint auf die Paintbox zeichnen.
Delphi-Quellcode:
procedure TForm1.Paintbox1OnPaint(Sender:TObject);
begin
  Zeichne((Sender as TPaintbox).Canvas);
end;

Dunkelbunt27 23. Jan 2011 19:16

AW: Paintbox Buffer
 
Ich melde mich nochmal, weil was ich versuche noch nicht erreicht ist.
Ich möchte das Flackern meiner Paintbox unterbinden. Es kommt zustande, wenn schnell umgezeichnet werden muss (bei mir ist es eine Art scrollen, was dies auslöst). Dazu soll erst auf eine 2.Paintbox gezeichnet werden und erst wenn die fertig ist auf die erste, so soll lückenlos kein Flackern entstehen.

ich hoffe jetzt weiß jemand eine Lösung.

FG Dunkelbunt


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:16 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz