Entwickler-Ecke

Sonstiges (Delphi) - Probleme mit MiniPaint


10S96 - Di 03.01.12 18:59
Titel: Probleme mit MiniPaint
Hallo. :) Ich habe ein Problem mit meinem Delphi MiniPaint.
Seit einigen Monaten habe ich in der Schule Informatik. Nun soll ich zum ersten Mal etwas programmieren. Ein MiniPaint mit dem man Punkte, freie Linien und "Gummilinien" zeichnen kann. Außerdem soll man Farbe und Dicke variieren können. Ich habe begonnen, doch schon bei den Punkten und Freihandlinen bekam ich Probleme.
Hier mein Quelltext. Ich hoffe ihr könnt mir helfen, denn ich kann mit den Angezeigten Fehlermeldungen leider noch nicht viel anfangen.


Quelltext:

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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls;

type
  TPaint = class(TForm)
    PnlWerkzeug: TPanel;
    BitBtnFrei: TBitBtn;
    BitBtnPunkt: TBitBtn;
    procedure BitBtnPunktClick(Sender: TObject);
    procedure BitBtnFreiClick(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-Deklarationen }
  MausGedrueckt : Boolean;


  public
    { Public-Deklarationen }
  end;

var
  Paint: TPaint;


implementation

{$R *.dfm}



procedure TPaint.BitBtnPunktClick(Sender: TObject);
begin
 BitBtnPunkt.Enabled := False;
 BitBtnPunkt.Enabled := True;

end;

procedure TPaint.BitBtnFreiClick(Sender: TObject);
begin
 BitBtnFrei.Enabled := False;
 BitBtnFrei.Enabled := True;
end;

procedure TPaint.FormMouseDown (Sender:TObject; Button:TMouseButton;
                                Shift:TShifteState; X,Y:Integer);
begin
 MausGedrueckt := True;
 Canvas.MoveTo (X,Y);

begin
 if BitBtnFrei.Enabled = False
  then begin
  MausGedrueckt := True;
  Canvas.MoveTo (X,Y)
  end
  else
   Canvas.Ellipse (X-1,Y-1,X+1,Y+1)
end;

procedure TPaint.FormMouseMove (Sender:TObject; Shift:TShiftState; X,Y:integer);

begin
 if MausGedrueckt
  then Canvas.LineTo(X,Y)
end;

procedure TPaint.FormMouseUp (Sender:TObject; Button:TMouseButton;
                                Shift:TShifteState; X,Y:Integer);
begin
 MausGedrueckt := False
end;

end.





Fehlermeldungen:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
[Fehler] Unit1.pas(59): Undefinierter Bezeichner: 'TShifteState'
[Fehler] Unit1.pas(59): Deklaration von 'FormMouseDown' unterscheidet sich von vorheriger Deklaration
[Fehler] Unit1.pas(61): Undefinierter Bezeichner: 'MausGedrueckt'
[Fehler] Unit1.pas(62): Undefinierter Bezeichner: 'Canvas'
[Fehler] Unit1.pas(65): Undefinierter Bezeichner: 'BitBtnFrei'
[Fehler] Unit1.pas(65): 'THEN' erwartet, aber Bezeichner 'Enabled' gefunden
[Fehler] Unit1.pas(68): Operator oder Semikolon fehlt
[Fehler] Unit1.pas(71): ';' nicht erlaubt vor einem 'ELSE'
[Fehler] Unit1.pas(72): Operator oder Semikolon fehlt
[Fehler] Unit1.pas(72): Nicht genügend wirkliche Parameter
[Fehler] Unit1.pas(75): Anweisung erwartet, aber 'PROCEDURE' gefunden
[Fehler] Unit1.pas(83): Deklaration von 'FormMouseUp' unterscheidet sich von vorheriger Deklaration
[Fehler] Unit1.pas(85): Undefinierter Bezeichner: 'MausGedrueckt'
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden



Danke schon mal im Voraus :)

Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt

Moderiert von user profile iconNarses: Beiträge zusammengefasst

Der Rechtschreibfehler im Titel tut mir Leid. Ich meinte natürlich Probleme mit MiniPaint. :oops:


Martok - Di 03.01.12 20:19

Hallo und :welcome: in der Entwickler-Ecke!

Bitte verwende für Quellcode die entsprechenden [delphi]-Tags, dann wird er "schöner" dargestellt als im Fließtext. Beispiel:

Quelltext
1:
<span class="inlineSyntax"><span class="codecomment">{PROTECTTAG5f3d415ef2f6885db57cb258acf7c728}</span></span>                    

Wird:

Delphi-Quelltext
1:
var Test: integer;                    


Das kannst du nachträglich genauso editieren wie auch den Titel: einfach unten in deinem ersten Beitrag auf user defined image klicken und den Inhalt und/oder Titel ändern.
Ich war aber mal so frei, das gleich zu erledigen :zwinker:


Zum Thema: der Einzige Fehler den ich beim kurzen Überfliegen sehe, ist ein überflüssiges begin in Zeile 59... alles andere dürfte daher kommen dass sich der Compiler daran gründlich verschluckt.
Oh und: Vergleiche von Boolean-Werten auf true oder false sind eine ganz schlechte Idee [http://www.delphi-treff.de/tutorials/objectpascal/programmierung-mit-boolean-werten/typische-anfaengerfehler/].

Viele Grüße,
Martok


10S96 - Di 03.01.12 22:53

Danke für die schnelle Antwort und das Verbessern. ;)
Das Weglassen von begin in Zeile 59 reicht leider nicht um es ans Laufen zu bekommen. :(


FinnO - Mi 04.01.12 01:48

Zitat:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TPaint.BitBtnPunktClick(Sender: TObject);
begin
 BitBtnPunkt.Enabled := False;
 BitBtnPunkt.Enabled := True;

end;


Das sollte ungefähr gar nichts bewirken, du setzt Enabled erst auf False um es SOFORT wieder auf TRUE zu setzen. Nach dem Klicken ist also alles, wie gehabt. Wenn du den Wert eine Booleans ändern möchtest, schreibe einfach:


Delphi-Quelltext
1:
MeinBool := not MeinBool;                    


LG


Blup - Mi 04.01.12 10:51

[Fehler] Unit1.pas(59): Undefinierter Bezeichner: 'TShifteState'
[Fehler] Unit1.pas(59): Deklaration von 'FormMouseDown' unterscheidet sich von vorheriger Deklaration

Delphi sagt doch ganz deutlich was nicht in Ordnung ist.
Der Typ nennt sich TShiftState und so steht es auch oben in der Deklaration.


10S96 - Do 05.01.12 08:29

Vielen Dank für eure Hilfe :) jetzt funktioniert es!