Autor Beitrag
Ulf22
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 24.03.11 10:31 
ausblenden volle Höhe Delphi-Quelltext
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
    { Private declarations }
    MausGedrueckt: boolean;
  public
    { Public declarations }

    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 user profile iconGausi: Delphi-Tags hinzugefügt
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8553
Erhaltene Danke: 479

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Do 24.03.11 10:47 
Hallo und :welcome: in der Entwickler-Ecke,

zuersteinmal lässt sich das
ausblenden Delphi-Quelltext
1:
2:
3:
4:
if MausGedrueckt = True
                then
                begin Canvas.LineTo (X,Y);
                end

eleganter über
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 24.03.11 11:00 
Funktioniert leider immer noch nicht...
Woran könnte es noch liegen?
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8553
Erhaltene Danke: 479

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 235


D7
BeitragVerfasst: Do 24.03.11 18:03 
user profile iconGausi hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19338
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 24.03.11 19:24 
user profile iconFrEaKY hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 235


D7
BeitragVerfasst: Fr 25.03.11 00:56 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconFrEaKY hat folgendes geschrieben Zum zitierten Posting springen:
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

Aha! Dann hab ichs mir genau falsch gemerkt :roll:
Danke für die Erklärung!