Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi StringGrid bei klick auf eine bestimme zelle sortieren (https://www.delphipraxis.net/14440-stringgrid-bei-klick-auf-eine-bestimme-zelle-sortieren.html)

dopeline 9. Jan 2004 14:17


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:
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;
und hier der aufruf. (befehl zum sortieren):
Delphi-Quellcode:
 SortStringGrid(StringGrid1, 0);
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....


Gruß, dopeline

Keldorn 10. Jan 2004 07:55

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

dopeline 10. Jan 2004 09:23

Re: StringGrid bei klick auf eine bestimme zelle sortieren
 
Danke! Das funktioniert:
Delphi-Quellcode:
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;
(SGP ist der Name des StringGrids.)

Gruß, dopeline

Keldorn 10. Jan 2004 10:24

Re: StringGrid bei klick auf eine bestimme zelle sortieren
 
würd ich nicht so machen

Delphi-Quellcode:
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;
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.

Mfg Frank

dopeline 10. Jan 2004 11:36

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:
procedure TFormHaupt.DisplayHint(Sender: TObject);
begin
 StatusBar1.Panels[0].Text := GetLongHint(Application.Hint);
end;
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?

Gruß, dopeline

Keldorn 10. Jan 2004 12:41

Re: StringGrid bei klick auf eine bestimme zelle sortieren
 
Zitat:

Zitat von dopeline
ich habe noch eine klitzekleine frage:

das hat jetzt aber überhaupt nix mehr mit deiner ursprünglichen Frage zu tun. Mach da mal lieber nen neuen Thread auf.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 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