Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Zwei StringGrid Probleme
Terra23 - Sa 09.06.07 22:04
Titel: Zwei StringGrid Probleme
Hallo!
Ich habe zwei kleine Probleme mit dem StringGrid:
1)
Ich nutze
diesen Code [
http://www.swissdelphicenter.ch/de/showcode.php?id=423] um im StringGrid zu sortieren. Das klappt auch schon ganz gut.
Ich rufe den Code im OnClick-Ereignis der StringGrid auf und zwar wie folgt:
Delphi-Quelltext
1: 2: 3: 4:
| If (StringGrid1.Col=1) And (StringGrid1.Row=0) Then SortStringGrid(StringGrid1, 1) Else If (StringGrid1.Col=2) And (StringGrid1.Row=0) Then SortStringGrid(StringGrid1, 2) |
Das funktioniert auch ganz gut, solange die erste Zeile der StringGrid nicht fixiert ist. Wie kann ich es einstellen, dass dies auch bei fixierten Zellen funktioniert?
2)
Wie muss ich den Code aus dem oben genannten Link verändern, damit die Zahlen nicht aufsteigend sondern absteigend sortiert werden?
MfG
Terra23
PS: Weiß jemand auch noch, wie ich eine Zelle im StringGrid mit dem Summenzeichen füllen kann?
hansa - Sa 09.06.07 22:41
ersetzen durch :
Delphi-Quelltext
1:
| for i := max downto 1 do |
Terra23 - Sa 09.06.07 23:24
Hi!
Danke für die Antwort aber leider funktioniert das nicht. Egal wo ich den Code in
ändere, wird das StringGrid immer aufsteigend sortiert.
Das ist eigentlich auch verständlich, denn die Liste wird ja meiner bescheidenen Meinung nach mit dem Code
sortiert, oder? Also war der Tipp nicht so sehr hilfreich...
hansa - So 10.06.07 01:35
Terra23 hat folgendes geschrieben: |
sortiert. Also war der Tipp nicht so sehr hilfreich... |
Du willst eine Komplettlösung ? Von mir wird die nicht kommen. Die Schweizer haben drei for-schleifen. Die Delphi-Hilfe sagt noch einiges und das müsste reichen. 8)
zongo-joe - So 10.06.07 11:55
Falls Du absteigend sortieren willst, sollte eigentlich reichen, wenn Du in der
Procedure SortStringGrid folgende Zeilen änderst:
Delphi-Quelltext
1: 2: 3:
| for J := 1 to (CountItem - 1) do GenStrGrid.Rows[[b]GenStrGrid.rowcount-J+1[/b]].Text := MyList.Strings[(J - 1)]; |
dann wird die sortierte Stringlist halt nur andersrum in das Grid eingetragen.
Zongo-Joe
P.S: die Bemerkung
| Zitat: |
| Also war der Tipp nicht so sehr hilfreich... |
war wirklich nicht sehr charmant ! Kein Wunder wenn Hansa etwas frostig reagiert.
Terra23 - So 10.06.07 13:27
@Hansa: Nein, eine Komplettlösung wollte ich von dir nicht. Allerdings habe ich es probiert, alle drei Schleifen zu verändern und es funktionierte nicht.
Der Satz, dass der Tipp nicht so ganz hilfreich war, war aber auch nicht so böse gemeint, wie er hier aufgefasst wurde. Das sollte lediglich bedeuten, dass ich dankbar für deinen Tipp war / bin, er mir jetzt aber nicht geholfen hat, da ich nicht so recht weiß, wie ich ihn umsetzen soll.
@Zongo: Das die Veränderung beim erneuten Füllen des StringGrids vorgenommen werden muss, war mir schlussendlich nach einigem Probieren auch klar. Allerdings wusste ich nicht, wie ich diese Veränderung mit dem Tipp von Hansa realisieren soll. Aber auch für dich gilt: Das war Hansa gegenüber nicht böse gemeint (s. oben).
@Beide: Danke für eure Hilfe. Wenn ich Zeit habe, werde ich das mal probieren und das Ergebnis hier posten. Und seht nicht alles so schwarz. Das nächste Mal hänge ich ein ;) oder so dahinter, damit ihr alle seht, dass es nicht böse gemeint war.
MfG
Terra
Terra23 - So 10.06.07 15:29
So, ich habe nun mit eurer Hilfe das Problem lösen können:
Der Code sieht bei mir nun so aus:
Delphi-Quelltext
1: 2:
| For J := (CountItem-1) Downto 1 Do GenStrGrid.Rows[GenStrGrid.Rowcount-J].Text := MyList.Strings[(J - 1)]; |
@Hansa: Deinen Tipp habe ich nun doch realisieren können. Vielen Dank dafür.
@Zongo: Wenn ich deinen Code nutze, also:
Delphi-Quelltext
1: 2:
| For J := (CountItem-1) Downto 1 Do GenStrGrid.Rows[GenStrGrid.Rowcount-J+1].Text := MyList.Strings[(J - 1)]; |
dann funktioniert das Sortieren zwar auch, allerdings wird immer der Eintrag des StringGrids, der in der zweiten Zeile steht, kopiert und in die Liste eingefügt. Wenn ich das "+1" nun entferne, komme ich auf das richtige Ergebnis.
Vielen Dank aber auch für deine Hilfe.
Nun habe ich nur noch das Problem, dass der Klick auf die Zelle nicht realisiert werden kann, wenn die Zelle fixed ist.
Kann mir da vielleicht jemand auf die Sprünge helfen? Die Suche hat nicht wirklich befriedigende Ergebnisse geliefert, was aber auch an mir liegen kann. ;)
MfG
Terra
Terra23 - So 10.06.07 16:10
Das andere Problem (Klick registrieren auch bei fixen Zellen) habe ich nun auch gelöst.
Wen es interessiert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var pt: TPoint; acol, arow: Integer; begin pt:=StringGrid1.ScreenToClient(Mouse.CursorPos); StringGrid1.MouseToCell(pt.X,pt.Y,acol,arow); If (acol=1) And (arow=0) Then SortStringGrid(StringGrid1, 1); end; |
Damit sind meine Probleme nun gelöst.
Vielen Dank allen Leuten (Hansa und Zongo) für die Hilfe.
MfG
Terra23
MonniTucker - Do 09.02.12 11:56
Terra23 hat folgendes geschrieben : |
Das andere Problem (Klick registrieren auch bei fixen Zellen) habe ich nun auch gelöst.
Wen es interessiert:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var pt: TPoint; acol, arow: Integer; begin pt:=StringGrid1.ScreenToClient(Mouse.CursorPos); StringGrid1.MouseToCell(pt.X,pt.Y,acol,arow); If (acol=1) And (arow=0) Then SortStringGrid(StringGrid1, 1); end; |
Damit sind meine Probleme nun gelöst.
Vielen Dank allen Leuten (Hansa und Zongo) für die Hilfe.
MfG
Terra23 |
Vielen Dank für den Tip, ihr habt mir damit wieder einmal sehr geholfen!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!