![]() |
Durch Befehl eine bestimmte Zeile im StringGrid markieren
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:
nun soll die gesamte zeile markiert werden, in der er steht. (statt dem showmessage)
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; wie mache ich das? Gruß, dopeline :dancer: |
Re: Durch Befehl eine bestimmte Zeile im StringGrid markiere
Das Markieren einer Zeile geht z.B. folgendermaßen:
Delphi-Quellcode:
overmoon
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; |
Re: Durch Befehl eine bestimmte Zeile im StringGrid markiere
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:
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.
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; Viel spass noch. Gruss Killian |
Re: Durch Befehl eine bestimmte Zeile im StringGrid markiere
Bzw., wenn du über eine andere Option arbeiten möchtest:
Delphi-Quellcode:
Achja:
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; Und oben stimmt die Begrenzung der For-Schleife nicht: Anstatt:
Delphi-Quellcode:
Muss es heißen:
For r:=0 to StringGrid1.RowCount+1 do
For c:=0 to StringGrid1.ColCount+1 do
Delphi-Quellcode:
Außerdem solltest du anstatt
For r:=0 to StringGrid1.RowCount-1 do
For c:=0 to StringGrid1.ColCount-1 do
Delphi-Quellcode:
lieber
break;
Delphi-Quellcode:
schreiben, da er mit break; nur aus dem aktuellen Block heruasspringt, also aus der inneren For-Schleife. Mit Exit wird die gesamte Prozedur verlassen.
exit;
overmoon :dancer: :dancer2: :dancer: |
Re: Durch Befehl eine bestimmte Zeile im StringGrid markiere
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 |
Re: Durch Befehl eine bestimmte Zeile im StringGrid markiere
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... :oops:
Gruß, dopeline |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:55 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 by Thomas Breitkreuz