AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Stringgrid zu dem entsprechenen Anfangsbuchstaben springen
Thema durchsuchen
Ansicht
Themen-Optionen

Stringgrid zu dem entsprechenen Anfangsbuchstaben springen

Ein Thema von capo · begonnen am 16. Nov 2006 · letzter Beitrag vom 17. Nov 2006
Antwort Antwort
Seite 1 von 2  1 2      
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#1

Stringgrid zu dem entsprechenen Anfangsbuchstaben springen

  Alt 16. Nov 2006, 13:10
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
Hotte
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#2

Re: Stringgrid zu dem entsprechenen Anfangsbuchstaben spring

  Alt 16. Nov 2006, 13:44
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 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.
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Stringgrid zu dem entsprechenen Anfangsbuchstaben spring

  Alt 16. Nov 2006, 13:51
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
Hotte
  Mit Zitat antworten Zitat
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Stringgrid zu dem entsprechenen Anfangsbuchstaben spring

  Alt 16. Nov 2006, 14:14
Hallo
ich hatte versucht die Zeile in der dieser Buchstabe zuerst gefunden wird auch gleich zu markieren mit:
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.
Hotte
  Mit Zitat antworten Zitat
raiguen
(Gast)

n/a Beiträge
 
#5

Re: Stringgrid zu dem entsprechenen Anfangsbuchstaben spring

  Alt 16. Nov 2006, 15:13
Zitat von capo:
Delphi-Quellcode:
StringGrid1.Selection := TGridRect(Rect(StringGrid1.FixedCols,
                                        1,
                                        StringGrid1.ColCount-1,
                                        1));
haut das aber nicht hin.
Doch 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'
  Mit Zitat antworten Zitat
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Stringgrid zu dem entsprechenen Anfangsbuchstaben spring

  Alt 16. Nov 2006, 17:27
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;
Hotte
  Mit Zitat antworten Zitat
marabu

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

Re: Stringgrid zu dem entsprechenen Anfangsbuchstaben spring

  Alt 16. Nov 2006, 18:28
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
  Mit Zitat antworten Zitat
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Stringgrid zu dem entsprechenen Anfangsbuchstaben spring

  Alt 16. Nov 2006, 19:25
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
Hotte
  Mit Zitat antworten Zitat
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Stringgrid zu dem entsprechenen Anfangsbuchstaben spring

  Alt 16. Nov 2006, 19:54
z.b. möchte ich auch in einer anderen reihe suche
da muss ich doch hier
NAME_COL = 2; angeben, merkwürdigerweise funktioniert das nicht.
Hotte
  Mit Zitat antworten Zitat
marabu

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

Re: Stringgrid zu dem entsprechenen Anfangsbuchstaben spring

  Alt 16. Nov 2006, 20:05
Hi,

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.
  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 16:43 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