![]() |
Obwohl alles funktionieren sollte, nimmt der Code meine Variablen nicht auf
Guten Abend,
dieses Mals ist auch eine Beschreibung dabei. Zur Zeit Arbeit ich an einem Projekt, bei welchem ich ein Dreieck, welches ich Karol nenne, durch ein Gitternetz mit Hilfe von Knöpfen bewegen möchte. Die Welt aufzubauen war bis jetzt kein Problem. Doch nun möchte ich, dass Karol beim Starten des Programms sofort erscheint. Bei meinem Code könnte ich mansouth(1,1) verwenden. Allerdings wollte ich auch mal testen, dass mit den xpos und ypos Variablen zu machen, welche für Karol bestimmt sind. Sowas würde meiner Meinung nach weitere Schritte um einiges erleichtern. Doch dieser wird hier nicht gezeichnet. Ich habe mehrfach mit einem Panel getestet ob, die xpos und ypos Zahlen im Code irgendwo "stecken" bleiben. Doch dabei war kein Problem, das bedeutet, dass die Koordinaten wo Karol steht funktionieren. Beim "zeichnen" von Karol ist ebenfalls kein Problem, weil ich ja mansouth(1,2) ohne weitere Probleme benutzen kann. Nun weiß ich nicht wie ich weiter testen kann, wo das Problem ist, bzw. wie ich dieses beheben kann. Vielen dank schonmal im Voraus :D unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type trichtung = (south, north, west, east); type tRobotor = record xpos: integer; ypos: integer; richtung: tRichtung; end; type TForm1 = class(TForm) Bintitialisieren: TButton; Izeichnen: TImage; p1: TPanel; Panel1: TPanel; procedure FormCreate(Sender: TObject); procedure mansouth(x, y: integer); procedure mannorth(x, y: integer); procedure maneast(x, y: integer); procedure manwest(x, y: integer); procedure hintergrund; procedure robotorrichtung; procedure BintitialisierenClick(Sender: TObject); procedure brechtsdrehClick(Sender: TObject); private robotor: tRobotor; { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin //Gitternetz und Robot beim start zeichnen robotor.xpos := 1; robotor.ypos := 1; robotor.richtung := south; hintergrund; robotorrichtung; //Hiermit sollte der Karol gezeichnet werden, aber es passiert nicht? Ich verstehe aber nicht wieso, denn das Gitternetz wird hier gezeichnet. Zusätzlich habe ich getestet, //ob die xpos und ypos Variabeln überall hin mitgenommen werden. Somit müsste alles funktionieren. Doch beim Testen, wird hier kein Dreickeck gezeichnet (Die man befehle //funktionieren auch, wenn ich zb mansouth(1,2) teste. Sieht jemand meinen Logik-Fehler? end; procedure TForm1.mansouth(x, y: integer); //Karol guckt nach unten begin with Izeichnen.Canvas do begin Pen.Color := clBlack; Brush.Color := clBlack; Brush.Style := bsSolid; MoveTo((x-1)*40, (y-1)*40); LineTo(x*40, (y-1)*40); LineTo(x*40 - 20, y*40); LineTo((x-1)*40, (y-1)*40); FloodFill(x*40 - 20, y*40 - 20, clBlack, fsBorder); end; end; procedure TForm1.mannorth(x, y: integer); //Karol guckt nach oben begin with Izeichnen.Canvas do begin Pen.Color := clBlack; Brush.Color := clBlack; Brush.Style := bsSolid; MoveTo(x*40 - 20, (y-1)*40); LineTo(x*40, y*40); LineTo((x-1)*40, y*40); LineTo(x*40 - 20, (y-1)*40); FloodFill(x*40 - 20, y*40 - 20, clBlack, fsBorder); end; end; procedure TForm1.maneast(x, y: integer); //Karol guckt nach rechts begin with Izeichnen.Canvas do begin Pen.Color := clBlack; Brush.Color := clBlack; Brush.Style := bsSolid; MoveTo((x-1)*40, (y-1)*40); LineTo(x*40, y*40 - 20); LineTo((x-1)*40, y*40); LineTo((x-1)*40, (y-1)*40); FloodFill(x*40 - 20, y*40 - 20, clBlack, fsBorder); end; end; procedure TForm1.manwest(x, y: integer); //Karol guckt nach links begin with Izeichnen.Canvas do begin Pen.Color := clBlack; Brush.Color := clBlack; Brush.Style := bsSolid; MoveTo((x-1)*40, y*40 - 20); LineTo(x*40, (y-1)*40); LineTo(x*40, y*40); LineTo((x-1)*40, y*40 - 20); FloodFill(x*40 - 20, y*40 - 20, clBlack, fsBorder); end; end; procedure TForm1.hintergrund; //Gitternetz wird gezeichnet var i,j: integer; begin with Izeichnen.Canvas do begin for i := 0 to 9 do begin for j := 0 to 9 do begin Pen.Color := clBlue; Brush.Color := clwhite; Rectangle(i*40, j*40, (i+1)*40, (j+1)*40); end; end; end; end; procedure TForm1.robotorrichtung; //KArol wird gezeichnet, funktioniert nicht???? begin with robotor do case richtung of east: maneast(xpos*40, ypos*40); south: mansouth(xpos*40, ypos*40); west: manwest(xpos*40, ypos*40); north: mannorth(xpos*40, ypos*40); end; end; procedure TForm1.BintitialisierenClick(Sender: TObject); //basically same wie im FormCreat, was ist das Porblem??? begin hintergrund; robotor.xpos := 1; robotor.ypos := 1; robotor.richtung := south; robotorrichtung; end; end. |
AW: Obwohl alles funktionieren sollte, nimmt der Code meine Variablen nicht auf
Liste der Anhänge anzeigen (Anzahl: 1)
Das wird schon gezeichnet. Allerdings muss der Bildschirm bzw. dein TImage natürlich auch groß genug sein, damit du das Dreieck an Position 1580/1580 auch siehst.
In deinem Raster liegen die Koordinaten aber nicht. Bist du sicher, dass du die Koordinaten zweimal mit 40 multiplizieren möchtest? Wenn du den Faktor 40, also die Multiplikationen, aus der Prozedur robotorrichtung herausnimmst, sollte das Dreieck auch oben links im ersten Kästchen gezeichnet werden. // EDIT: Ich habe es kurz getestet, ohne das *40 klappt es. Die Koordinaten siehst du auch ganz einfach im Debugger, wenn du einen Haltepunkt setzt: Anhang 55986 |
AW: Obwohl alles funktionieren sollte, nimmt der Code meine Variablen nicht auf
Oh das ist mir tatsächlich nicht aufgefallen. Vielen lieben Dank, es funktioniert, bzw. wird jetzt auch an der gewollten Stelle gezeichnet :D
|
AW: Obwohl alles funktionieren sollte, nimmt der Code meine Variablen nicht auf
Moin...8-)
:dp: willkommen 3 Sachen OT: 1. Bitte trage deine Delphi Version in dein Profil ein. Da kann man besser helfen. Denn zwischen D7 und Alexandria gibt es dann doch Unterschiede...:zwinker: 2. Bitte benutze "Delphi Tags" für den Quelltext. Ist besser lesbar. Das ist der Knopf im Editor mit dem Helm. :zwinker: 3. Bitte benutze heutzutage kein WITH mehr. :warn: Es funktioniert zwar, aber es gibt Probleme beim Debugging und der Anzeige von Variablen Werten wenn man mit der Maus über die Variable geht.
Delphi-Quellcode:
:wink:
with Izeichnen.Canvas do
begin Pen.Color := clBlack; end; ... var Blubb: TCanvas; // beliebiger Name, sollte aber selbstsprechend sein . Blubb := Izeichnen.Canvas; Blubb.Pen.Color := clBlack; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz