![]() |
Suche erweitern - bitte um Ergänzung.
Hallo Leute!
Hab folgenden Code für ne Suche geschrieben, klappt wunderbar, kann allerdings nicht "Weitersuchen" Wer kann mir helfen, dem Code noch die Weitersuche beizubringen? Hab jetzt keine Idee wie es gehen soll. Weiß muss mir merken wo stehen geblieben bin, aber wie das zu realisieren ist, keine Ahnung.
Delphi-Quellcode:
[edit=SirThornberry]Rechtschreibfehler im Titel beseitigt - Mfg, SirThornberry[/edit]
procedure TForm1.Button1Click(Sender: TObject);
var s1: String; i,j,u: Integer; begin s1:=Edit4.Text; u:=Length(s1); if u>=2 then begin with StringGrid1 do for i:=0 to ColCount-2 do for j:=1 to RowCount-1 do if Copy((Cells[i,j]),1,u)=s1 then begin Edit4.Color:=clWindow; StringGrid1.Selection:=TGridRect(Rect(i,j,i,j)); Exit; end else begin Edit4.Color:=clYellow; Edit4.SetFocus; end; end else begin Edit4.Color:=clYellow; Edit4.SetFocus; end; end; |
Re: Suche erweitern - bitte um ergenzung.
Schreib dir doch ne eigene Klasse für deine Suche.
Überleg dir, welche Daten der Klasse bekannt sein müssen (das Stringgrid, Suchtext, letztr Spalte und Zeile, Zähler für Anzahl Treffer, ..) |
Re: Suche erweitern - bitte um ergenzung.
Hallo,
'ne lustige Code-Formatierung hast Du :lol: Als erstes solltest Du das 'Exit' in ein 'Break' ändern. Ansonten wunderst Du Dich nämlich irgendwann, wenn Du nach der Schleife noch Code angefügt hast, der dann nicht mehr ausgeführt wird. Des weiteren solltest Du den Code in eine Methode auslagern, der Du als Parameter die Startkoordinaten übergibst, und als Rückgabewert ggf. die Koordinaten der letzten gefundenen Position. Zum Suchen rufst dann die Methode mit den Anfangskoordinaten auf, und speicherst den Rückgabewert (die letzte Fundstelle) in einem Feld Deiner Klasse. Beim Weitersuchen übergibst Du dann als Anfangskoordinaten die zuvor gespeicherten; fertig. |
Re: Suche erweitern - bitte um ergenzung.
Zitat:
Zitat:
Zitat:
|
Re: Suche erweitern - bitte um ergenzung.
Zitat:
|
Re: Suche erweitern - bitte um Ergänzung.
Außerdem wäre hier besser Pos() zu verwenden, statt Teilstrings zu extrahieren und diese mit dem Suchstring zu vergleichen , dann könntest du mit PosEx() weitersuchen
|
Re: Suche erweitern - bitte um ergenzung.
Zitat:
Ich finde nur, dass die Einrücken lustig aussiehst. Wenn Du damit klarkommst, ist das vollkommen ok ;) Wenn Du dann später etwas routinierter bist, kannst Du Dir ja mal irgendwelche StyleGuides zur Hand nehmen, und schauen, ob Du damit auch klarkommst. Auf der anderen Seite wäre es vielleicht auch nicht schlecht, sich von Anfang an einen 'allgemein anerkannten' Style anzugewöhnen. Hmm, jetzt bin ich verwirrt :? Zitat:
Mit Kompromisslösungen gibt man sich nicht zufrieden, wenn es keine andere Lösung gibt. Denk nochmal darüber nach - ein Stichwort wäre bspw. 'Flag' ;) Zitat:
|
Re: Suche erweitern - bitte um ergenzung.
Zitat:
|
Re: Suche erweitern - bitte um Ergänzung.
Hallo Alex,
dein Problem wird auch in diesem Thread behandelt: ![]() Grüße vom marabu |
Re: Suche erweitern - bitte um Ergänzung.
Bei mir wird die entsprechende Zelle markiert, wie kann ich sie aber färben, denn ich bin ja nicht in dem Ereignis OnDrawCell? Wie übergebe ich die Variablen i und j nach OnDrawCell um dort, wie schon gesagt, die Zelle zu färben?
Delphi-Quellcode:
if Copy((Cells[i,j]),1,u)=s1 then
begin Edit4.Color:=clWindow; StringGrid1.Selection:=TGridRect(Rect(i,j,i,j)); Exit; end; |
Re: Suche erweitern - bitte um Ergänzung.
Hi,
nicht du rufst die Zeichenroutine einer Zelle auf - das geschieht völlig automatisch. Wie du es indirekt doch hinbekommst, das steht in diesem Thread: ![]() Noch zwei kleine Tips: Um eine bestimmte Zelle zu markieren musst du nicht mit der Eigenschaft Selection arbeiten, du kannst auch einfach die Eigenschaften Col und Row des StringGrid setzen. Und für deinen Stringvergleich kannst du auch auf die beiden Funktionen AnsiStartsStr() bzw. AnsiStartsText() aus der Unit StrUtils zurückgreifen, wenn du eine Präfixsuche benötigst. Freundliche Grüße |
Re: Suche erweitern - bitte um Ergänzung.
![]() |
Re: Suche erweitern - bitte um Ergänzung.
Zitat:
|
Re: Suche erweitern - bitte um Ergänzung.
Dann solltest du mal die Benutzungsbedingungen der Foren durchlesen. Man sollte auf die gleichzeitige Einstellung der Frage in anderen Foren hinweisen, so dass der Helfer sdehern kann, was andere darauf schon geantwortet haben.
|
Re: Suche erweitern - bitte um Ergänzung.
Zitat:
Na gut, werd es in der Zukunft meiden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:18 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