Hallo marabu,
richtig, dann kann ich mit Cols[z].IndexOf('') den Datenbereich überprüfen:
Delphi-Quellcode:
for z := StringGrid1.FixedCols to StringGrid1.ColCount-1 do
if StringGrid1.Cols[z].IndexOf('') >= StringGrid1.FixedRows then
showmessage('In Spalte '+IntToStr(z)+' leere Zelle gefunden');
Sollten sich auch innerhalb der FixedRow-Zeilen leere Zellen befinden,
muss/kann man deinen Ansatz verwenden,
oder die leeren Zellen innerhalb der Fixspalten und -zeilen mit einem Leerzeichen belegen.
Um die Wiederverwendbarkeit noch zu erhöhen,
z.B. wenn nur ein Teil-Bereich der eigentlichen Daten geprüft werden soll,
schlage ich folgende Funktion(in Anlehnung an Deine) vor:
Delphi-Quellcode:
function FindEmptyCell_X(sg: TStringGrid; var gr: TGridRect): boolean;
var c,r : integer;
begin
Result := False;
with sg do
for c := gr.Left to gr.Right do
for r := gr.Top to gr.Bottom do
if Cells[c,r] = '' then
begin
gr := TGridrect(Rect(c,r,c,r));
Result := True;
Exit;
end;
end;
Aufrufbeispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var gr : TGridRect;
begin
with StringGrid1 do
begin
//aufruf mit Bereichsangabe
gr := TGridRect(Rect(3,2,ColCount-2,RowCount-2));
//oder auch
//gr := Selection;
if FindEmptyCell_X(StringGrid1,gr) then
begin
Selection := gr;
showmessage('Es fehlen Daten in der markierten Zelle');
end
else
showmessage('Daten sind vollständig');
end;
end;