| Autor |
Beitrag |
Ulf22
Hält's aus hier
Beiträge: 2
|
Verfasst: Do 24.03.11 10:31
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, ColorGrd;
type TPaint = class(TForm) BitBtnfrei: TBitBtn; BitBtnpunkt: TBitBtn; ImBild: TImage; procedure BitBtnfreiClick(Sender: TObject); procedure BitBtnpunktClick(Sender: TObject); procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: integer); procedure FormMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: integer); procedure FormMouseMove (Sender: TObject; Shift :TShiftState; X, Y: integer);
private MausGedrueckt: boolean; public
X1 : integer; X2 : integer; Y1 : integer; Y2 : integer; end;
var Paint: TPaint;
implementation
{$R *.dfm}
procedure TPaint.BitBtnfreiClick(Sender: TObject); begin BitBtnfrei.Enabled := False; BitBtnPunkt.Enabled := True; end;
procedure TPaint.BitBtnpunktClick(Sender: TObject); begin BitBtnpunkt.Enabled := False; BitBtnFrei.Enabled := True; end;
procedure Tpaint.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: integer); begin
MausGedrueckt := True ; Canvas.MoveTo(x,y) ; X1:= Canvas.PenPos.X; Y1:= Canvas.PenPos.Y; X2:= Canvas.PenPos.X; Y2:= Canvas.PenPos.Y; end;
procedure Tpaint.FormMouseMove (Sender: TObject; Shift: TShiftState; X, Y: integer); begin if MausGedrueckt = True then begin Canvas.LineTo (X,Y); end end;
procedure TPaint.FormMouseUp (Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: integer); begin MausGedrueckt := False end;
end. |
Moderiert von Gausi: Delphi-Tags hinzugefügt
|
|
Gausi
      
Beiträge: 8553
Erhaltene Danke: 479
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 24.03.11 10:47
Hallo und  in der Entwickler-Ecke,
zuersteinmal lässt sich das
Delphi-Quelltext 1: 2: 3: 4:
| if MausGedrueckt = True then begin Canvas.LineTo (X,Y); end |
eleganter über
Delphi-Quelltext 1: 2:
| if ssleft in Shift then Canvas.Lineto(x,y); |
lösen. Denn ob (und welche) Maustaste beim OnMouseMove gedrückt ist, steht im Parameter Shift drin. Da muss man nicht die zusätzliche Variable einführen. Außerdem sollte man nie auf "MausGedrueckt = True" testen. Besser ist nur "if MausGedrueckt then".
Zu dem Problem: Ich tippe darauf, dass einfach mit einer ungünstigen Farbe gezeichnet wird. Probier mal etwas wie Canvas.Pen.Color := clBlack; 
_________________ We are, we were and will not be.
|
|
Ulf22 
Hält's aus hier
Beiträge: 2
|
Verfasst: Do 24.03.11 11:00
Funktioniert leider immer noch nicht...
Woran könnte es noch liegen?
|
|
Gausi
      
Beiträge: 8553
Erhaltene Danke: 479
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 24.03.11 11:23
Du hast da auch ein Image auf der Form. Möchtest du auf dem Image zeichnen, oder auf der Form selbst? So, wie es jetzt ist, zeichnest du nämlich direkt auf der Form. Und das auch nur, wenn du mit der Maus dich auf der Form direkt bewegst, nicht auf dem Image.
_________________ We are, we were and will not be.
|
|
FrEaKY
      
Beiträge: 235
D7
|
Verfasst: Do 24.03.11 18:03
Gausi hat folgendes geschrieben : | Außerdem sollte man nie auf "MausGedrueckt = True" testen. Besser ist nur "if MausGedrueckt then".
|
Darf ich fragen warum, Gausi? Ich hab hier schonmal gelesen, dass ein deutlicher Unterschied besteht zwischen "if boolean then" und "if boolean=true then".
Bei "if boolean then" wird glaube ich nur gefragt "ist boolean <> 0" und bei "if boolean=true" natürlich "ist boolean = 1".
Seitdem packe ich immer mindestens entweder ein TRUE oder FALSE rein.
|
|
jaenicke
      
Beiträge: 19338
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 24.03.11 19:24
FrEaKY hat folgendes geschrieben : | | Bei "if boolean then" wird glaube ich nur gefragt "ist boolean <> 0" und bei "if boolean=true" natürlich "ist boolean = 1". |
Eben, und deshalb funktioniert der Vergleich mit True nicht immer und ist daher nicht nur unschön und unlogisch, sondern falsch.
Hier habe ich mal ein kleines Beispiel gebastelt, wann es schief geht:
www.delphi-forum.de/....php?p=548760#548760
Mehr dazu steht hier unter Anfängerfehler:
www.delphi-treff.de/...che-anfaengerfehler/
Und warum das auch vollkommen unlogisch ist:
www.delphi-forum.de/....php?p=560637#560637
|
|
FrEaKY
      
Beiträge: 235
D7
|
Verfasst: Fr 25.03.11 00:56
Aha! Dann hab ichs mir genau falsch gemerkt
Danke für die Erklärung!
|
|
|