AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Obwohl alles funktionieren sollte, nimmt der Code meine Variablen nicht auf
Thema durchsuchen
Ansicht
Themen-Optionen

Obwohl alles funktionieren sollte, nimmt der Code meine Variablen nicht auf

Ein Thema von EinTor · begonnen am 18. Apr 2023 · letzter Beitrag vom 19. Apr 2023
Antwort Antwort
EinTor

Registriert seit: 18. Apr 2023
2 Beiträge
 
#1

Obwohl alles funktionieren sollte, nimmt der Code meine Variablen nicht auf

  Alt 18. Apr 2023, 22:41
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



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.

Geändert von EinTor (18. Apr 2023 um 22:56 Uhr) Grund: Ich habe nicht verstanden wie man Beiträge absendet und habe auf jegliche Höfflichkeits Formen verzichtet - jertzt verbessert
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Obwohl alles funktionieren sollte, nimmt der Code meine Variablen nicht auf

  Alt 18. Apr 2023, 22:57
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:
screenshot-2023-04-18-225439.png
Sebastian Jänicke
AppCentral

Geändert von jaenicke (18. Apr 2023 um 23:00 Uhr)
  Mit Zitat antworten Zitat
EinTor

Registriert seit: 18. Apr 2023
2 Beiträge
 
#3

AW: Obwohl alles funktionieren sollte, nimmt der Code meine Variablen nicht auf

  Alt 18. Apr 2023, 23:16
Oh das ist mir tatsächlich nicht aufgefallen. Vielen lieben Dank, es funktioniert, bzw. wird jetzt auch an der gewollten Stelle gezeichnet
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#4

AW: Obwohl alles funktionieren sollte, nimmt der Code meine Variablen nicht auf

  Alt 19. Apr 2023, 06:37
Moin...
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...
2. Bitte benutze "Delphi Tags" für den Quelltext. Ist besser lesbar. Das ist der Knopf im Editor mit dem Helm.
3. Bitte benutze heutzutage kein WITH mehr. 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:
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;

Geändert von haentschman (19. Apr 2023 um 11:05 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz