| Autor |
Beitrag |
technix01
Hält's aus hier
Beiträge: 7
D4
|
Verfasst: 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)
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)); frm_modul.Im_Test.Canvas.moveto(x + breite div 2,y-hoehe); frm_modul.Im_Test.Canvas.lineto(x,y-hoehe + (30*hoehe div 100)); frm_modul.Im_Test.Canvas.moveto(x + breite div 2,y-hoehe); frm_modul.Im_Test.Canvas.lineto(x+breite,y-hoehe + (30*hoehe div 100)); 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
      
Beiträge: 389
|
Verfasst: 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
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
      
Beiträge: 334
Erhaltene Danke: 3
|
Verfasst: 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.
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 
Hält's aus hier
Beiträge: 7
D4
|
Verfasst: 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.
|
|
|