Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Paintbox sichtbar machen (https://www.delphipraxis.net/130968-paintbox-sichtbar-machen.html)

Code46 16. Mär 2009 22:13


Paintbox sichtbar machen
 
ich habe mal da eine frage und zwar ich schreibe gerade ein Programm wie MS-Paint oder soll so ähnlich sein. Ich weis jetzt nicht genau weiter wie ich die Paintbox sichtbare mache oder die Farbe verändere. Könnt ihr mir vielleicht weiter helfen würde mich sehr freuen.

blink182 16. Mär 2009 22:59

Re: Paintbox sichtbar machen
 
Delphi-Quellcode:
paintbox1.canvas.brush.color:=clwhite;
paintbox1.Canvas.FillRect(Rect(0,0,paintbox1.width,paintbox1.height));
?

jaenicke 16. Mär 2009 23:12

Re: Paintbox sichtbar machen
 
Crossposts solltest du angeben:
http://forum.delphi-treff.de/showthread.php?t=26135
Grund: So kann man schauen, ob vielleicht woanders schon das geantwortet wurde, was man selber sich gerade überlegen und posten wollte. Dann kann man sich das sparen oder vielleicht das ergänzen.

Code46 16. Mär 2009 23:21

Re: Paintbox sichtbar machen
 
wo muss ich den Code einbinden??? [delphi]
paintbox.canvas.brush.color:=clwhite;
paintbox.Canvas.FillRect(Rect(0,0,paintbox.width,p aintbox.height));


Ich würde mich auf antworten sehr freuen.

Danke an euch.

blink182 16. Mär 2009 23:23

Re: Paintbox sichtbar machen
 
je nach dem wenn du die Komponente zur Laufzeit erstellst, nach der Erstellung sonst nach dem Form-Create und beim "löschen" bzw "neu erstellen"

Code46 16. Mär 2009 23:26

Re: Paintbox sichtbar machen
 
sorry aber ich habe nicht genau verstaden was du meinst.

mein code sieht im moment so aus:





unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ColorGrd, StdCtrls;

type
TForm1 = class(TForm)
PaintBox: TPaintBox;
Btn_Clearall: TButton;
procedure Mousmove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
procedure Btn_ClearallClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;
x,y: integer;

implementation

{$R *.dfm}

procedure TForm1.Mousmove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ssleft in shift then PaintBox.Canvas.LineTo(x,y);
end;

procedure TForm1.MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
PaintBox.Canvas.MoveTo(x,y);

end;

procedure TForm1.Btn_ClearallClick(Sender: TObject);
begin
PaintBox.Invalidate;
end;

end.

blink182 16. Mär 2009 23:32

Re: Paintbox sichtbar machen
 
Delphi-Quellcode:
procedure TForm1.Btn_ClearallClick(Sender: TObject);
begin
// hier kannst du es einfügen
end;


// bzw hier solltest du es einfügen :

procedure TForm1.FormCreate(Sender: TObject);
begin
// hier
end;

Code46 16. Mär 2009 23:40

Re: Paintbox sichtbar machen
 
funktioniert nicht wie du das meinst

Delphi-Quellcode:
procedure TForm1.Btn_ClearallClick(Sender: TObject);
begin
PaintBox.Invalidate;
paintbox.canvas.brush.color:=clwhite;
paintbox.Canvas.FillRect(Rect(0,0,paintbox.width,paintbox.height));
end;

// wie soll ich das denn hier angeben das muss ja in eine Procedure rein???


procedure TForm1.FormCreate(Sender: TObject);
begin
paintbox.canvas.brush.color:=clwhite;
paintbox.Canvas.FillRect(Rect(0,0,paintbox.width,paintbox.height));
end;

blink182 16. Mär 2009 23:46

Re: Paintbox sichtbar machen
 
weiß jetzt nicht ganz was du willst, wie man das OnFormCreate-Ereignis erstellt oder was? Doppelklick auf die Form

Code46 16. Mär 2009 23:48

Re: Paintbox sichtbar machen
 
Das ding ist ich will einfach nur die Hintergrund farbe der Paintbox WEIß haben. Das ist alles

blink182 16. Mär 2009 23:53

Re: Paintbox sichtbar machen
 
mhm der Code färbt doch deine Paintbox weiß, ich weiß jetzt nicht wo dein Problem ist, dann mach dir einen Button und schreib den Code im OnClick-Ereignis darein

Code46 16. Mär 2009 23:58

Re: Paintbox sichtbar machen
 
PERFEKT danke dir. Wars mir eine große hilfe.

Aber habe noch eine frage mit dem Colorgrid. Wie kann ich die farben eizenlt auswählen und abfragen??

blink182 17. Mär 2009 00:03

Re: Paintbox sichtbar machen
 
im OnChange Ereignis von dem ColorGrid kannst du dann

Delphi-Quellcode:
paintbox1.canvas.brush.color:=ColorGrid1.BackgroundColor;
und zum malen vllt

Delphi-Quellcode:
paintbox1.canvas.pen.color:=ColorGrid1.ForegroundColor;
aber wie du möchtest ;)

aber was auch vllt ganz gut wäre, wäre der ColorDialog:

Delphi-Quellcode:
if ColorDialog1.execute then
paintbox1.canvas.brush.color:=ColorDialog1.Color;

Code46 17. Mär 2009 00:10

Re: Paintbox sichtbar machen
 
DANKEEEEEEEEEEE aber :-D das mit dem ColorDialog für das muss ich doch eine eigen Procedure schreiben oder????

blink182 17. Mär 2009 00:25

Re: Paintbox sichtbar machen
 
mhm die abfrage kannst du ja auch in dem button machen, wie du willst ;)
Delphi-Quellcode:
if ColorDialog1.execute then
paintbox1.canvas.brush.color:=ColorDialog1.Color
else
paintbox1.canvas.brush.color:=clwhite;
paintbox1.Canvas.FillRect(Rect(0,0,paintbox1.width,paintbox1.height));
wobei colorgrid die auswahl derfarben sehr gering ist ;) bei 16/255^3 Farben :D

hab noch eben was anderes probiert (wenn du jetzt das 4*4 ColorGrid hast und du dann unten rechts hinclickst kannst du noch ne ander Farbe wählen, wie du willst)

Delphi-Quellcode:
procedure TForm1.ColorGrid1Click(Sender: TObject);
begin
if ColorGrid1.Selection=15 then
begin
if ColorDialog1.execute then
paintbox1.canvas.brush.color:=ColorDialog1.Color
else
paintbox1.canvas.brush.color:=clwhite;
end
else
paintbox1.canvas.brush.color:=ColorGrid1.ForeGroundColor;
// entweder du machst es noch mit einem Extra Button siehe unten oder du fügst hier die ZEile ein
// paintbox1.Canvas.FillRect(Rect(0,0,paintbox1.width,paintbox1.height));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
paintbox1.Canvas.FillRect(Rect(0,0,paintbox1.width,paintbox1.height));
end;
Gn8 blink182

Code46 17. Mär 2009 00:35

Re: Paintbox sichtbar machen
 
danke ich glaube ich bleibe bei colorgrid müsste reichen von de farben. Aber ich versuche die ganze Zeit mit der Hintergrundfarbe weiß. Mit dem Button geht das jedoch wenn ich das in das FormCreat einfüge dann funkioniert nicht. KOMISCH :?

jaenicke 17. Mär 2009 01:01

Re: Paintbox sichtbar machen
 
Das ist nicht komisch. Eine PaintBox wird beim Zeichnen des Fensters überschrieben. Zum Beispiel wenn ein anderes Fenster über das Fenster gezogen wird.
Und das Fenster wird beim Anzeigen nach dem Erzeugen logischerweise auch neu gezeichnet.

Deshalb benutzt man eine TPaintBox im Allgemeinen auch mit einer Hintergrundbitmap.

Code46 17. Mär 2009 01:07

Re: Paintbox sichtbar machen
 
Aber normalerweise muss doch die Hintergrundfarbe weiß sein wenn ich das hier angeben bei FormCreat
Delphi-Quellcode:
paintbox.canvas.brush.color:=clwhite;
paintbox.Canvas.FillRect(Rect(0,0,paintbox.width,paintbox.height));

jaenicke 17. Mär 2009 01:10

Re: Paintbox sichtbar machen
 
Nein, wie denn? Nach dem Erzeugen des Formulars wird es angezeigt und dabei logischerweise neu gezeichnet. Und damit ist der vorher gezeichnete Inhalt weg. Was ist daran so schwer zu verstehen?

Wie gesagt: Zieh einfach ein Formular über die PaintBox, wenn du etwas hineingezeichnet hast. Danach ist der Inhalt weg.

Inhalte, die nach einem Neuzeichnen noch vorhanden sein sollen, müssen in OnPaint wieder in die PaintBox gezeichnet werden.

Code46 17. Mär 2009 01:15

Re: Paintbox sichtbar machen
 
ich glaube du verstehst nicht was ICH sage oder sagen möchte. ICH will einfach nur das gleich am anfach nachdem Compalieren die Pintbox sichtbar in weiß ist.Mehr nicht. OKI DOKI

jaenicke 17. Mär 2009 01:29

Re: Paintbox sichtbar machen
 
Das läuft eben nicht so wie du es dir vorstellst. In OnPaint musst du alles Zeichnen, was auch nach einem Neuzeichnen des Formulars da sein soll. Wenn das Formular nach dem Erzeugen und damit nach deinem Code angezeigt wird, wird alles, was du in OnCreate gezeichnet hast, überschrieben.

Du musst also entweder einfach OnPaint benutzen wie du es in dem Beispiel siehst oder du nimmst ein TImage statt der TPaintBox. In einem TImage werden die Inhalte bei einem Neuzeichnen nicht überschrieben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:54 Uhr.

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