Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Stringgrid zu dem entsprechenen Anfangsbuchstaben springen (https://www.delphipraxis.net/80851-stringgrid-zu-dem-entsprechenen-anfangsbuchstaben-springen.html)

capo 16. Nov 2006 12:10


Stringgrid zu dem entsprechenen Anfangsbuchstaben springen
 
Hallo

habe in einem Stringgrid viele Namen diese sind auch sortiert.
Nun möchte ich im Stringgrid zu dem entsprechenen Anfangsbuchstaben springen wenn ich einen Buchstaben in ein Edit einfüge.

Wer mag mir zeigen wie das geht?

Gruss capo

Panthrax 16. Nov 2006 12:44

Re: Stringgrid zu dem entsprechenen Anfangsbuchstaben spring
 
Hallo.

Vielleicht habe ich ja etwas falsch verstanden, aber ich weiß so richtig nicht wo dein Problem liegt? Hier gibt's ein bisschen Quelltext, ich hoffe es ist, was du erfragt hast:
Delphi-Quellcode:
function IndexOfName(const Name: String; const Strings: TStrings; Lo: Integer = 0; Hi: Integer = -1): Integer;
var
  Middle: Integer;
begin
  if Hi = -1 then Hi:=Strings.Count-1;
  while (Lo < Hi) do
  begin
    Middle:=(Lo+Hi) div 2;
    if StrIComp(PChar(Strings[Middle]),PChar(Name)) > 0
      then Hi:=Middle
      else Lo:=Middle+1;
  end;
  Result:=Lo;
end;
Beispielaufrufe;
Delphi-Quellcode:
StringGrid1.Col:=1;
StringGrid1.Row:=IndexOfName(Edit1.Text,StringGrid1.Cols[1]);
// alternativ: StringGrid1.Row:=IndexOfName(Edit1.Text,StringGrid1.Cols[1],StringGrid1.FixedRows);
Soetwas schaffst du aber auch allein.
Zitat:

Zitat von capo
Wer mag mir zeigen wie das geht?

Irgendwie mag ich diesen Satz nicht. Ich neheme es so, als sei er nur falsch rübergekommen.

Gruß,
Panthrax.

capo 16. Nov 2006 12:51

Re: Stringgrid zu dem entsprechenen Anfangsbuchstaben spring
 
Hallo
Zitat:

Irgendwie mag ich diesen Satz nicht. Ich nehme es so, als sei er nur falsch rübergekommen.
das ist gut so, danke.
ganz so hilflos bin ich nun auch nicht :).
Dein Beispiel funktioniert supergut, danke !
gruss vom capo

capo 16. Nov 2006 13:14

Re: Stringgrid zu dem entsprechenen Anfangsbuchstaben spring
 
Hallo
ich hatte versucht die Zeile in der dieser Buchstabe zuerst gefunden wird auch gleich zu markieren mit:
Delphi-Quellcode:
StringGrid1.Row:=IndexOfName(Edit1.Text,StringGrid1.Cols[1],StringGrid1.SelectedRow[1]);
oder sowas
Delphi-Quellcode:
StringGrid1.Selection := TGridRect(Rect(StringGrid1.FixedCols,
                                        1,
                                        StringGrid1.ColCount-1,
                                        1));
haut das aber nicht hin.

Das Beste wäre natürlich wenn das gesuchte (gefundene) immer ganz oben als ersten zu sehen wäre.

raiguen 16. Nov 2006 14:13

Re: Stringgrid zu dem entsprechenen Anfangsbuchstaben spring
 
Zitat:

Zitat von capo
Delphi-Quellcode:
StringGrid1.Selection := TGridRect(Rect(StringGrid1.FixedCols,
                                        1,
                                        StringGrid1.ColCount-1,
                                        1));
haut das aber nicht hin.

Doch :wink: vom Prinzip her schon. Laut OH sollte dazu natürlich in den StringGrid-Options goRangeSelect auf true stehen...
Wenn du das nun so machst
Delphi-Quellcode:
....
gefundeneZeile :=IndexOfName(Edit1.Text,StringGrid1.Cols[1]);
...
StringGrid1.Selection := TGridRect(Rect(StringGrid1.FixedCols,
                                        gefundeneZeile,
                                        StringGrid1.ColCount-1,
                                        gefundeneZeile));
StringGrid1.TopRow := gefundeneZeile;
wird die gefundeneZeile komplett markiert und gleichzeitig deinem Wunsche entsprechend als erste Zeile (nach der evtl. vorhandenen festen Zeile) 'verschoben' ;)

capo 16. Nov 2006 16:27

Re: Stringgrid zu dem entsprechenen Anfangsbuchstaben spring
 
Hallo und ;)

das funktioniert soweit fast 100%
merkwürdig ist nur das wenn ich nach S suche sofort nach W gesprungen wird und W
in der ersten reihe ganz oben steht.
[EDIT]
macht er ab dem buchstaben Q
so mach ich das nun.
Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
begin
  StringGrid1.Col := 1;
  StringGrid1.Row := IndexOfName(Edit1.Text, StringGrid1.Cols[1]);
  StringGrid1.Selection := TGridRect(Rect(StringGrid1.FixedCols,
    StringGrid1.Row,
    StringGrid1.ColCount - 1,
    StringGrid1.Row));
  StringGrid1.TopRow := StringGrid1.Row;
end;

marabu 16. Nov 2006 17:28

Re: Stringgrid zu dem entsprechenen Anfangsbuchstaben spring
 
Hallo,

hier noch ein anderer Ansatz: Wenn die Namen in ihrer Grid-Spalte bereits sortiert sind, dann kann man auf die Methode TStrings.Find zurückgreifen:

Delphi-Quellcode:
procedure LocateRow(sg: TStringGrid; iCol: Integer; const sText: String);
var
  iRow: Integer;
begin
  with TStringList.Create do
  try
    Assign(sg.Cols[iCol]);
    Sorted := True;
    for iRow := 1 to sg.FixedRows do
      Delete(0);
    Find(sText, iRow);
    iRow := iRow + sg.FixedRows;
    sg.Row := iRow - iRow div sg.RowCount; // restrict row index
    sg.Col := iCol;
  finally
    Free;
  end;
end;

const
  NAME_COL = 0;

procedure TDemoForm.EditChange(Sender: TObject);
begin
  with Sender as TEdit do
    LocateRow(StringGrid, NAME_COL, Text);
end;
Freundliche Grüße

capo 16. Nov 2006 18:25

Re: Stringgrid zu dem entsprechenen Anfangsbuchstaben spring
 
Hallo marabu
das funktioniert nun supergut.
muss mir das aber alees genau ansehen, noch versteh ich nicht ganz was da geschieht.
ich danke....!
gruss vom capo

capo 16. Nov 2006 18:54

Re: Stringgrid zu dem entsprechenen Anfangsbuchstaben spring
 
z.b. möchte ich auch in einer anderen reihe suche
da muss ich doch hier
Delphi-Quellcode:
NAME_COL = 2;
angeben, merkwürdigerweise funktioniert das nicht.

marabu 16. Nov 2006 19:05

Re: Stringgrid zu dem entsprechenen Anfangsbuchstaben spring
 
Hi,

Zitat:

Zitat von marabu
Wenn die Namen in ihrer Grid-Spalte bereits sortiert sind, dann

wenn in der Spalte mit dem Index 2 die Vorbedingung erfüllt ist, dann sollte das auch dort funktionieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 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