![]() |
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) |
Re: Edit-Felder => array of integer
ich würde nicht über ComponentIndex gehen ... denn dieser ändert sich eventuell, wenn mal eine Komponente erstellt/gelöscht wird :zwinker:
'nen Zeiger auf die Objektinstanz ist da wohl besser geeignet. (hier also 'ne Variable vom Typ TEdit)
Delphi-Quellcode:
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 } EditComp: array[1..maxidx, 1..maxidx] of TEdit; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i,j: Integer; begin for i := 1 to maxidx do for j := 1 to maxidx do EditComp[i, j] := FindComponent(Format('Edit%d%d', [i, j])); end; procedure TForm1.FormShow(Sender: TObject); var i,j: Integer; begin for i:=1 to maxidx do for j:=1 to maxidx do EditComp[i, j].Text := IntToStr(i) + IntToStr(j); end; |
Re: Edit-Felder => array of integer
@himitsu:
Da hast du natürlich recht! Ich bin im ersten Ansatz einfach davon ausgegangen, dass bei dieser Art von Programm nachträglich keine Components hinzukommen oder wegfallen. Egal, wie man's realisiert, würde ich aber immer empfehlen, alles, aber wirklich alles, was irgendwie mit den zweidimensional angeordneten Editfeldern zu tun hat, auch in der Form blabla(i,j) abrufbar zu machen, weil man sich sonst einfach hoffnungslos in den Indizes verheddert. Die Zeiger sind natürlich besser, weil für jede Situation geeignet. |
Re: Edit-Felder => array of integer
Super, viiiiiielen Danke euch allen :thumb:
MfG Z4ppy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:49 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