Hallo,
ich habe angefangen eine Art Paint-Clon zu proggen, hier meine Zeichenrotine:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
DoubleBuffered := True;
Form1.WindowState := wsMaximized;
Image1.Align := alClient;
with Image1.Canvas do
begin
pen.mode:=pmNotXor; // Zeichnenmodus umschalten auf pmNotXor (Für die Gummilinie)
Image1.canvas.pen.style:=pssolid;
Pen.Width:=5;
Pen.Color:=clGreen; // Grüne Stiftfarbe
end;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if zeichnen then
with Image1.Canvas do
begin
moveto(x_anfang,y_anfang);
if SpeedButton1.Down = true then
begin lineto(x_ende,y_ende); end;
If SpeedButton2.Down = true then
begin rectangle(x_Anfang, y_anfang, x_ende, y_ende); end;
if speedbutton3.Down = true then
begin ellipse(x_Anfang, y_anfang, x_ende, y_ende); end;
// neues Linienende
x_ende:=x;
y_ende:=y;
// Neue Linie zeichnen
moveto(x_anfang,y_anfang);
if SpeedButton1.Down = True then
begin lineto(x_ende,y_ende); end;
If SpeedButton2.Down = True then
begin rectangle(x_Anfang, y_anfang, x_ende, y_ende); end;
if speedbutton3.Down = true then
begin ellipse(x_Anfang, y_anfang, x_ende, y_ende); end;
end;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
x_anfang:=x; y_anfang:=y;
x_ende:=x; y_ende:=y;
zeichnen:=true;
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
zeichnen:=false;
end;
So, das funktioniert bis jetzt ja gut (Wenn ich im leeren Image zeichne), nur leider wird die linie wenn ein Bild im Image geladen ist nicht grün sondern (durch den pmNotXor Modus) irgendwie durchsichtig. Siehe Bild 2. Wie kann ich so etwas umgehen? Ich habe schon versucht im pmCopy Modus zu zeichnen, doch das kann ja nicht klappen!
@ Edit: Falsches Bild ersetzt