![]() |
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 |
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:
Beispielaufrufe;
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;
Delphi-Quellcode:
Soetwas schaffst du aber auch allein.
StringGrid1.Col:=1;
StringGrid1.Row:=IndexOfName(Edit1.Text,StringGrid1.Cols[1]); // alternativ: StringGrid1.Row:=IndexOfName(Edit1.Text,StringGrid1.Cols[1],StringGrid1.FixedRows); Zitat:
Gruß, Panthrax. |
Re: Stringgrid zu dem entsprechenen Anfangsbuchstaben spring
Hallo
Zitat:
ganz so hilflos bin ich nun auch nicht :). Dein Beispiel funktioniert supergut, danke ! gruss vom capo |
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:
oder sowas
StringGrid1.Row:=IndexOfName(Edit1.Text,StringGrid1.Cols[1],StringGrid1.SelectedRow[1]);
Delphi-Quellcode:
haut das aber nicht hin.
StringGrid1.Selection := TGridRect(Rect(StringGrid1.FixedCols,
1, StringGrid1.ColCount-1, 1)); Das Beste wäre natürlich wenn das gesuchte (gefundene) immer ganz oben als ersten zu sehen wäre. |
Re: Stringgrid zu dem entsprechenen Anfangsbuchstaben spring
Zitat:
Wenn du das nun so machst
Delphi-Quellcode:
wird die gefundeneZeile komplett markiert und gleichzeitig deinem Wunsche entsprechend als erste Zeile (nach der evtl. vorhandenen festen Zeile) 'verschoben' ;)
....
gefundeneZeile :=IndexOfName(Edit1.Text,StringGrid1.Cols[1]); ... StringGrid1.Selection := TGridRect(Rect(StringGrid1.FixedCols, gefundeneZeile, StringGrid1.ColCount-1, gefundeneZeile)); StringGrid1.TopRow := gefundeneZeile; |
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; |
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:
Freundliche Grüße
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; |
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 |
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:
angeben, merkwürdigerweise funktioniert das nicht.
NAME_COL = 2;
|
Re: Stringgrid zu dem entsprechenen Anfangsbuchstaben spring
Hi,
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 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