Autor Beitrag
Tiga
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 13.12.05 14:43 
Hallo!
Formulire ich meine Frage etwas anders. In dem Beispiel unten, sollen, so fordert unser Lehrer, alle SetzePunkt...proceduren zu einer zusammengefasst werden, aber trotzdem noch einzeln bei TForm1.FormMouseDown... aufgerufen werden können.
Hat dafür einer eine Idee?

Danke für eure Hilfe
Tiga

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

interface

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

type
  TForm1 = class(TForm)
    BnEnde: TButton;
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure BnEndeClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  durchgezogen:boolean;

implementation

{$R *.dfm}

type
 TPunkt=record  //Var a:TPunkt; begin a.x:=20; a.y:=100;
  x,y:integer;
 end;

 TZeichnen=object
  anfang,ende,aSchliessen:TPunkt;
  anfangistfestgelegt:Boolean;
  procedure Initialisieren;
  procedure SetzePunkt(x,y:integer);
  procedure Linie;
  procedure SetzePunktFuerRechteck(x,y:integer);
  procedure Rechteck;
  procedure SetzePunktFuerDreieck(x,y:integer);
  procedure Dreieck;
  procedure fuellen(x,y,hintergrundfarbe,fuellfarbe:integer);
 end;

var zeichnen:TZeichnen;
  procedure TZeichnen.Initialisieren;
    begin
    anfangistfestgelegt:=false;     //Es gibt noch keinen Anfangspunkt
    end;

  procedure TZeichnen.SetzePunkt(x,y:integer);
    begin
    if not (anfangistfestgelegt) then
      begin
      anfang.x:=x;
      anfang.y:=y;
      anfangistfestgelegt:=true;
      aSchliessen.x:=x;
      aSchliessen.y:=y;
      end
    else
      begin
      if not (durchgezogen) then
      begin
      ende.x:=aSchliessen.x;
      ende.y:=aSchliessen.y;
      linie;
      anfangistfestgelegt:=false;
      end
    else
      begin
      ende.x:=x;
      ende.y:=y;
      linie;
      anfang.x:=ende.x;
      anfang.y:=ende.y;
      end;
    end;
  end;

  procedure TZeichnen.Linie;
    begin
    Form1.Canvas.MoveTo(anfang.x,anfang.y);
    Form1.Canvas.LineTo(ende.x,ende.y);
    anfang.x:=ende.x;
    anfang.y:=ende.y;
    end;

  procedure TZeichnen.SetzePunktFuerRechteck(x,y:integer);
    begin
    if not (anfangistfestgelegt) then
      begin
      anfang.x:=x;
      anfang.y:=y;
      anfangistfestgelegt:=true;
      end
    else
      begin
      ende.x:=x;
      ende.y:=y;
      Rechteck;
      anfangistfestgelegt:=false;
      end;
    end;

  procedure TZeichnen.Rechteck;
    begin
    Form1.Canvas.MoveTo(anfang.x,anfang.y);
    Form1.Canvas.LineTo(ende.x,anfang.y);
    Form1.Canvas.LineTo(ende.x,ende.y);
    Form1.Canvas.LineTo(anfang.x,ende.y);
    Form1.Canvas.LineTo(anfang.x,anfang.y);
    end;

   procedure TZeichnen.SetzePunktFuerDreieck(x,y:integer);
    begin
    if not (anfangistfestgelegt) then
      begin
      anfang.x:=x;
      anfang.y:=y;
      anfangistfestgelegt:=true;
      end
    else
      begin
      ende.x:=x;
      ende.y:=y;
      Dreieck;
      anfangistfestgelegt:=false;
      end;
    end;

  procedure TZeichnen.Dreieck;
    begin
    Form1.Canvas.MoveTo(anfang.x,anfang.y);
    Form1.Canvas.LineTo(ende.x,anfang.y);
    Form1.Canvas.LineTo(ende.x,ende.y);
    Form1.Canvas.LineTo(anfang.x,ende.y);
    Form1.Canvas.LineTo(anfang.x,anfang.y);
    Form1.Canvas.MoveTo(anfang.x,anfang.y);
    Form1.Canvas.LineTo(round((anfang.x+ende.x)/2),ende.y);
    Form1.Canvas.LineTo(ende.x,anfang.y);
    end;

    procedure TZeichnen.fuellen(x,y,hintergrundfarbe,fuellfarbe:integer);
    begin
    Form1.Canvas.Pixels[x,y]:=fuellfarbe;
    Form1.Canvas.Refresh;

    if Form1.Canvas.Pixels[x,y+1]=hintergrundfarbe then
      fuellen(x,y+1,hintergrundfarbe,fuellfarbe);

    if Form1.Canvas.Pixels[x,y-1]=hintergrundfarbe then
      fuellen(x,y-1,hintergrundfarbe,fuellfarbe);

    if Form1.Canvas.Pixels[x+1,y]=hintergrundfarbe then
      fuellen(x+1,y,hintergrundfarbe,fuellfarbe);

    if Form1.Canvas.Pixels[x-1,y]=hintergrundfarbe then
      fuellen(x-1,y,hintergrundfarbe,fuellfarbe);
    end;
  
  procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
   begin
    if (button=mbleft) and not (ssshift in shift) then
      begin
      durchgezogen:=true;
      zeichnen.SetzePunkt(x,y);
      end;

    if (button=mbleft) and (ssshift in shift) then
      begin
     zeichnen.SetzePunktFuerRechteck(x,y);
     end;

    if (button=mbmiddle) and not (ssshift in shift) then
     begin
     durchgezogen:=true;
     zeichnen.fuellen(x,y,Form1.Canvas.Pixels[x,y],clred);
     end;

   if (button=mbmiddle) and (ssshift in shift) then
     begin
     durchgezogen:=true;
     zeichnen.fuellen(x,y,Form1.Canvas.Pixels[x,y],clgreen);
     end;

    if (button=mbright) and not (ssshift in shift) then
      begin
      durchgezogen:=false;
      zeichnen.SetzePunkt(x,y);
      end;

    if (button=mbright) and (ssshift in shift) then
      begin
      zeichnen.SetzePunktFuerDreieck(x,y);
      end;
    end;

  procedure TForm1.BnEndeClick(Sender: TObject);
    begin
    close;
    end;

  procedure TForm1.FormCreate(Sender: TObject);
   begin
   Zeichnen.Initialisieren;
   end;

end.


Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt.
azubi_20
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Di 13.12.05 14:57 
1. Warum schreibst du nicht im ersten thread weiter, is doch dasselbe thema ?
2. ähm, kannst du bitte deinen Quelltext mit Delphitags umschließen ?

Also deine Frage : Du sollst aus deinen SetzePunkt...-Proceduren eine machen - dann mach es doch einfach. Guck dir deine Proceduren an, was gleich ist kannste zusammenfassen, beim Rest fallunterscheidung (mglw. mit Parameter ?)
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 13.12.05 15:40 
Ich mach hier mal zu. Die Frage kann man dort weiter diskutieren.

*closed*

_________________
We are, we were and will not be.
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.

Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.