AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Durch Befehl eine bestimmte Zeile im StringGrid markieren
Thema durchsuchen
Ansicht
Themen-Optionen

Durch Befehl eine bestimmte Zeile im StringGrid markieren

Ein Thema von dopeline · begonnen am 3. Okt 2003 · letzter Beitrag vom 3. Okt 2003
Antwort Antwort
dopeline

Registriert seit: 7. Mär 2003
Ort: Berlin
304 Beiträge
 
Delphi 7 Enterprise
 
#1

Durch Befehl eine bestimmte Zeile im StringGrid markieren

  Alt 3. Okt 2003, 08:56
Morgen!

ich habe ein StringGrid in dem nur ganze Zeilen markiert werden können. mit hilfe eines stringvergleichs wirde das gesamte stringgrid (in einer schleife) nach einem bestimmten string durchsucht. an der steklle bleibt er dann "stehen".

Delphi-Quellcode:
procedure TFormHaupt.BitBtnSucheClick(Sender: TObject);
var suchtext:string;
    r,c:integer;
begin

 suchtext:=editsuche.Text;
 if suchtext='then else
 begin
  For r:=0 to StringGrid1.RowCount+1 do
  For c:=0 to StringGrid1.ColCount+1 do
    If (StringGrid1.Cells[c,r]=suchtext) then
      begin
          ShowMessage('Eintrag in Zeile '+InttoStr(r+1)+' gefunden!'); break;
      end; end;
end;
nun soll die gesamte zeile markiert werden, in der er steht. (statt dem showmessage)
wie mache ich das?


Gruß, dopeline
  Mit Zitat antworten Zitat
Benutzerbild von overmoon
overmoon

Registriert seit: 8. Aug 2003
Ort: Passau
51 Beiträge
 
Delphi 6 Personal
 
#2

Re: Durch Befehl eine bestimmte Zeile im StringGrid markiere

  Alt 3. Okt 2003, 09:34
Das Markieren einer Zeile geht z.B. folgendermaßen:

Delphi-Quellcode:
procedure TFormMain.WaehleZeile(Zeile: Integer);
var newSel: TGridRect;
begin
    //Einstellug, dass man mehrere Felder anwählen kann:
    StringGrid.Options := StringGrid.Options + [goRangeSelect];
    //Definition des selektierten Bereiches
    newSel.Left := StringGrid.FixedCols; // oder 0; Will man die Fixed auch auswählen ?
    newSel.Right := StringGrid.ColCount-1; // Ende der Zeile
    newSel.Top := Zeile;
    newSel.Bottom := newSel.Top;
    StringGrid.Selection := newSel;
end;

procedure TFormMain.BitBtnAuswahlClick(Sender: TObject);
begin
     WaehleZeile(2);
end;
overmoon
"Habe Mut, dich deines eigenen Verstandes zu bedienen." (Immanuel Kant)
  Mit Zitat antworten Zitat
Killian

Registriert seit: 2. Okt 2003
Ort: BexxTown
6 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Durch Befehl eine bestimmte Zeile im StringGrid markiere

  Alt 3. Okt 2003, 09:37
Tach!
Also ich glaube dein eines break ist falsch. das springt er nur aus einer for-Schleife. Naja, wenn er hängt, dann schreibs mal so :

Delphi-Quellcode:
procedure TFormHaupt.BitBtnSucheClick(Sender: TObject);
var
   suchtext:string;
* *r,c:integer;
begin
  { gewöhn dir eine vernünftgie formatierung und kommentierung an, sonst
    würde ich an deiner stelle es gleich lassen mit proggen }

  suchtext := editsuche.Text;

  if suchtext <> 'then
  begin
* For r := 0 to StringGrid1.RowCount - 1 do
    begin { wird eiegentlich nicht benötigt, ist für mich aber übersichtlicher } 
  * For c := 0 to StringGrid1.ColCount - 1 do
      begin
        Application.Processmessages;
* * If (StringGrid1.Cells[c, r] = suchtext) then
  * * * begin
* * * * * ShowMessage('Eintrag in Zeile '+InttoStr(r+1)+' gefunden!');* *break;
  * * * end;
      end;
    end;
  end;
end;
Da sollte er zu mindest nicht hängen bleiben. So und danns chau doch einfach mal in der Hilfe nach. Wer lesen kann, ist klar im Vorteil. Ich geb dir noch nen tip: Selection.

Viel spass noch.

Gruss Killian
Error! Reality.sys is corrupt. Smash head on keyboard to restart universe.
Schreibfehler sind gewollt und sollen zur Erheiterung beitragen.
  Mit Zitat antworten Zitat
Benutzerbild von overmoon
overmoon

Registriert seit: 8. Aug 2003
Ort: Passau
51 Beiträge
 
Delphi 6 Personal
 
#4

Re: Durch Befehl eine bestimmte Zeile im StringGrid markiere

  Alt 3. Okt 2003, 09:49
Bzw., wenn du über eine andere Option arbeiten möchtest:

Delphi-Quellcode:
procedure TFormMain.WaehleZeile(Zeile: Integer);
var newSel: TGridRect;
begin
    //Einstellung, dass man immer eine ganze Zeile auswählt:
    StringGrid.Options := StringGrid.Options + [goRowSelect];
    //Definition des selektierten Bereiches
    newSel.Left := StringGrid.FixedCols;
    newSel.Right := StringGrid.ColCount-1;
    newSel.Top := Zeile;
    newSel.Bottom := Zeile;
    StringGrid.Selection := newSel;
end;

procedure TFormMain.BitBtnAuswahlClick(Sender: TObject);
begin
     WaehleZeile(2);
end;
Achja:
Und oben stimmt die Begrenzung der For-Schleife nicht:

Anstatt:

Delphi-Quellcode:
For r:=0 to StringGrid1.RowCount+1 do
  For c:=0 to StringGrid1.ColCount+1 do
Muss es heißen:

Delphi-Quellcode:
For r:=0 to StringGrid1.RowCount-1 do
  For c:=0 to StringGrid1.ColCount-1 do
Außerdem solltest du anstatt

break; lieber
exit; schreiben, da er mit break; nur aus dem aktuellen Block heruasspringt, also aus der inneren For-Schleife. Mit Exit wird die gesamte Prozedur verlassen.

overmoon
"Habe Mut, dich deines eigenen Verstandes zu bedienen." (Immanuel Kant)
  Mit Zitat antworten Zitat
dopeline

Registriert seit: 7. Mär 2003
Ort: Berlin
304 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Durch Befehl eine bestimmte Zeile im StringGrid markiere

  Alt 3. Okt 2003, 10:45
Wow! Danke! das geht ja super! werde von nun an auf meine formatierung achten. versprochen!

wie muss ich den ablauf ändern, wenn ich "weiter" suchen will? am besten, wenn man nochmal auf suchen klickt. zur not gehts aber auch mit nem weiteren menü-eintrag.


Gruß, dopeline
  Mit Zitat antworten Zitat
dopeline

Registriert seit: 7. Mär 2003
Ort: Berlin
304 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Durch Befehl eine bestimmte Zeile im StringGrid markiere

  Alt 3. Okt 2003, 11:30
mir ist noch ein kleines problem aufgefallen: wenn sich der zu suchenden eintrag außerhalb des sichtbereiches befindet (also, wenn man erst runterscrollen muss), wird er zwar markiert, aber er springt nicht automatisch dort hin. kann man die prozedur "WaehleZeile" vielleich noch um nen befehl erweitert, der dafür sort, dass er springt? wenn ja, mit welchem? hab es mit setfocus versucht, klappt aber irgendwie nicht...


Gruß, dopeline
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:04 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