Registriert seit: 5. Apr 2003
128 Beiträge
|
CharFeld/Suchen/Ersetzen
22. Jun 2003, 11:29
Hi Leute...
Ich hab mal so nebenbei an nem Programm gearbeitet, das aus einem StringGrid eben was einlesen soll, und dann als Charelemente in ein Feld speichern soll. Der Benutzer soll ein gesuchtes Element eingeben, das wird dann durchlaufen bis es gefunden wird, und dann alle Elemente ab da sollen mit einem Leerstring gefüllt werden. Aber wie meinem Nickname nach zu urteilen ist, hab ich das wiedermal nicht ohne Fehler geschafft .
Das ganze zeigt einen DebuggerFehler in der Procedure GetMatrix auf, in dem das ganze eingelesen werden soll. Das ganze lässt sich außerdem compilieren, aber wenn ich auf Start drücke und alles vergleichen will funktioniert das natürlich nicht... hier mal der Quellcode:
Delphi-Quellcode:
unit fcharfeld;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, ExtCtrls;
type
TFeld = array [1..7, 1..14] of char;
TForm1 = class(TForm)
Panel1: TPanel;
gbEingabe: TGroupBox;
StringGrid1: TStringGrid;
GroupBox1: TGroupBox;
edGesucht: TEdit;
btStart: TButton;
procedure btStartClick(Sender: TObject);
private
function SubMatrix( var A: TFeld; var x, y: integer; var ges: char;
s: TStringGrid): boolean;
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//***********************************************//
// //
// UP: GetMatrix //
// Zweck: Einlesen der Feldelemente, und //
// nur speichern, wenn sich darin kein //
// Leerstring befindet. //
// //
//***********************************************//
procedure GetMatrix( var a: TFeld; var s: TStringGrid);
//Variablendeklaration
var
i, j: integer;
begin
//Vom 1. Zeilenelement bis zum letzten, mache
for i:= 1 to s.ColCount do
//Vom 1. Spaltenelement bis zum letzten, mache
for j:= 1 to s.RowCount do
//Überprüfe ob sich im Feld etwas befindet,
if s.Cells[i, j] <> ' ' then
//Wenn ja, speichere es ab
A[i, j]:= Chr(StrToInt(s.Cells[i, j]));
end;
//***********************************************//
// //
// UP: SubMatrix //
// Zweck: Eingegebenes Elemt im Feld suchen, //
// und speichern. //
// //
//***********************************************//
function TForm1.SubMatrix( var A: TFeld; var x, y: integer; var ges: char;
s: TStringGrid): boolean;
//Variablendeklaration
var
i, j: integer;
begin
result:= false;
//Einlesen des Gesuchten Elements
ges:= Chr(StrToInt(edGesucht.Text));
for i:= 1 to s.ColCount do
for j:= 1 to s.RowCount do
if A[i, j] = ges then
begin
x:= i;
y:= j;
result:= true;
end
else
result:= false;
end;
procedure GetLeer( var A: TFeld; s: TStringGrid; var x, y: integer);
//Variablendeklaration
var
i, j: integer;
begin
for i:= (x+1) to s.ColCount do
for j:= (y+1) to s.RowCount do
A[i, j]:= #240;
end;
procedure TForm1.btStartClick(Sender: TObject);
//Variablendeklaration
var
A: TFeld;
x, y: integer;
ges: char;
s: TStringGrid;
isGefunden: boolean;
begin
GetMatrix(A, s);
SubMatrix(A, x, y, ges, s);
if isGefunden = True then
ShowMessage(' Der gesuchte Text befindet sich in der ' + IntToStr(x) +
' . Reihe und ' + IntToStr(y) + ' . Spalte.')
else
ShowMessage(' Der gesuchte Text konnte nirgends gefunden werden!');
end;
end.
Ich hoffe ihr könnt mir sagen was diesen groben Fehler heraufbeschwört, und falls es sonst noch etwas gibt was nicht funktionieren könnte, bitte ich mir das mitzuteilen!
Danke im Vorraus,
mfg noob_on_knees
Against TCPA & And I think we should live our dreams
|