Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Suche erweitern - bitte um Ergänzung. (https://www.delphipraxis.net/113932-suche-erweitern-bitte-um-ergaenzung.html)

AlexII 16. Mai 2008 23:02


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:
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;
[edit=SirThornberry]Rechtschreibfehler im Titel beseitigt - Mfg, SirThornberry[/edit]

sx2008 16. Mai 2008 23:13

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, ..)

s-off 16. Mai 2008 23:14

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.

AlexII 16. Mai 2008 23:25

Re: Suche erweitern - bitte um ergenzung.
 
Zitat:

Zitat von s-off

'ne lustige Code-Formatierung hast Du :lol:

Ja man darf nicht vergessen, hatte nur ca. 30 Stunden Delphi in meinem Leben. :lol:

Zitat:

Zitat von s-off
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.

Ich hatte erst mal Break gehabt, musste aber durch Exit ersetzen, da bei keinem Treffer Edit4.Text gelb bleibt.

Zitat:

Zitat von s-off
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.

Booooohhhh..... ist noch Fachchinesisch für mich. :cry:

AlexII 16. Mai 2008 23:27

Re: Suche erweitern - bitte um ergenzung.
 
Zitat:

Zitat von sx2008
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, ..)

Hab leider von Klassen noch keine Ahnung. :?

mkinzler 17. Mai 2008 08:53

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

s-off 17. Mai 2008 09:48

Re: Suche erweitern - bitte um ergenzung.
 
Zitat:

Zitat von AlexII
Zitat:

Zitat von s-off

'ne lustige Code-Formatierung hast Du :lol:

Ja man darf nicht vergessen, hatte nur ca. 30 Stunden Delphi in meinem Leben. :lol:

Das sollte keine Kritik sein. Es ist, gerade am Anfang, wichtig, dass Du Deinen Code lesen kannst.
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:

Zitat von AlexII
Zitat:

Zitat von s-off
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.

Ich hatte erst mal Break gehabt, musste aber durch Exit ersetzen, da bei keinem Treffer Edit4.Text gelb bleibt.

Dann solltest Du Deinen Code diesbezüglich nochmal überarbeiten!
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:

Zitat von AlexII
Zitat:

Zitat von s-off
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.

Booooohhhh..... ist noch Fachchinesisch für mich. :cry:

Hört sich schlimmer an, als es ist. Schau Dir den Unterschied von procedure und function an.

AlexII 17. Mai 2008 10:43

Re: Suche erweitern - bitte um ergenzung.
 
Zitat:

Zitat von s-off
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' ;)

Zufrieden bin ich nocht nicht, es fehlt ja noch die Weitersuche. Der Code wird ja noch verändert und danach werde ich versuchen das Ganze zu optimieren. :thumb:

marabu 17. Mai 2008 10:52

Re: Suche erweitern - bitte um Ergänzung.
 
Hallo Alex,

dein Problem wird auch in diesem Thread behandelt: String-Suche in einem TStringGrid

Grüße vom marabu

AlexII 17. Mai 2008 11:47

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.
Seite 1 von 2  1 2      

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