![]() |
StringGrid bei klick auf eine bestimme zelle sortieren
hi!
wenn ich auf den spaltenkopf des stringgrids klicke soll diese spalte ähnlich einer listbox sortiert werden. den algorithmus zum sortieren habe ich schon:
Delphi-Quellcode:
und hier der aufruf. (befehl zum sortieren):
procedure SortStringGrid(var GenStrGrid: TStringGrid; ThatCol: Integer);
const TheSeparator = '@'; var CountItem, I, J, K, ThePosition: integer; MyList: TStringList; MyString, TempString: string; begin CountItem := GenStrGrid.RowCount; MyList := TStringList.Create; MyList.Sorted := False; try begin for I := 1 to (CountItem - 1) do MyList.Add(GenStrGrid.Rows[I].Strings[ThatCol] + TheSeparator + GenStrGrid.Rows[I].Text); Mylist.Sort; for K := 1 to Mylist.Count do begin MyString := MyList.Strings[(K - 1)]; ThePosition := Pos(TheSeparator, MyString); TempString := ''; TempString := Copy(MyString, (ThePosition + 1), Length(MyString)); MyList.Strings[(K - 1)] := ''; MyList.Strings[(K - 1)] := TempString; end; for J := 1 to (CountItem - 1) do GenStrGrid.Rows[J].Text := MyList.Strings[(J - 1)]; end; finally MyList.Free; end; end;
Delphi-Quellcode:
hier wird jetzt spalte 0 sortiert. das klappt auch wunderbar. ich weiß nur nicht, wohin ich den befehl schreiben muss, damit bei nem klick auf den spaltenkopf diese spalte sortiert wird....
SortStringGrid(StringGrid1, 0);
Gruß, dopeline |
Re: StringGrid bei klick auf eine bestimme zelle sortieren
Hallo
Klicks (onclick) auf die fixierten Zellen bekommst du nicht mit, kannst aber bei onmousedown/up mit Stringgrid mousetocell ermitteln, in welcher Zelle die mausgedrückt wurde. Dann kannst du bei einem Klick in die 0.Reihe die ermittelte Spalte deiner proc übergeben. Mfg Frank |
Re: StringGrid bei klick auf eine bestimme zelle sortieren
Danke! Das funktioniert:
Delphi-Quellcode:
(SGP ist der Name des StringGrids.)
procedure TFormHaupt.SGPMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); var Column, Row: Longint; begin SGP.MouseToCell(x,y,Column,Row); SortStringGrid(SGP, Column); end; Gruß, dopeline |
Re: StringGrid bei klick auf eine bestimme zelle sortieren
würd ich nicht so machen
Delphi-Quellcode:
damit du nur klicks auf 1. Reihe=Spaltenüberschrift auswertest und Colums auf <>-1 testen. Sonst landest du in einer schönen AV, wenn der User in einen Bereich klickt, wo keine Zelle ist. thatcol wird in der Sortierproc nicht überprüft, ob es in einem gültigen Bereich liegt.
procedure TFormHaupt.SGPMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); var Column, Row: integer; begin SGP.MouseToCell(x,y,Column,Row); if (row=0) and (column<>-1) then SortStringGrid(SGP, Column); end; Mfg Frank |
Re: StringGrid bei klick auf eine bestimme zelle sortieren
hey vielen dank!
das erspart später viel zeit bei der möglichen fehlersuche... ich habe noch eine klitzekleine frage: meine hints von buttons usw. werden in einer statusbar des hauptformulars im panel 0 angezeigt: (deklariert unter public)
Delphi-Quellcode:
ich habe auf einem modalen formular auch eine statusbar. wie kann ich ihm sagen, dass er alle hints auf diesem formular nicht in der statusleiste des hauptformulars anzeigt, sondern in dem forumlar, wo auch die buttons mit den hints sind?
procedure TFormHaupt.DisplayHint(Sender: TObject);
begin StatusBar1.Panels[0].Text := GetLongHint(Application.Hint); end; Gruß, dopeline |
Re: StringGrid bei klick auf eine bestimme zelle sortieren
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 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