Autor |
Beitrag |
shadowmasta
Hält's aus hier
Beiträge: 14
WIN XP
Delphi 6
|
Verfasst: So 22.05.05 17:20
Hi leutz
ich programmiere Paint nach und hab schon ein problem
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TPaintF.NeuesBild(x,y:integer); begin PaintF.Feld.Width := x; PaintF.Feld.Height := y; PaintF.Feld.Canvas.Create; PaintF.Feld.Cursor := crCross; end; |
Ich geh auf Datei -> Neu dann kommt ein Fenster wo ich die breite und höhe angebe dann folgt obige procedure
Wenn ich diesen schritt erneut ausführe verändert sich die auflösung und ich habe kein neues weißes Bild. Ich weis also nicht wie ich das Image refreshen kann oder zurücksetzen kann. Hat da einer ne Idee ? Das ich im prinzip die Image-komponente auf Standard habe ohne canvas...
thx 4 ideas
|
|
Muetze1
      
Beiträge: 346
|
Verfasst: So 22.05.05 18:34
Moin!
1. Du solltest keine TImage Komponente dafür nutzen sondern eine TPaintBox.
2. Das Create in deinem Code ist falsch, wenn, dann sollte es so lauten:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TPaintF.NeuesBild(x,y:integer); begin PaintF.Feld.Width := x; PaintF.Feld.Height := y; PaintF.Feld.Canvas := TCanvas.Create; PaintF.Feld.Cursor := crCross; end; |
Aber selbst dies ist sinnfrei.
3. Im Normalfall nutz eine TPainBox und male darauf ein Bitmap auf dem die ganzen Zeichnefunktionen ausgeführt werden. Dieses kannst du dann auch vergrössern/verkleinern etc
4. Um das Bild zurück zu setzen, male einfach ein weisses Kästchen in der Grösse des Bitmaps über das selbige...
MfG
Muetze1
_________________ 49 63 68 68 61 62 65 6B 65 69 6E 65 41 68 6E 75 6E 67 21
|
|
shadowmasta 
Hält's aus hier
Beiträge: 14
WIN XP
Delphi 6
|
Verfasst: So 22.05.05 22:19
kk danke erstmal für den tipp werde mich morgen ranmachen und es auf paintBox umstellen
nur da is ja das doofe problem das wenn ein Fenster drübe rgemacht wird, das gemalte verschwindet aber gut.
Und selbst wenn es mit einem Image doof ist WARUM verändert er die Auflösunf während es bei einer PaintBox nicht so sein sollte, was ich noch ausprobiere.
pS. das mit dem Canva.Create funzt schon is aber net optimal denn wen man vorher ne farbe oder ne zeichenfunktion auswählt ist das image sichtbar als canvas 
|
|
Muetze1
      
Beiträge: 346
|
Verfasst: So 22.05.05 23:41
Moin!
shadowmasta hat folgendes geschrieben: | nur da is ja das doofe problem das wenn ein Fenster drübe rgemacht wird, das gemalte verschwindet aber gut. |
Du hast das OnPaint Ereignis der PaintBox - in diesem sollst du den Inhalt zeichnen. Wenn du ein Fenster drüber schiebst, dann wird auch ein OnPaint ausgelöst und der Inhalt verschwindet nicht.
Und damit du nicht ständig alles nochmal einzelnd zeichnen musst, mach es mit dem Bitmap wie oben beschrieben. Dieses kannst du dann mit einem Rutsch auf die PaintBox malen.
shadowmasta hat folgendes geschrieben: | Und selbst wenn es mit einem Image doof ist WARUM verändert er die Auflösunf während es bei einer PaintBox nicht so sein sollte, was ich noch ausprobiere. |
Beachtest du, dass Image1.Width und Image1.Height nur die Grösse der Komponente angibt und nicht die Grösse des Bitmaps/Bildes in dieser? Wenn du ein Bitmap im Image hast, dann ist die Bildgrösse bei Image1.Picture.Bitmap.Width und Image1.Picture.Bitmap.Height zu finden. Kann es damit zusammen hängen (mal so aus'm Bauch heraus...)?
shadowmasta hat folgendes geschrieben: | pS. das mit dem Canva.Create funzt schon is aber net optimal denn wen man vorher ne farbe oder ne zeichenfunktion auswählt ist das image sichtbar als canvas  |
Deshalb meinte ich ja: Canvas mit einem weissen Kästchen übermalen. Dahingehend kannst du FillRect() nutzen. Wenn du dir dann vorher noch die Stift- und Pinselfarbe sicherst und nach dem übermalen wieder zurück sicherst, dann hast du damit auch keine Probleme.
Ansonsten solltest du grundlegend keinen Canvas selber anlegen. Dieser wird immer mitgebracht von der jeweiligen Klasse/Komponente. Ausserdem sollte der korrigierte Code von mit ein Speicherleck enthalten, da der eventuell vorhandene alte Canvas nicht freigegeben wird. Aber wie gesagt: grundsätzlich gar nicht erst sowas machen.
MfG
Muetze1
_________________ 49 63 68 68 61 62 65 6B 65 69 6E 65 41 68 6E 75 6E 67 21
|
|
shadowmasta 
Hält's aus hier
Beiträge: 14
WIN XP
Delphi 6
|
Verfasst: Mo 23.05.05 16:12
vielen Dank war alles sehr hilfreich ich frage mich aber letzenende nicht ob das ganz schön hardwarelastig ist.
Denn wenn ich nach jeder MouseMove Procedure ein Repaint der PaintBox auslöse kommt es zum flimmern. Dem habe ich mit Doublebuffered := true vorgebeugt.
Ich habe mit Bild.PixelFormat := pf24Bit; auf 24 Bit gestellt aber wenn ich einen anderen Hintergrund als weiss habe, mittels primitiven Farbeimer der das ganze Bild in der gewünschten Farbe färbt, dann verfärben sich die Farbe bei rechtecken und ellipsen. Hängt wohl irgendwie mit brush und style ab oder so
mir fällt grad auf das ich fast 100% CPU last bei dem oben genannten problem habe 
|
|
Muetze1
      
Beiträge: 346
|
Verfasst: Mo 23.05.05 21:38
Moin!
shadowmasta hat folgendes geschrieben: | Denn wenn ich nach jeder MouseMove Procedure ein Repaint der PaintBox auslöse kommt es zum flimmern. Dem habe ich mit Doublebuffered := true vorgebeugt. |
DoubleBuffered ist keine Lösung! Warum überhaupt direkt RePaint? Warum nicht einfach ein Invalidate aufrufen? Also PaintBox1.Invalidate - und das beim MouseMove und es sollte a) nicht mehr flimmern und b) nicht so hardwarelastig sein.
Und um die Hardwarebeschleunigung zu nutzen, benutze BitBlt() um das Bild auf die PaintBox zu bekommen:
Delphi-Quelltext 1:
| BitBlt(PaintBox1.Canvas.Handle, 0, 0, Bitmap1.Width, Bitmap1.Height, Bitmap1.Canvas.Handle, 0, 0, SRCCOPY); |
shadowmasta hat folgendes geschrieben: | Ich habe mit Bild.PixelFormat := pf24Bit; auf 24 Bit gestellt aber wenn ich einen anderen Hintergrund als weiss habe, mittels primitiven Farbeimer der das ganze Bild in der gewünschten Farbe färbt, dann verfärben sich die Farbe bei rechtecken und ellipsen. Hängt wohl irgendwie mit brush und style ab oder so |
Da komme ich nicht so ganz mit, aber meinst du vielleicht FloodFill()? Dort wäre der 2. Parameter wichtig - bis wohin er füllen sollte. Ansonsten empfehle ich noch 32 Bit Farbtiefe, da dann alle Pixel automatisch aligned sind und somit schneller verarbeitet sein sollten.
shadowmasta hat folgendes geschrieben: | mir fällt grad auf das ich fast 100% CPU last bei dem oben genannten problem habe  |
Schau mal nach den Änderungen nochmal nach.
MfG
Muetze1
_________________ 49 63 68 68 61 62 65 6B 65 69 6E 65 41 68 6E 75 6E 67 21
|
|
shadowmasta 
Hält's aus hier
Beiträge: 14
WIN XP
Delphi 6
|
Verfasst: Mi 25.05.05 15:52
Hey du bist ja auch Rostocker
Also die Last beträgt nun noch etwa hächstens 18% also das hat Invalidate bezweckt THX der rest is wohl meine hamma case anweisung
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| procedure TPaintF.FeldMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if DoPaint then case Modus of 1,2: Bild.Canvas.LineTo(X,Y); 3: Bild.Canvas.Rectangle(X,Y,X+3,Y+3); 5: begin with Bild.Canvas do begin Rectangle(x_anfang,y_anfang,x_ende,y_ende); x_ende := x ; y_ende := y; Rectangle(x_anfang,y_anfang,x_ende,y_ende); end; end; 6: begin with Bild.Canvas do begin RoundRect(x_anfang,y_anfang,x_ende,y_ende,10,10); x_ende := x; y_ende := y; RoundRect(x_anfang,y_anfang,x_ende,y_ende,10,10); end; end; 7: begin with Bild.Canvas do begin MoveTo(x_anfang,y_anfang); LineTo(x_ende,y_ende); x_ende := x; y_ende := y; MoveTo(x_anfang,y_anfang); LineTo(x_ende,y_ende); end; end; 8: begin with Bild.Canvas do begin Ellipse(x_anfang,y_anfang,x_ende,y_ende); x_ende := x; y_ende := y; Ellipse(x_anfang,y_anfang,x_ende,y_ende); end; end; end; Feld.Invalidate; end; |
Modus ist halt ob Stift, pinsel oder so aber es flimmert immernoch das is komik und das mit den Farben mein kommt zustande wegen dem Pen Modus denn bei modus 6,7,8 ist Bild.Canvas.Pen.Mode := pmNotXor;
damit ich die rechtecke, ellipsen ausdehnen kann und zurück somit überschreiben sich die farben usw. Dieser Modus steht auch in de rHilfe aber daran liegts das die Farben verfälschen bei nicht weißem Hintergrund.
|
|
Muetze1
      
Beiträge: 346
|
Verfasst: Mi 25.05.05 16:38
Moin!
shadowmasta hat folgendes geschrieben: | Modus ist halt ob Stift, pinsel oder so aber es flimmert immernoch das is komik und das mit den Farben mein kommt zustande wegen dem Pen Modus denn bei modus 6,7,8 istBild.Canvas.Pen.Mode := pmNotXor;
damit ich die rechtecke, ellipsen ausdehnen kann und zurück somit überschreiben sich die farben usw. Dieser Modus steht auch in de rHilfe aber daran liegts das die Farben verfälschen bei nicht weißem Hintergrund. |
Also aus diesen Sätzen werde ich nicht schlau.
Aber zu dem XOR: Es löscht das zuletzt gemalte, wenn man es nochmal mit gleicher Farbe in gleicher Form auf der gleichen Position malt. Kann es sein, das du vielleicht x_ende und y_ende nicht ordentlich initialisiertst - z.B. beim MouseDown?
MfG
Muetze1
_________________ 49 63 68 68 61 62 65 6B 65 69 6E 65 41 68 6E 75 6E 67 21
|
|
shadowmasta 
Hält's aus hier
Beiträge: 14
WIN XP
Delphi 6
|
Verfasst: Mi 25.05.05 18:15
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370:
| unit Paint;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, Menus, jpeg, StdCtrls, Buttons, ColorGrd, ExtDlgs;
type TPaintF = class(TForm) MainMenu1: TMainMenu; Datei1: TMenuItem; Neu1: TMenuItem; offnen: TMenuItem; Speichern: TMenuItem; N2: TMenuItem; Beenden2: TMenuItem; Bearbeiten1: TMenuItem; Bildgre1: TMenuItem; Hilfe1: TMenuItem; PaintInfo1: TMenuItem; Panel1: TPanel; SpeedButton1: TSpeedButton; SpeedButton2: TSpeedButton; SpeedButton3: TSpeedButton; SpeedButton4: TSpeedButton; ColorDialog1: TColorDialog; ColorGrid1: TColorGrid; SpeedButton5: TSpeedButton; SpeedButton6: TSpeedButton; SpeedButton7: TSpeedButton; Button1: TButton; SaveDialog1: TSaveDialog; OpenDialog1: TOpenDialog; SpeedButton8: TSpeedButton; ModusEinst: TGroupBox; SizeEinst: TGroupBox; Shape1: TShape; Shape2: TShape; Shape3: TShape; Shape4: TShape; Shape5: TShape; Shape6: TShape; Shape7: TShape; Shape8: TShape; Feld: TPaintBox; Image1: TImage; procedure FormCreate(Sender: TObject); procedure Neu1Click(Sender: TObject); procedure FeldMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FeldMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure FeldMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape3MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape4MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape5MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape6MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure SpeedButton1Click(Sender: TObject); procedure SpeedButton2Click(Sender: TObject); procedure SpeedButton3Click(Sender: TObject); procedure SpeedButton4Click(Sender: TObject); procedure ColorGrid1Change(Sender: TObject); procedure SpeedButton6Click(Sender: TObject); procedure SpeedButton5Click(Sender: TObject); procedure SpeedButton7Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure SpeedButton8Click(Sender: TObject); procedure Shape7MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape8MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FeldPaint(Sender: TObject); procedure FormDestroy(Sender: TObject);
private Shapes : array[1..6] of TShape; x_anfang, y_anfang, x_ende, y_ende : integer; public procedure NeuesBild(x,y:integer); end;
var PaintF: TPaintF; len,hei,MyX,MyY : integer; DoPaint : boolean; Modus,Smod : byte; farbe : TColor; Bild : TBitmap; implementation
uses Neu; {$R *.dfm}
procedure TPaintF.NeuesBild(x,y:integer); begin Bild.Canvas.Brush.Color := clWhite; Bild.Canvas.pen.Color := clWhite; Bild.Width := x; Bild.Height := y; Bild.Canvas.Rectangle(0,0,x,y); PaintF.Feld.Width := x; PaintF.Feld.Height := y; PaintF.Image1.Width := x+2; PaintF.Image1.Height := y+2; PaintF.Image1.Picture.LoadFromFile('img/back.jpg'); PaintF.Feld.Cursor := crCross; PaintF.Speichern.Enabled := true; Bild.Canvas.pen.Color := clBlack; end; procedure Auswahl(sm : integer); var i : byte; begin case sm of 1: begin PaintF.Shape1.Brush.Color := clBlack; Bild.Canvas.Pen.Width := 2; end; 2: begin PaintF.Shape2.Brush.Color := clBlack; Bild.Canvas.Pen.Width := 4; end; 3: begin PaintF.Shape3.Brush.Color := clBlack; Bild.Canvas.Pen.Width := 7; end; 4: begin PaintF.Shape4.Brush.Color := clBlack; Bild.Canvas.Pen.Width := 2; end; 5: begin PaintF.Shape5.Brush.Color := clBlack; Bild.Canvas.Pen.Width := 4; end; 6: begin PaintF.Shape6.Brush.Color := clBlack; Bild.Canvas.Pen.Width := 7; end; end; for i := 1 to 6 do if i <> sm then PaintF.Shapes[i].Brush.Color := clWhite; end; procedure Size(mm : byte); begin if (mm = 2) or (mm = 3) then PaintF.SizeEinst.Visible := true else PaintF.SizeEinst.Visible := false; end; procedure Modusopt(mm : byte); begin if (mm = 5) or (mm = 6) or (mm = 8) then PaintF.ModusEinst.Visible := true else PaintF.ModusEinst.Visible := false; end; procedure TPaintF.FormCreate(Sender: TObject); begin Shapes[1] := Shape1; Shapes[2] := Shape2; Shapes[3] := Shape3; Shapes[4] := Shape4; Shapes[5] := Shape5; Shapes[6] := Shape6; len := 0; hei := 0; Modus := 1; Smod := 2; farbe := ColorGrid1.ForegroundColor; Bild := TBitmap.Create; Bild.PixelFormat := pf32Bit; end; procedure TPaintF.Neu1Click(Sender: TObject); begin NeuB.Show; end; procedure TPaintF.FeldMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin DoPaint := true; case Modus of 1,2: Bild.Canvas.MoveTo(X,Y); 3: Bild.Canvas.Rectangle(X,Y,X+3,Y+3); 4: begin Bild.Canvas.Rectangle(0,0,Feld.Width,Feld.Height); Bild.Canvas.Brush.Color := ColorGrid1.ForegroundColor; end; 5..8: begin x_anfang:=x; y_anfang:=y; x_ende:=x; y_ende:=y; end; end; end; procedure TPaintF.FeldMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if DoPaint then case Modus of 1,2: Bild.Canvas.LineTo(X,Y); 3: Bild.Canvas.Rectangle(X,Y,X+3,Y+3); 5: begin with Bild.Canvas do begin Rectangle(x_anfang,y_anfang,x_ende,y_ende); x_ende := x ; y_ende := y; Rectangle(x_anfang,y_anfang,x_ende,y_ende); end; end; 6: begin with Bild.Canvas do begin RoundRect(x_anfang,y_anfang,x_ende,y_ende,10,10); x_ende := x; y_ende := y; RoundRect(x_anfang,y_anfang,x_ende,y_ende,10,10); end; end; 7: begin with Bild.Canvas do begin MoveTo(x_anfang,y_anfang); LineTo(x_ende,y_ende); x_ende := x; y_ende := y; MoveTo(x_anfang,y_anfang); LineTo(x_ende,y_ende); end; end; 8: begin with Bild.Canvas do begin Ellipse(x_anfang,y_anfang,x_ende,y_ende); x_ende := x; y_ende := y; Ellipse(x_anfang,y_anfang,x_ende,y_ende); end; end; end; Feld.Invalidate; end; procedure TPaintF.FeldMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin DoPaint := false; end; procedure TPaintF.Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Smod := 1; Auswahl(Smod); Modus := 2; end;
procedure TPaintF.Shape2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Smod := 2; Auswahl(Smod); Modus := 2; end;
procedure TPaintF.Shape3MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Smod := 3; Auswahl(Smod); Modus := 2; end;
procedure TPaintF.Shape4MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Smod := 4; Auswahl(Smod); Modus := 3; end;
procedure TPaintF.Shape5MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Smod := 5; Auswahl(Smod); Modus := 3; end;
procedure TPaintF.Shape6MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Smod := 6; Auswahl(Smod); Modus := 3; end; procedure TPaintF.SpeedButton1Click(Sender: TObject); begin Modus := 1; Size(Modus); Modusopt(Modus); Bild.Canvas.Pen.Width := 1; end;
procedure TPaintF.SpeedButton2Click(Sender: TObject); begin Modus := 2; Size(Modus); Modusopt(Modus); Auswahl(Smod); Bild.Canvas.Pen.Mode := pmCopy; end;
procedure TPaintF.SpeedButton3Click(Sender: TObject); begin Modus := 2; Size(Modus); Modusopt(Modus); Bild.Canvas.Pen.Color := clWhite; Auswahl(Smod); Bild.Canvas.Pen.Mode := pmCopy; end;
procedure TPaintF.SpeedButton4Click(Sender: TObject); begin Modus := 4; Size(Modus); Modusopt(Modus); Bild.Canvas.Pen.Color := farbe; Bild.Canvas.Brush.Color := farbe; end;
procedure TPaintF.SpeedButton5Click(Sender: TObject); begin Modus := 6; Size(Modus); Modusopt(Modus); Bild.Canvas.Pen.Mode := pmNotXor; Bild.Canvas.Pen.Width := 1; end;
procedure TPaintF.SpeedButton6Click(Sender: TObject); begin Modus := 7; Size(Modus); Modusopt(Modus); Bild.Canvas.Pen.Mode := pmNotXor; Bild.Canvas.Pen.Width := 1; end;
procedure TPaintF.SpeedButton7Click(Sender: TObject); begin Modus := 5; Size(Modus); Modusopt(Modus); Bild.Canvas.Pen.Mode := pmNotXor; Bild.Canvas.Pen.Width := 1; end;
procedure TPaintF.SpeedButton8Click(Sender: TObject); begin Modus := 8; Size(Modus); Modusopt(Modus); Bild.Canvas.Pen.Mode := pmNotXor; Bild.Canvas.Pen.Width := 1; end; procedure TPaintF.ColorGrid1Change(Sender: TObject); begin farbe := ColorGrid1.ForegroundColor; Bild.Canvas.Pen.Color := farbe; if Modus = 4 then Bild.Canvas.Brush.Color := farbe; end; procedure TPaintF.Button1Click(Sender: TObject); begin ColorDialog1.Execute; farbe := ColorDialog1.Color; Bild.Canvas.Pen.Color := farbe; if Modus = 4 then Bild.Canvas.Brush.Color := farbe; end;
procedure TPaintF.Shape7MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Bild.Canvas.Brush.Color := clWhite; end;
procedure TPaintF.Shape8MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Bild.Canvas.Brush.Color := farbe; end; procedure TPaintF.FeldPaint(Sender: TObject); begin BitBlt(Feld.Canvas.Handle,0,0,Bild.Width,Bild.Height,Bild.Canvas.Handle,0,0,SRCCOPY); end; procedure TPaintF.FormDestroy(Sender: TObject); begin Bild.Free; end;
end. |
Also is schon richtig initialisiert.
Welchen Pen-Modus es gibt und was sie bewirken steht in Der delphi Hilfe...
Es gibt aber wohl keinen den ich brauch. Probier es aus wenn du nicht weist was ich meine.
1. Ein weißes Canvas erstellen
2. Eine Ellipse wie in Paint malen mit ziehen usw. im Source gehts
3. Hintergrund umstellen belibige farbe d.h. rectangle z.B. blau und dann noch ma ellipse machen und schon sind die farben dank pen.Mode pmNotXor komplementär wie es in der hilfe steht
PS: Das flimmern is halt noch da obwohl in der Hilfe steht das es nicht da sein dürfte also unerklärlich
kannst mir natürlcih auch ma deine icq vllt hilft das weiter ^^
|
|
|