AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Problem mit Schleifen/Array/??? - Brettspiel Mastermind
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Schleifen/Array/??? - Brettspiel Mastermind

Ein Thema von ka8578 · begonnen am 15. Okt 2020 · letzter Beitrag vom 19. Okt 2020
 
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.094 Beiträge
 
Delphi 12 Athens
 
#2

AW: Problem mit Schleifen/Array/??? - Brettspiel Mastermind

  Alt 15. Okt 2020, 21:00
Hallo,

ich hoffe doch, dass dir bewußt ist, dass ein TRectangle ein Objekt ist?
Die Objektinstanz muss man erst erzeugen, bevor man diese Verwenden kann.

So wie du es machst, greifst du auf Speicher zu, der deinem jeweiligen Rectangle
gar nicht gehört. Du schreibst also irgendwo in den Speicher weil die TRectangle
Variablen ohne weitere Initialisierung einfach eine zufällige Speicheradresse enthalten.

So und wie lösen wir das nun?

Hier mal etwas Code der 60 Rectangles erzeugt und in eine Liste packt:
Die Liste ist mittels Generics umgesetzt, falls das konzeptionell aber über
euren Unterricht hinausgeht kann man das auch ein wenig mehr "OldSchool" umsetzen.

Delphi-Quellcode:
unit BoardForm;

interface

uses
  [..] // was alles für eine FMX Form usw. nötig ist
  System.Generics.Collections;

type
  TBoardForm = class(TForm)
  private
    FRectangleList : TObjectList<TRectangle>;

    procedure CreateRectangle(x,y, Width, Height : Single; Color: TAlphaColor);
  public
    procedure CreateRectangles;
  end;

implementation

procedure TBoardForm.CreateRectangle(x,y, Width, Height : Single; Color: TAlphaColor);
var
  Rectangle: TRectangle;
begin
  Rectangle := TRectangle.Create(self); // Owner ist die eigene Form
  Rectangle.Position.X := x;
  Rectangle.Position.Y := y;
  Rectangle.Width := Width;
  Rectangle.Height := Height;
  Rectangle.Fill.Color := Color;

  FRectangleList.Add(Rectangle);
end;

procedure TBoardForm.CreateRectangles;
var
  i : Integer;
begin
  // Liste erzeugen inkl. OwnsObjects auf true, damit die hinzugefügten
  // Rectangles beim späteren Freigeben der Liste auch freigegeben werden.
  // Bei Desktopprogramm und ab Delphi 10.4 auch bei Smartphone App sonst
  // sog. Speicherleck.
  FRectangleList := TObjectList<TRectangle>.Create(true);

  // 60 Rectangles mal irgendwie erzeugen, X/Y Platzierung kannst du selber gerade ziehen
  for i := 1 to 60 do
    CreateRectangle(i*3, i*3, 5, 5, TAlphaColor.claBlue);

  // Ändern der Farbe eines bestimmten Rectangles (des 6.):
  FRectangleList[5].Fill.Color := TAlphaColor.claRed;
end;
Und falls Generics zu heftig für euch ist:
Statt TObjectList<TRectangle> eine normale TObjctList; aus System.Contnrs benutzen
und beim Lesezugriff typecasten: TRectangle(FRectangleList[5]).Fill.Color := TAlphaColor.claRed;

Grüße
TurboMagic
  Mit Zitat antworten Zitat
 


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 16:08 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-2025 by Thomas Breitkreuz