Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Schleife mit Variable spuckt Müll aus
teamrocket0 - Fr 29.08.08 11:59
Titel: Schleife mit Variable spuckt Müll aus
So...eine Sache die ich mal absolut nicht verstehe.
In der folgenden Schleife wird in einem "StrinGrid" gesucht.
Erst Zeilen, dann Spalten.
Die Variable "iCol" soll an die Variable "Spalten" übergeben werden.
Haut aber nicht hin.
Ich habe mir zur Analyse die "showmessage" eingebaut. Die Variable "iCol" ist aber nicht die gleiche wie "Spalten"
Weiß einer wodurch das kommt?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.Panel1Click(Sender: TObject); var iRow, iCol: integer; begin Spalten:=0; for iRow := 0 to pred (Form1.StringGrid1.RowCount) do for iCol := 0 to pred (Form1.StringGrid1.ColCount) do if Form1.StringGrid1.Cells [iCol,iRow] = 'X' then Spalten:=iCol; Showmessage(inttostr(iCol) + 'iCol'); Showmessage(inttostr(Spalten)+ 'Spalten'); Showmessage(inttostr(iRow)+ 'iRow'); Form1.ValueListEditorZeile(Spalten+1); Form1.Memo1.Lines.Add(Form3.ValueListEditor1.Cells[1,Zeilen]); Memo1.Lines.Text:=stringreplace(Form1.Memo1.Lines.Text,'*name*',Form1.StringGrid1.Cells[0,iRow],[rfReplaceAll ]); Zeilen:=0; end; |
Die Variable "Spalten" wird in einer anderen Prozecur verarbeitet. Villeicht kann ich die später auch zusammenlegen!^^ Aber erst muss ich das hinbekommen das ich "iCol" kopiert bekomme!
Moderiert von
AXMD: Topic aus VCL (Visual Component Library) verschoben am Sa 30.08.2008 um 11:18
JDKDelphi - Fr 29.08.08 12:04
Titel: StringGrid
Hallo,
probier's mal mit BEGIN und END in den FOR-Schleifen und IF-Bedingungen..
Gruss
Gausi - Fr 29.08.08 12:11
Ich rück den Code mal so ein, wie er ausgeführt wird. Die Korrektur darfst du dann machen. ;-)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.Panel1Click(Sender: TObject); var iRow, iCol: integer; begin Spalten:=0; for iRow := 0 to pred (Form1.StringGrid1.RowCount) do for iCol := 0 to pred (Form1.StringGrid1.ColCount) do if Form1.StringGrid1.Cells [iCol,iRow] = 'X' then Spalten:=iCol; Showmessage(inttostr(iCol) + 'iCol'); Showmessage(inttostr(Spalten)+ 'Spalten'); Showmessage(inttostr(iRow)+ 'iRow'); Form1.ValueListEditorZeile(Spalten+1); Form1.Memo1.Lines.Add(Form3.ValueListEditor1.Cells[1,Zeilen]); Memo1.Lines.Text:=stringreplace(Form1.Memo1.Lines.Text,'*name*',Form1.StringGrid1.Cells[0,iRow],[rfReplaceAll ]); Zeilen:=0; end; |
Nebenbei müsste der Compiler Warnungen ausspucken wie "Schleifenvariable nach Durchlauf undefiniert" oder so ähnlich.
JDKDelphi - Fr 29.08.08 12:17
Titel: Stringgrid
Hallo,
ich kann Gausi nur beipflichten..
Immer schön BEGIN und END-Schachtelungen verwenden.
Dient der Übersichtlichkeit und Funktionalität.
Gruss
Gausi - Fr 29.08.08 12:29
Naja, IMMER mit begin und end zu schachteln ist imho nicht nötig. Z.B. würde ich die innere for-Schleife nicht so einpacken, denn das ist ja für die äußere Schleife nur eine Anweisung. Aufpassen muss man natürlich, und das fällt einem leichter, wenn man sich eine korrekte Einrückung der Codezeilen angewöhnt. ;-)
JDKDelphi - Fr 29.08.08 12:33
Titel: StringGrid
Hallo Gausi,
Du hast recht. Man braucht's nicht immer, das BEGIN-END..
Ich mach' das aus Gewohnheit so.
Vielleicht kommt's aus meiner C-Vergangenheit
Gruss
teamrocket0 - Fr 29.08.08 22:30
Huha BAAAAM...das ist ja mal wieder nicht zu fassen.
Ach, ich bin eben kein Programmierer!^^
Das lern ich wohl nicht mehr...
Aber egal...ich konnte mein Problem lösen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.Panel1Click(Sender: TObject); var iRow, iCol: integer; begin Spalten:=0; for iRow := 0 to pred (Form1.StringGrid1.RowCount) do begin for iCol := 0 to pred (Form1.StringGrid1.ColCount) do begin if Form1.StringGrid1.Cells [iCol,iRow] = 'X' then begin Spalten:=iCol; Showmessage(inttostr(iCol) + 'iCol'); Showmessage(inttostr(Spalten)+ 'Spalten'); Showmessage(inttostr(iRow)+ 'iRow'); Form1.ValueListEditorZeile(Spalten); Form1.Memo1.Lines.Add(Form3.ValueListEditor1.Cells[1,Zeilen]); Memo1.Lines.Text:=stringreplace(Form1.Memo1.Lines.Text,'*name*',Form1.StringGrid1.Cells[0,iRow],[rfReplaceAll ]); Zeilen:=1; end; end; end; end; |
Ich hoffe die formatirung ist so angenehm!^^
Damals in der Berufschule wurde das nicht gelert. Aber Programmirung stand da ja auch nur am Rande...
Meine selbst gebastelte Procedur "Form1.ValueListEditorZeile(Spalten)" lass ich erstmal so stehen...es haut hin und das reicht mir erhlich gesagt auch schon!^^ Vorerst. Aufgeräumt wird später! :-)
Besten Dank an "JDKDelphi" und "Gausi"(mal wieder :P ) für den unschlagbaren Tipp.
Auf Bald, wenn es wieder heißt "WAS? WAS HAST DU PROGRAMMIERT?"^^
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!