[DELPHI] zoeken in een StringGrid

Pagina: 1
Acties:
  • 69 views sinds 30-01-2008

  • HammerT
  • Registratie: April 2004
  • Laatst online: 12-04 12:36
ik kom er niet meer uit hoor :(
8)7

Wat ik dus probeer is om een stringgrid af te zoeken naar een bepaalde waarde (Find).

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 function TForm1.Find(Find: string): Boolean;
var
  x, y: Integer;
begin
  y := 0;
  Result := False;
  repeat
    for x := 0 to RowCount do
      begin
        repeat
          if StringGrid1.Cells [x, y] = Find then begin
            Result := True;
            ShowMessage(Find + ' found!');
            Break;
            end
          else begin
            y := y + 1;
            Break;
            end;
        until Result = True;
      end;
  until Result = True;
x := Row;
y := Col;
end; 
Ik denk dat hij die 2e repeat loop moet breaken bij het else statement, maar ik weet niet hoe dat moet...

  • whoami
  • Registratie: December 2000
  • Laatst online: 22-04 14:33
Heb je zelf je code al eens gedebugged ?
waarom heb je 3 lussen ?

wat gebeurt er als hetgeen je wil zoeken niet gevonden wordt ? Dan zit je in een oneindige lus.

https://fgheysels.github.io/


Verwijderd

Waar je y met 1 verhoogt, hoort er geen break volgens mij... En idd, als je niets vindt, zul je een oneindige loop krijgen.

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Vreemd met al die lussen.
Misschien iets als dit (niet getest):
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var
  x, y: Integer;
  Found: Boolean;
  AtPoint: TPoint;
begin
  Found := False;
  for x := 1 to StringGrid1.ColCount - 1 do
  begin
    for y := 1 to StringGrid1.RowCount - 1 do
    begin
      Found := SameText(StringGrid1.Cells[x, y], 'Text');
      if Found then
      begin
        AtPoint.X := x;
        AtPoint.Y := y;
        Break;
      end;
    end;
    if Found then Break;
  end;
  if Found then
    //Text gevonden op punt AtPoint;

[ Voor 4% gewijzigd door jelmervos op 29-11-2005 16:16 ]

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • HammerT
  • Registratie: April 2004
  • Laatst online: 12-04 12:36
hij loopt ook vast als hij in de eerste rij niets vind

mja, ben er al te lang mee bezig denk ik :P het word een beetje een zootje ;)

even dat van Kaassoevlee proberen :)

Verwijderd

Ik vind zoiets ook wel mooi staan:

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function TForm1.Find(Find: string): Boolean;
var
  x, y: Integer;
begin
  y := 0;
  x := 0;
  result := not Jottem;
  while ((x <= RowCount) and (y <= ColCount)) do begin
    if (x > RowCount) then begin
      x := 0;
      y := y + 1;
    end;
    if StringGrid1.Cells [x, y] = Find then begin
      Result := Jottem;
      exit;
    end;
    x := x + 1; 
  end;
end;

[ Voor 7% gewijzigd door Verwijderd op 29-11-2005 16:28 ]


  • HammerT
  • Registratie: April 2004
  • Laatst online: 12-04 12:36
_/-\o_

erg netjes hoor, bedankt! :*)

  • HammerT
  • Registratie: April 2004
  • Laatst online: 12-04 12:36
nog 1 vraagje dan O-)

Hoe kan ik een functie meerdere waarden terug laten geven? Ik had het wel opgelost door een variabele over het hele programme te declareren, maar das toch niet zo netjes.

Dat die x en y waarde dus als 2 aparte integers (of als 1 string?) terug worden gegeven.

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Gebruik een TPoint of zet var voor de variabelen:
Delphi:
1
2
3
4
5
function GetPoint(var x: Integer; var y: Integer);
begin
  x := 1;
  y := 2;
end;

en dan:
Delphi:
1
2
3
4
5
6
var
  x, y: Integer
begin
  GetPoint(x, y);
  //x is hier 1 en y is hier 2
end;

[ Voor 77% gewijzigd door jelmervos op 29-11-2005 16:42 ]

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • whoami
  • Registratie: December 2000
  • Laatst online: 22-04 14:33
Of maak een struct / class die je returned.

Dit is wel allemaal heel basic. Met wat zoeken in de documentatie kom je er wel, en, mocht je eens gedebugged hebben ivm je initiele probleem, dan had je ook al een en ander zelf kunnen vinden.

https://fgheysels.github.io/

Pagina: 1

Dit topic is gesloten.