Auto-Filter wie in Excel?
- 
				Anfänger33
- Beiträge: 25
- Registriert: Sa 15. Feb 2025, 13:33
Auto-Filter wie in Excel?
In Excel kann man mit Auto-Filter seine Daten in den Spalten sortieren.
Gibt es ein solche Funktion auch in Lazarus?
			
			
									
									
						Gibt es ein solche Funktion auch in Lazarus?
- 
				Mathias
- Beiträge: 7073
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Auto-Filter wie in Excel?
Meinst du in der IDE oder bei einer Liste in deinem Programm ?
			
			
									
									Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
						Mit Java und C/C++ sehe ich rot
Re: Auto-Filter wie in Excel?
Da müsstest du schon sagen in welchem Zusammenhang.Anfänger33 hat geschrieben: So 20. Apr 2025, 15:05 In Excel kann man mit Auto-Filter seine Daten in den Spalten sortieren.
Gibt es ein solche Funktion auch in Lazarus?
"Einfach so" wohl eher nicht, aber mit SQL kann man alles filtern und sortieren.
- 
				Anfänger33
- Beiträge: 25
- Registriert: Sa 15. Feb 2025, 13:33
Re: Auto-Filter wie in Excel?
Naja im fertigen Programm. Der User soll selbst die Filter einstellen können.
Beispiel:
Spalten Nachname, Vorname
Der User soll filtern können nach z.B. Nachname "Müller" und Vorname "Hans". Am Ende sollen nur die Namen "Müller" und "Hans" angezeigt werden.
			
			
									
									
						Beispiel:
Spalten Nachname, Vorname
Der User soll filtern können nach z.B. Nachname "Müller" und Vorname "Hans". Am Ende sollen nur die Namen "Müller" und "Hans" angezeigt werden.
- 
				Mathias
- Beiträge: 7073
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Auto-Filter wie in Excel?
GTK4 kann dies mit ColumnView und dem GTKSorter.Beispiel:
Spalten Nachname, Vorname
Der User soll filtern können nach z.B. Nachname "Müller" und Vorname "Hans". Am Ende sollen nur die Namen "Müller" und "Hans" angezeigt werden.
Ob die LCL auch sowas bietet, kann ich nicht sagen.
Soviel mir ist, kann dies TStringGrid, der LCL.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
						Mit Java und C/C++ sehe ich rot
Re: Auto-Filter wie in Excel?
Grüße / Pozdrawiam 
paweld
						paweld
- corpsman
- Lazarusforum e. V.
- Beiträge: 1660
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Auto-Filter wie in Excel?
Also in einer TStringgrid habe ich das bisher immer über die Rowhöhe gemacht (Beispiel aus dem FPC_DOOM WAD_Viewer:
Aber wenn's da nen eleganteren Weg gibt würde der mich auch interessieren 
			
			
									
									Code: Alles auswählen
Procedure TForm1.Edit1Change(Sender: TObject);
Var
  c, i: Integer;
  s: String;
Begin
  StringGrid1.BeginUpdate;
  ClearOtherFilter(edit1);
  If Edit1.text = '' Then Begin
    For i := 1 To StringGrid1.RowCount - 1 Do Begin
      StringGrid1.RowHeights[i] := StringGrid1.RowHeights[0];
    End;
    c := StringGrid1.RowCount - 1;
  End
  Else Begin
    s := UpperCase(edit1.text);
    c := 0;
    For i := 1 To StringGrid1.RowCount - 1 Do Begin
      If pos(s, StringGrid1.Cells[IndexLumpName, i]) = 0 Then Begin
        StringGrid1.RowHeights[i] := 0;
      End
      Else Begin
        StringGrid1.RowHeights[i] := StringGrid1.RowHeights[0];
        c := c + 1;
      End;
    End;
  End;
  StringGrid1.EndUpdate();
  label2.caption := format('%d of %d lumps', [c, StringGrid1.RowCount - 1]);
End; 

--
Just try it
						Just try it
- 
				Mathias
- Beiträge: 7073
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Auto-Filter wie in Excel?
Dies ist ein Ansatz, wie man die Grid sortieren kann.
			
			
									
									Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
var
  grid: TStringGrid;
  y, x: integer;
begin
  grid := TStringGrid.Create(Self);
  grid.Parent := Self;
  grid.FixedCols := 0;
  grid.DoubleBuffered := True;
  grid.TitleFont.Style := [fsBold];
  grid.AlternateColor := clMoneyGreen;
  grid.ColumnClickSorts := True;
  grid.Align := alClient;
  grid.RowCount := 18;
  grid.ColCount := 4;
  for x := 0 to grid.ColCount - 1 do begin
    grid.Cells[x, 0] := 'Col' + IntToStr(x);
    for y := 1 to grid.RowCount - 1 do begin
      grid.Cells[x, y] := IntToStr(Random(100));
    end;
  end;
end;Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
						Mit Java und C/C++ sehe ich rot
- 
				charlytango
- Beiträge: 1198
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: Auto-Filter wie in Excel?
wenn ich davon ausgehe dass dein "Grid" ein TDBGrid ist der per SQL mot Daten gefüllt wird, empfehhle ich mal den Tip von paweld : viewtopic.php?p=149752#p149752
Das Package kann noch viel mehr und ist recht gut konfigurierbar.
			
			
									
									
						Das Package kann noch viel mehr und ist recht gut konfigurierbar.
- h-elsner
- Lazarusforum e. V.
- Beiträge: 301
- Registriert: Di 24. Jul 2012, 15:42
- OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 4.3, FPC3.2.3
- CPU-Target: X86-64; arm 32bit
- Wohnort: Illertissen
- Kontaktdaten:
Re: Auto-Filter wie in Excel?
Für ein normales TStringGrid (welches ich sehr häufig benutze) gefällt mir die Idee mit der Zeilenhöhe sehr gut. Warum bin ich nicht darauf gekommen? Es läuft auch sehr schnell ab.
Weil ich das ab jetzt viel benutzen werde, habe ich das mal allgemeiner gefasst:
			
			
									
									
						Weil ich das ab jetzt viel benutzen werde, habe ich das mal allgemeiner gefasst:
Code: Alles auswählen
function FilterColumn(var aGrid: TStringGrid;
                      const aCol: integer; aText: string): integer;
var
  i: integer;
begin
  result:=0;
  aGrid.BeginUpdate;
  try
    for i:=aGrid.FixedRows to aGrid.RowCount-1 do begin
      if aGrid.Cells[aCol, i]=aText then begin
        aGrid.RowHeights[i]:=aGrid.DefaultRowHeight;
        result:=result+1;
      end else
        aGrid.RowHeights[i]:=0;
    end;
  finally
    aGrid.EndUpdate;
  end;
end;
procedure ResetAllFilterColumn(var aGrid: TStringGrid);
var
  i: integer;
begin
  aGrid.BeginUpdate;
  try
    for i:=aGrid.FixedRows to aGrid.RowCount-1 do
      aGrid.RowHeights[i]:=aGrid.DefaultRowHeight;
  finally
    aGrid.EndUpdate;
  end;
end;
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1700
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Auto-Filter wie in Excel?
Kannst du mal ein Beispiel daraus machen und hier posten?h-elsner hat geschrieben: Mo 21. Apr 2025, 10:32 Für ein normales TStringGrid (welches ich sehr häufig benutze) gefällt mir die Idee mit der Zeilenhöhe sehr gut. Warum bin ich nicht darauf gekommen? Es läuft auch sehr schnell ab.
Weil ich das ab jetzt viel benutzen werde, habe ich das mal allgemeiner gefasst:
...
- h-elsner
- Lazarusforum e. V.
- Beiträge: 301
- Registriert: Di 24. Jul 2012, 15:42
- OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 4.3, FPC3.2.3
- CPU-Target: X86-64; arm 32bit
- Wohnort: Illertissen
- Kontaktdaten:
Re: Auto-Filter wie in Excel?
Wie meinst du das? Wie man die function anwendet?Kannst du mal ein Beispiel daraus machen und hier posten?
- h-elsner
- Lazarusforum e. V.
- Beiträge: 301
- Registriert: Di 24. Jul 2012, 15:42
- OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 4.3, FPC3.2.3
- CPU-Target: X86-64; arm 32bit
- Wohnort: Illertissen
- Kontaktdaten:
Re: Auto-Filter wie in Excel?
Ein Beispielprojekt, so etwa?
			
			
									
									
						- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1700
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Auto-Filter wie in Excel?
Danke für das Testprojekt. Irgendwie raffe ich das nicht. Oben stand beschrieben, daß da was mit der Zellenhöhe sei. Das hab ich nicht kapiert und auch aus dem Beispiel werde ich da nicht so richtig schlau draus. Möglicherweise habe ich grad einen kleinen Blackout im Kopf.
- corpsman
- Lazarusforum e. V.
- Beiträge: 1660
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Auto-Filter wie in Excel?
Die Idee ist eigentlich recht einfach
In einer Stringgrid kannst du jeder Zeile eine Eigene "Höhe" in Pixeln geben.
Die Filterfunktion setzt die Höhe einer Zeile die nicht angezeigt werden soll auf 0
\-> der Mensch sieht sie nicht mehr, für den Rechner ist sie noch da, alle sind Glücklich und das Stringgrid wurde nicht "umsortiert" oder ähnliches.
Ich hatte das vor allem gepostet, weil ich sehen wollte ob es etwas besseres gibt, weil sich das für mich a bissl nach Missuse anfühlt, auch wenn es tadellos funktioniert 
			
			
									
									In einer Stringgrid kannst du jeder Zeile eine Eigene "Höhe" in Pixeln geben.
Die Filterfunktion setzt die Höhe einer Zeile die nicht angezeigt werden soll auf 0
\-> der Mensch sieht sie nicht mehr, für den Rechner ist sie noch da, alle sind Glücklich und das Stringgrid wurde nicht "umsortiert" oder ähnliches.
Code: Alles auswählen
 aGrid.RowHeights[i]:=0;
 
--
Just try it
						Just try it




 
  Verein
Verein 
 Links
Links Suche
Suche