Autor Beitrag
technix01
Hält's aus hier
Beiträge: 7


D4
BeitragVerfasst: Di 13.04.04 10:50 
Hi,
Es wird überhaupt nichts gezeichnet wenn ich auf den Zeichnen Button klicke. Ist an den Übergaben was falsch?
Vom Benutzer werden lediglich Höhe und Breite angegeben, daraus soll dann ein Haus mit Tür und Fenstern auf die Image-Fläche gezeichnet werden.

Hier der Code: (ist Delphi 4)

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:
procedure Tfrm_modul.bt_zeichnenClick(Sender: TObject);
  var x,y:Integer;
  var breite,hoehe:Integer;

Procedure Einlesen(var breite, hoehe, x, y:Integer);
begin
breite:=sped_breite.value;
hoehe:=sped_hoehe.value;
x:=0;
y:=300;
end;

Procedure Grundform_Reihenhaus_zeichnen(breite, hoehe, x, y:Integer);
begin
frm_modul.Im_Test.Canvas.Rectangle(x,y,x+breite,y-hoehe + (30*hoehe div 100)); // Rechteck zeichnen
frm_modul.Im_Test.Canvas.moveto(x + breite div 2,y-hoehe); // zur Spitze springen
frm_modul.Im_Test.Canvas.lineto(x,y-hoehe + (30*hoehe div 100)); // zur linken Seite verbinden
frm_modul.Im_Test.Canvas.moveto(x + breite div 2,y-hoehe); // zur Spitze springen
frm_modul.Im_Test.Canvas.lineto(x+breite,y-hoehe + (30*hoehe div 100)); // zur rechten Seite verbinden
end;

Procedure Tuer_Reihenhaus_zeichnen(breite, hoehe, x, y:Integer);
begin
frm_modul.Im_Test.Canvas.Rectangle(x + breite * 65 div 100,y,x + breite * 8 div 10 ,y - hoehe * 1 div 4);
end;

Procedure Fenster_liun_Reihenhaus_zeichnen(breite, hoehe, x, y:Integer);
begin
frm_modul.Im_Test.Canvas.Rectangle(x + breite div 5,y-hoehe + (90*hoehe div 100),x + breite * 2 div 5,y- hoehe * 1 div 4);
end;

Procedure Fenster_liob_Reihenhaus_zeichnen(breite, hoehe, x, y:Integer);
begin
frm_modul.Im_Test.Canvas.Rectangle(x + breite div 5,y -hoehe* 45 div 100 ,x + breite * 2 div 5, y-hoehe* 6 div 10);
end;

Procedure Fenster_reob_Reihenhaus_zeichnen(breite, hoehe, x, y:Integer);
begin
frm_modul.Im_Test.Canvas.Rectangle(x + breite * 65 div 100 ,y - hoehe * 45 div 100,x + breite * 85 div 100,y - hoehe * 6 div 10);
end;

Procedure x_y_position_setzen(breite, hoehe,y:Integer; var x:Integer);
begin
x:=x+breite;
end;

begin
Grundform_Reihenhaus_zeichnen(breite, hoehe, x, y);
Tuer_Reihenhaus_zeichnen(breite, hoehe, x, y);
Fenster_liun_Reihenhaus_zeichnen(breite, hoehe, x, y);
Fenster_liob_Reihenhaus_zeichnen(breite, hoehe, x, y);
Fenster_reob_Reihenhaus_zeichnen(breite, hoehe, x, y);
x_y_position_setzen(breite,hoehe,x,y);
end;


Bitte helft mir schnell, is für'n Schulprojekt.
Danke!

PS: Wenn ich das mit den Prozeduren weglasse und alles in den zeichnenbutton schreibe, dann klappts. Daher denke ich, dass es an den Übergaben zwischen den Prozeduren liegt......
umpani
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 389



BeitragVerfasst: Di 13.04.04 11:19 
Du benutzt in deinem COde die Variablen: breite, höhe,x,y.
Diese werden in der Procedure Tfrm_modul.bt_zeichnenClick(Sender: TObject);
definiert.

Jedoch bekommen diese Variablen nirgendwo werte. Und ohne eine Länge und brete, können deine
Linien nicht gezeichnet werden.

Ich gehe davon aus, dass Du diese Variablen irgendwo im Programm noch einmal definiert hast. DOrt kann auch der Benutzer etwas in die Variablen eintragen.
Wenn du jedoch die Variablen in dieser Procedure erneut definierst mit

ausblenden Delphi-Quelltext
1:
2:
 var x,y:Integer;
  var breite,hoehe:Integer;
,

dann sind es neue Variablen (die den selben Namen, jedoch nicht den selben inhalt haben)

Stichwort: globale und nicht globale Variablen


Gruß Umpani

_________________
Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius
SvenAbeln
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 334
Erhaltene Danke: 3



BeitragVerfasst: Di 13.04.04 14:27 
Hallo,

wie umpani schon geschrieben hat, werden deine Variablen nicht initialisiert.

Wenn ich deinen Code aber richtig verstehe, soll die Prozedur Einlesen genau dieses machen, aber sie
wird gar nicht aufgerufen.

Also einfach diesen Aufruf noch einfügen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
begin
  Einlesen(breite, hoehe, x, y);

  Grundform_Reihenhaus_zeichnen(breite, hoehe, x, y);
  Tuer_Reihenhaus_zeichnen(breite, hoehe, x, y);
  Fenster_liun_Reihenhaus_zeichnen(breite, hoehe, x, y);
  Fenster_liob_Reihenhaus_zeichnen(breite, hoehe, x, y);
  Fenster_reob_Reihenhaus_zeichnen(breite, hoehe, x, y);
  x_y_position_setzen(breite,hoehe,x,y);
end;
technix01 Threadstarter
Hält's aus hier
Beiträge: 7


D4
BeitragVerfasst: Di 13.04.04 15:01 
Titel: Vielen Dank!
Vielen Dank für eure Hilfe!
Es lag tatsächlich daean, dass ich vergessen habe das Einlesen aufzurufen.