Canvas cleart immer [gelöst]
Canvas cleart immer [gelöst]
Hallo
ich hätte da ein kleines Problem
wenn ich eine zeichnung mit Canvas auf ein panel mache und das panel dann mit einer Procedure vergrößer verschwindet das gemalte komplett
kann mir einer sagen warum das ist und wie ich das umgehen kann?
danke im voraus
ich hätte da ein kleines Problem
wenn ich eine zeichnung mit Canvas auf ein panel mache und das panel dann mit einer Procedure vergrößer verschwindet das gemalte komplett
kann mir einer sagen warum das ist und wie ich das umgehen kann?
danke im voraus
Zuletzt geändert von Dragomir am Di 5. Mai 2015, 15:47, insgesamt 1-mal geändert.
Re: Canvas cleart immer
Mein Blick in die Kristallkugel sagt mir, dass du das OnClick-Event eines Buttons o.ä benutzt, um auf den Panel zu malen. Richtig ist das OnPaint-Event des Panel, denn das wird immer aufgerufen, wenn sich das Panel neu zeichnen muss.
Re: Canvas cleart immer
Code: Alles auswählen
procedure TFrm_bearbeitung.Image1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
P_Bild.Canvas.Pen.Color := ColorListBox.Selected;
ix := X;
iy := Y;
iy2 := Y;
ix2 := X;
P_Bild.Canvas.Rectangle(ix,iy,ix2,iy2);
end;
procedure TFrm_bearbeitung.Image1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
P_Bild.Canvas.Pen.Mode := pmNotXor;
P_Bild.Canvas.pen.Style := pssolid;
P_Bild.Canvas.brush.Style := bsClear;
P_Bild.Canvas.Pen.Color := ColorListBox.Selected;
P_Bild.Canvas.Pen.Width := 3;
P_Bild.Canvas.Rectangle(ix,iy,ix2,iy2);
ix2 := X;
iy2 := Y;
P_Bild.Canvas.Rectangle(ix,iy,ix2,iy2);
end;
die Zeichnung
Code: Alles auswählen
procedure TFrm_bearbeitung.P_untenClick(Sender: TObject);
begin
//damit die Form nach oben gerückt wird wenn sie unten erweitert wird
Frm_bearbeitung.top := Frm_bearbeitung.top - 50;
P_Bild.Height := P_Bild.Height + 50;
Image1.Height := Image1.Height + 50;
Frm_bearbeitung.Height := Frm_bearbeitung.Height + 50;
end;
das ist meine Panel vergrößerung
sry hätte ich mitgeben sollen
Zuletzt geändert von Lori am Fr 1. Mai 2015, 13:04, insgesamt 1-mal geändert.
Grund: Bitte den Highlighter nutzen.
Grund: Bitte den Highlighter nutzen.
Re: Canvas cleart immer
Ein Panel ist eigentlich nicht zum draufmalen da.
Nimm z.B. eine TPaintBox und zeichne im OnPaint Event.
Nimm z.B. eine TPaintBox und zeichne im OnPaint Event.
-
- Beiträge: 1909
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Canvas cleart immer
Durch die Veränderungen des Panels wird es komplett neu gezeichnet, male auf eine Bitmap, und zeichne die dann im onpaint Ereignis auf dein canvas.
Re: Canvas cleart immer
Vielen dank für die Hilfen werde ich so dann versuchen bin da noch ein wenig neu was das Programmieren angeht
Re: Canvas cleart immer
ok noch eine kleine Frage wie klappt das genau mit dem onPaint event da man ja keine parameter hat wie maustasten oder sowas
-
- Beiträge: 1909
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Canvas cleart immer
Du könntest entweder eine Private Bitmap deiner Klasse hinzufügen, und auf die Zeichnen (Ganz normal in den Mouse Events über MyBitmap.Canvas), und dann im OnPaint Event das auf das Control zeichnen (Control.Canvas.Draw(0, 0, MyBitmap)) oder du verwendest ein TImage (was letztlich genau das tut) hier mal ein kleines Beispiel meinerseits:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer
);
procedure Image1Resize(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Image1.Picture.Bitmap.Canvas.MoveTo(X, Y);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Picture.Bitmap:=TBitmap.Create;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ssLeft in Shift then
Image1.Picture.Bitmap.Canvas.LineTo(X, Y);
end;
procedure TForm1.Image1Resize(Sender: TObject);
var tmp: TBitmap;
begin
tmp:=TBitmap.Create;
try
tmp.Width:=Image1.ClientWidth;
tmp.Height:=Image1.ClientHeight;
tmp.Canvas.Brush.Color:=clWhite;
tmp.Canvas.FillRect(0,0, Image1.Width,Image1.Height);
tmp.Canvas.Draw(0, 0, Image1.Picture.Bitmap);
Image1.Picture.Bitmap.Assign(tmp);
finally
tmp.Free;
end;
end;
end.
Re: Canvas cleart immer
Danke so ist es wie ich es wollte habe da jetz noch ne frage aber dafür mache ich ein neues Thema auf hat nix damit zu tun:)
dankööööö
dankööööö