![]() |
Array oder Objectlist für Component
Hallo zusammen,
ich komme gerade bei einer Aufgabe nicht weiter, die mich schon länger beschäftigt. Es geht darum, dass er Schachbrett mit 25 Feldern zu sehen sein soll. Durch Eingebe der Zahlen 1-5, in ein Label, kann man beeinflussen wie viele Felder Farbig markiert werden sollen. 1=1 Feld, 2=2 Felder und so weiter. Die Felder, die markiert werden, sollen zufällig gewählt sein. Zuerst habe ich es so gelöst, dass ich allen Feldern einen Case geben habe und durch random(25), dann ein zufälliges Feld gewählt habe. Das ganze wurde aber noch umfangreicher, weil ich bei jeder neuen Label Eingabe auch alle Felder wieder grau färben muss. Um das ganze kompakter zu gestalten habe ich versucht ein Array oder eine Objektliste vom typ TRectangle zu erstellen, daran bin ich aber bis jetzt leider gescheitert. Wäre schön, wenn ihr mir da weiter helfen könnt. |
AW: Array oder Objectlist für Component
Hi MelCode,
ich denke du musst dein Problem etwas präzisieren. Im Moment klingt es für mich wie "Ich muss ein Haus bauen, welche Farbe soll ich nehmen?". Ich denke mal, solange du kein definiertes, begrenztes Problem hast wird vermutlich keiner (oder kaum einer) anwtworten. Ein paar Ideen zu deinem Projekt: 1) Falls du visuell ein Schachbrettmuster mit 5x5 Feldern hast, würde ich auch ein zweidimensionales Array wählen. Also
Delphi-Quellcode:
var MeineFelder : Array [0..5] of Array[0..5] of TMeinFeld;
2) Und da siehst du auch schon meinen zweiten Vorschlag... Ich würde einen eigenen Typen pro Feld definieren, damit du den Status auch mit hinterlegen kannst.
Delphi-Quellcode:
In diesem Typ könntest du auch weitere Informationen hinterlegen.
type
TMeinFeld = record Koordinaten : TRect; // Kann vermutlich weg (siehe 4) IstGrau : Boolean; end; 3) Die Eingabe der zufällig gefüllten Felder ... du wirst das wohl kaum in eimem Label eingeben können. Du meinst warscheinlich ein Edit-Feld. Hier musst du bedenken, dass der Benutzer auch andere Sachen eingeben könnte. Eine Idee wäre den Wert per
Delphi-Quellcode:
auszulesen und falls
StrToIntDef(edEingabe.Text, 0);
der Wert kleiner oder gleich 0 ist oder größer als 5 eine Meldung zu geben "Geben Sie einen vernünftigen Wert ein!". Da es sich aber nur um 5 Möglichkeiten handelt (0 außen vor, dafür würde ich einen "Bereinigungs-Knopf machen), würde ich sogar 5 kleine Buttons machen. Da gibt es dann auch keine Falscheingaben, die abgefangen werden müssten. Bei einer Schulaufgabe würde ich allerdings prüfen, ob Buttons erlaubt sind, da die Lehrkraft vielleicht auch gerade wollte das geübt wird fehlerhafte Eingaben abzufangen. 4) Falls du immer gleichgroße Felder hast, wäre vermutlich die Angabe der Koordinaten überflüssig, da sich diese durch die Position im Array schon bestimmen lassen.
Delphi-Quellcode:
Wie dann deine ZeichneFeld-Funktion aussehen muss hängt auch davon ab, wo du was machen willst.
for iXCoord := Low(MeineFelder) to High(MeineFelder) do
begin for iYCoord := Low(MeineFelder[iXCoord]) to High(MeineFelder[iXCoord]) do begin ZeichneFeld( iXCoord, iYCoord, 50, // Feste Höhe 50, // Feste Breite MeineFelder[iXCoord][iYCoord] ); end; end; Ein etwas dümmliches Beispiel mit Buttons:
Delphi-Quellcode:
Falls das mehrfach ausgeführt wird, müsstest du natürlich alle erzeugten Buttons in einer Liste Speichern und
procedure TMyForm1.ZeichneFeld(
const iXCoord : Integer; const iYCoord : Integer; const iHeight : Integer; const iWidth : Integer; AktuellesFeld : TMeinFeld ); var btn : TButton; begin btn := TButton.Create(Self); btn.Top := iYCoord; btn.Left := iXCoord; btn.Height := iHeight; btn.Width := iWidth; if (AktuellesFeld .IstGrau) then btn.Caption := 'o' else btn.Caption := 'x'; btn.Visible := True; end; vor dem erneuten Erzeugen die Objekte dieser Liste freigeben, aber da du vermutlich nur auf einem Canvas etwas zeichnest, musst du nur das Canvas vorher leeren und keine Objekte freigeben. Ich hoffe das (oder irgendwas davon) hilft dir weiter. Mit freundlichem Gruß Incocnito |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 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