Re: Klick auf Kopfzeile von StringGrid -> sortieren lasse
Der aufruf der Sortiermethode durch diesen Code funktioniert auch
wenn die Spalten gescrollt wurden.
Delphi-Quellcode:
Grüße
procedure TForm1.StringGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); var col, row: Integer; begin if button = mbright then begin StringGrid1.MouseToCell(X,Y,col,row); if (row = 0) then SortStringGrid(StringGrid1,[col]); if (Shift = [ssShift]) and (row > 0) then begin //############ //ShowMessage(IntToStr(row)); FormShowData.ShowModal; end; end; end; Klaus |
Re: Klick auf Kopfzeile von StringGrid -> sortieren lasse
Perfekt und wieder was dazu gelernt. Mit MouseToCell ist das ja ganz einfach.
Danke |
Re: Klick auf Kopfzeile von StringGrid -> sortieren lasse
Liste der Anhänge anzeigen (Anzahl: 1)
hatte das gleiche Problem für eine "FileMerge"-Programm, da der Open-Dialog bzw. DragNDrop die zuletzt ausgewählte Datei immer als erste übermittelt statt die Sortierung zu behalten.
Wie auch immer - ich habe - die Schleife in der Sort-Routine entfernt (da man das 1-zeilig machen kann), - die Sort-Spalte als Integer-Übergabe geändert (warum war das ein Array ?!) - den Separator auf beliebige Länge erweitert (@ könnte ja auch im Text vorkommen) - das ganze um einen Wechsel "aufsteigend" / "absteigend" erweitert
Code:
{--------------------------------------------------------------------------}
procedure SortStringGrid(GenStrGrid: TStringGrid; ThatCol: Integer); {--------------------------------------------------------------------------} const TheSeparator = '@#@#@'; var I,X: integer; MyList: TStringList; begin MyList := TStringList.Create; MyList.Sorted := false; for I := 1 to (GenStrGrid.RowCount - 1) do MyList.Add(GenStrGrid.Rows[I].Strings[ThatCol] + TheSeparator + GenStrGrid.Rows[I].Text); Mylist.Sort; X := MyList.Count; if GenStrGrid.Tag <> ThatCol then begin {ascending} for I := 1 to X do GenStrGrid.Rows[I].Text := RightStr(MyList.Strings[(I-1)], Length(MyList.Strings[(I-1)]) - Pos(TheSeparator, MyList.Strings[(I-1)]) - Length(TheSeparator) + 1); GenStrGrid.Tag := ThatCol; {COL merken} end else begin {descending} for I := 1 to X do GenStrGrid.Rows[I].Text := RightStr(MyList.Strings[(X-I)], Length(MyList.Strings[(X-I)]) - Pos(TheSeparator, MyList.Strings[(X-I)]) - Length(TheSeparator) + 1); GenStrGrid.Tag := MaxInt; {COL merken} end; MyList.Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:44 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