![]() |
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:53 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