AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Suche erweitern - bitte um Ergänzung.

Ein Thema von AlexII · begonnen am 16. Mai 2008 · letzter Beitrag vom 17. Mai 2008
Antwort Antwort
Seite 1 von 2  1 2      
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#1

Suche erweitern - bitte um Ergänzung.

  Alt 16. Mai 2008, 23:02
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]
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Suche erweitern - bitte um ergenzung.

  Alt 16. Mai 2008, 23:13
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, ..)
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#3

Re: Suche erweitern - bitte um ergenzung.

  Alt 16. Mai 2008, 23:14
Hallo,

'ne lustige Code-Formatierung hast Du

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.
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Suche erweitern - bitte um ergenzung.

  Alt 16. Mai 2008, 23:25
Zitat von s-off:

'ne lustige Code-Formatierung hast Du
Ja man darf nicht vergessen, hatte nur ca. 30 Stunden Delphi in meinem Leben.

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 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.
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Suche erweitern - bitte um ergenzung.

  Alt 16. Mai 2008, 23:27
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Suche erweitern - bitte um Ergänzung.

  Alt 17. Mai 2008, 08:53
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
Markus Kinzler
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#7

Re: Suche erweitern - bitte um ergenzung.

  Alt 17. Mai 2008, 09:48
Zitat von AlexII:
Zitat von s-off:

'ne lustige Code-Formatierung hast Du
Ja man darf nicht vergessen, hatte nur ca. 30 Stunden Delphi in meinem Leben.
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 von AlexII:
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 von AlexII:
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.
Hört sich schlimmer an, als es ist. Schau Dir den Unterschied von procedure und function an.
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Suche erweitern - bitte um ergenzung.

  Alt 17. Mai 2008, 10:43
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.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Suche erweitern - bitte um Ergänzung.

  Alt 17. Mai 2008, 10:52
Hallo Alex,

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

Grüße vom marabu
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#10

Re: Suche erweitern - bitte um Ergänzung.

  Alt 17. Mai 2008, 11:47
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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz