Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Klick auf Kopfzeile von StringGrid -> sortieren lassen (https://www.delphipraxis.net/48625-klick-auf-kopfzeile-von-stringgrid-sortieren-lassen.html)

Klaus01 8. Jan 2010 20:19

Re: Klick auf Kopfzeile von StringGrid -> sortieren lasse
 
Der aufruf der Sortiermethode durch diesen Code funktioniert auch
wenn die Spalten gescrollt wurden.

Delphi-Quellcode:
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;
Grüße
Klaus

PPaB 8. Jan 2010 20:41

Re: Klick auf Kopfzeile von StringGrid -> sortieren lasse
 
Perfekt und wieder was dazu gelernt. Mit MouseToCell ist das ja ganz einfach.

Danke

Kanne 3. Feb 2010 08:01

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.
Seite 2 von 2     12   

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