Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Suche für StringGrid


whitef - So 03.05.09 17:54
Titel: Suche für StringGrid
hallo,
ich bin grad dabei ne kleine suche für meine daten in einem stringgrid zu erstellen.
es sollte so funktionieren: Suchfeld ist hierbei eine normale TEdit.
bei eingabe "a", soll die der eintrag der mit a beginnt markiert werden.
bei eingabe "amselweg", soll die der eintrag der "amselweg" markiert werden.
ich bin zwar soweit dass ich den ersten buchstabe erfassen kann, aber weiss auch nicht weiter, wass da nicht stimmt.

Edit.OnChange:

Delphi-Quelltext
1:
2:
3:
4:
procedure TFormVSC.JvDBSearchEdit1Change(Sender: TObject);
begin
  SeekRecord(GridStrassenverzeichnis, [1], [JvDBSearchEdit1.text]);
end;


function:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
function SeekRecord(Grid: TStringGrid; ColOrder: array of Integer;
  StrList: array of string): Boolean;
var
  I, j : Integer;
begin
  Result := False;
  for I := 1 to Grid.RowCount - 1 do
  begin
    for J := Low(ColOrder) to High(ColOrder) do
    begin
      if (Grid.Cells[ColOrder[J], I] = StrList[J]) then
        Result := True
      else
        Result := False;
     // if Result = False then Break;
    end;
    if Result = True then Break;
  end;

  if Result = True then
    Grid.Row := I
end;


hansa - So 03.05.09 20:42

Zitat:
... aber weiss auch nicht weiter, wass da nicht stimmt.


Aber ich. So gut wie nichts. :mrgreen:


Delphi-Quelltext
1:
GridStrassenverzeichnis, [1], [JvDBSearchEdit1.text]);                    


[] stehen für Mengen "set of" und nicht für Arrays. [] gibts allerdings auch für Arrays. [1] schwebt frei im Raum ohne Bezug zu irgendwas. JvDBSearchEdit1.text ist kein OrdinalTyp -> F1 und kann deshalb gar nicht als Array-Index verwendet werden. Funktion wird nicht mal ausgewertet. Warum dann überhaupt ? Ähhmm, nicht gleich frustriert sein, aber die Anzahl der Fehler ist fast größer als die Zeilenanzahl. Soll das so weitergehen, oder wäre es nicht besser, mal absolute Grundlagen zu lesen. Z.B. Typen ???


dummzeuch - So 03.05.09 22:07

user profile iconhansa hat folgendes geschrieben Zum zitierten Posting springen:
Zitat:
... aber weiss auch nicht weiter, wass da nicht stimmt.


Aber ich. So gut wie nichts. :mrgreen:


Delphi-Quelltext
1:
GridStrassenverzeichnis, [1], [JvDBSearchEdit1.text]);                    


[] stehen für Mengen "set of" und nicht für Arrays.



Schonmal von Open Array Parameter gehoert? Wie sie z.B. bei der Format-Funktion verwendet werden? Das ist nicht das Problem.

twm

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

user profile iconwhitef hat folgendes geschrieben Zum zitierten Posting springen:
Suchfeld ist hierbei eine normale TEdit.
bei eingabe "a", soll die der eintrag der mit a beginnt markiert werden.
bei eingabe "amselweg", soll die der eintrag der "amselweg" markiert werden.
ich bin zwar soweit dass ich den ersten buchstabe erfassen kann, aber weiss auch nicht weiter, wass da nicht stimmt.


Delphi-Quelltext
1:
      if (Grid.Cells[ColOrder[J], I] = StrList[J]) then                    


Wenn Du den Anfang des Strings pruefen willst, solltest Du auch nur den Anfang vergleichen. Und am Besten auch noch case-insensitiv:


Delphi-Quelltext
1:
2:
  len := Length(StrList[j]);
  if SameText(grid.cells[colorder[j], i], LeftStr(StrList[J])) then


Bin mir nicht sicher, ob das das Problem loest, habe es nicht ausprobiert.

twm