![]() |
Edit-Felder => array of integer
Ich programmiere zurzeit an einem Sudoku Solver ;)
Nun hab ich eine Variable Sudoku (array[1..9,1..9] of integer), die die gegebenen Zahlen enthalten soll. Eingegeben wird alles über 81 Editfelder :mrgreen: (Kommt mir jetzt nicht mit Kritik, ich solle es mit StringGrid machen, ich wills mit Editfeldern lösen ;)) Ich habe die Editfelder allerdings schlau benannt, nämlich nicht einfach Edit1, Edit2 usw., sondern so: 1. Zeile des Sudokus: Edit11, Edit12, Edit13, ... , Edit19 2. Zeile des Sudokus: Edit21, Edit22, Edit23, ... , Edit29 usw. Nun zu meinem Problem: Ich könnte das ganze natürlich so einspeichern:
Delphi-Quellcode:
Allerdings bin ich zu faul, das so zu lösen :D Gibts eine klügere Methode? z.B. mit einer for-Schleife like this:
Sudoku[1,1]:=StrToInt(Edit11.Text);
Sudoku[1,2]:=StrToInt(Edit12.Text); {...} Sudoku[9,8]:=StrToInt(Edit98.Text); Sudoku[9,9]:=StrToInt(Edit99.Text);
Delphi-Quellcode:
Natürlich wird das so nicht funktionieren wegen dem "Editij", aber ich denke, ihr wisst, was ich meine ;)
for i:=1 to 9 do
for j:=1 to 9 do Sudoku[i,j]:=StrToInt(Editij.Text); MfG Z4ppy PS.: Ja, ich weiss, ich muss testen ob in den Edit-Feldern ein Integer steht und das mach ich vorher auch, daher ist das StrToInt da sicher kein Problem ;) |
Re: Edit-Felder => array of integer
|
Re: Edit-Felder => array of integer
Wäre das dann so richtig?
Delphi-Quellcode:
MfG Z4ppy
for i:=1 to 9 do
for j:=1 to 9 do Sudoku[i,j]:=StrToInt(TEdit(FindComponent('Edit'+IntToStr(i)+IntToStr(j))).Text); |
Re: Edit-Felder => array of integer
Hallo,
mal ganz schmutzig hingeschrieben ohne Test...:
Delphi-Quellcode:
[OT]Ihr seid mir heute zu schnell :cry: [/OT]
for i:=1 to 9 do
for j:=1 to 9 do Sudoku[i,j] := StrToInt(TEdit(FindComponent('Edit' + IntToStr(i) + IntToStr(j))).Text); |
Re: Edit-Felder => array of integer
jupp, oder
Delphi-Quellcode:
eventuell noch 'ne Fehlerbahandlung z.B. ala StrToIntDef/TryStrToInt
Sudoku[i,j]:=StrToInt(TEdit(FindComponent(Format('Edit%d%d', [i, j]))).Text);
|
Re: Edit-Felder => array of integer
Alles klar, danke für die schnelle Hilfe :)
MfG Z4ppy PS.: Das mit dem Testen is schon klar :) |
Re: Edit-Felder => array of integer
Nochmal hierzu: Wie kann man FindComponent auch ausserhalb der Form1.Create benutzen? Delphi 7 meckert dann, dass er die Funktion nicht kennt -.-
MfG Z4ppy |
Re: Edit-Felder => array of integer
wie wär's denn ungefähr so:
Delphi-Quellcode:
nur so als Gedanke ... und statt die Felder einzeln hinzuzappeln, könntest du dir auch ne Routine schreiben, um ein TEdit beim Create zu erzeugen. Damit könntest du dann alle Edit-Felder in einem Rutsch mit allen Eigenschaften definieren, positionieren und ganz nebenbei auch EditCompNo belegen.
const maxidx = 9;
type TForm1 = class(TForm) Edit11: TEdit; Edit12: TEdit; Edit13: TEdit; ... Edit21: TEdit; Edit22: TEdit; Edit23: TEdit; ... Edit91: TEdit; Edit92: TEdit; Edit93: TEdit; ... Edit99: TEdit; procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); private { Private-Deklarationen } EditCompNo: array[1..maxidx,1..maxidx] of integer; function myEditName(i,j: integer): string; function myEdit(i,j: integer): TEdit; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} function TForm1.myEditName(i, j: integer): string; begin Result:='Edit'+IntToStr(i)+IntToStr(j); end; function TForm1.myEdit(i, j: integer): TEdit; begin Result:=Components[EditCompNo[i,j]] as TEdit; end; procedure TForm1.FormCreate(Sender: TObject); var i,j: Integer; Editname: string; begin for i:=1 to maxidx do begin for j:=1 to maxidx do begin Editname:=myEditName(i,j); EditCompNo[i,j]:=FindComponent(Editname).ComponentIndex; end; end; end; procedure TForm1.FormShow(Sender: TObject); var i,j: Integer; begin for i:=1 to maxidx do for j:=1 to maxidx do myEdit(i,j).Text:=IntToStr(i)+IntToStr(j); end; mit myEdit(i,j) hast du dann immer Zugriff auf die Felder |
Re: Edit-Felder => array of integer
Zitat:
|
Re: Edit-Felder => array of integer
ein dynamisches Array hätte auch den Vorteil dass du mal ein "Hexadoku"(also 16X16) oder ein 4x4 Sudoku machen könntest ohne gleich eine neue Form schreiben zu müssen -> is flexibler
(nur so als Anregung) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:26 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