Delphi-PRAXiS

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 StrinGrid letzte Zeile sichtbar (https://www.delphipraxis.net/74949-stringrid-letzte-zeile-sichtbar.html)

Privateer3000 11. Aug 2006 15:34


StrinGrid letzte Zeile sichtbar
 
Hi leutz,

wie bringt man ein StrinGrid dazu,
wenn die Liste schon Scrollbalken anzeigt,
immer die letzte Zeile zu markieren.

Oder noch besser, wie kehrt man ein
Stringgrid um, so dass die letzte Zeile oben
und die erste unten ist?

Grüße
Privateer3000

Jürgen Thomas 11. Aug 2006 16:05

Re: StrinGrid letzte Zeile sichtbar
 
Zitat:

Zitat von Privateer3000
wie bringt man ein StrinGrid dazu, wenn die Liste schon Scrollbalken anzeigt, immer die letzte Zeile zu markieren.

So:
Delphi-Quellcode:
Grid1.Row := Grid1.RowCount - 1;
Zitat:

Zitat von Privateer3000
Oder noch besser, wie kehrt man ein Stringgrid um, so dass die letzte Zeile oben und die erste unten ist?

Meines Wissens geht das nur manuell: in zwei (verschachtelten) Schleifen alle Spalten bearbeiten und darin Zeile für Zeile austauschen... Brauchst Du dafür ein Code-Fragment?

Ansonsten viel Erfolg! Jürgen

Privateer3000 11. Aug 2006 16:44

Re: StrinGrid letzte Zeile sichtbar
 
Dankeschön

Ja schieb mal bitte so ein Teil hoch.
Kann es mir ja mal angucken.

Danke nochmal

Privateer3000 11. Aug 2006 16:50

Re: StrinGrid letzte Zeile sichtbar
 
einen kleinen schönheitsfehler gibts dabei.
die letzte Zeile wird exakt markiert
wird aber nicht ins sichtfeld geschoben.
Es muss also wieder gescrollt werden.

Jürgen Thomas 11. Aug 2006 17:05

Re: StrinGrid letzte Zeile sichtbar
 
Zitat:

Zitat von Privateer3000
einen kleinen schönheitsfehler gibts dabei.
die letzte Zeile wird exakt markiert
wird aber nicht ins sichtfeld geschoben.
Es muss also wieder gescrollt werden.

Eventuell gibt es noch eine andere (schönere) Lösung, aber so geht es auch:
Delphi-Quellcode:
Grid1.TopRow := Grid1.RowCount - Grid1.VisibleRowCount;
Bei mir klappt das so; wegen der Indizierung musst Du in manchen Situationen evtl. noch +1 oder -1 anfügen.

Zitat:

Zitat von Privateer3000
Ja schieb mal bitte so ein Teil hoch.
Kann es mir ja mal angucken.Danke nochmal

[/edit]Bitte sehr:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var x1, x2: integer;
    sListe: TStringList;     //  als Zwischenspeicher
begin
  sListe := TStringList.Create;
  try
    //  alle Spalten nacheinander bearbeiten
    for x2 := 0 to sg.ColCount-1
    do begin
      //  Zwischenspeicher leeren
      sListe.Clear;
      //  alle Zellen von unten nach oben in den Zwischenspeicher kopieren
      for x1 := sg.RowCount-1 downto 1
      do sListe.Add(sg.Cells[x2,x1]);
      //  alle Zellen von oben nach unten aus dem Zwischenspeicher kopieren
      for x1 := 1 to sg.RowCount-1
      do sg.Cells[x2,x1] := sListe[x1-1];
    end;
  finally
    sListe.Free;
  end;
end;
Wenn die erste Spalte nicht oder die erste Zeile ebenfalls sortiert werden soll, sind die Grenzen 0/1 in den Schleifen zu ändern.

Ich hoffe, es hilft. Jürgen

Nachtrag:
Zitat:

Zitat von Privateer3000
visiblerowcount kannte ich ja nun garnicht :-)

Die 'alte' Delphi-Hilfe ist sehr nützlich: Delphi-Referenz durchsuchenTStringGrid listet alle Eigenschaften auf, auch solche, die nur zur Laufzeit gültig sind und auf die man von selbst nicht unbedingt kommt.

2.Nachtrag: TStringGrid.VisibleRowCount habe ich aus Delphi 5. Ich habe jetzt mal in Delphi 2005 VCL nachgesehen - vergeblich?!

Privateer3000 11. Aug 2006 17:46

Re: StrinGrid letzte Zeile sichtbar
 
Danke funktioniert spitze.
visiblerowcount kannte ich ja nun garnicht :-)
vielen Dank
ich teste mal den code schnipsel

Hawkeye219 11. Aug 2006 18:04

Re: StrinGrid letzte Zeile sichtbar
 
Hallo,

hier ein eine weitere Version. Sie basiert auf Jürgens Idee, arbeitet aber ohne Zwischenspeicher:

Delphi-Quellcode:
procedure FlipGrid (aGrid: TStringGrid);
var
  k, iCol : Integer;
begin
  with aGrid do
    for k := 0 to Pred((RowCount - FixedRows) div 2) do
      for iCol := FixedCols to Pred(ColCount) do
        Cols[iCol].Exchange (FixedCols + k, Pred(RowCount) - k);
end;
Gruß Hawkeye

Privateer3000 11. Aug 2006 18:29

Re: StrinGrid letzte Zeile sichtbar
 
prima danke!

wie funktioniert bzw. passiert bei diesem beispiel?
Ich finde "excange" nirgends von einem grid abgeleitet.
Wechselt dies Schritt für Schritt oder alles auf einmal.

danke leutz

Hawkeye219 11. Aug 2006 18:35

Re: StrinGrid letzte Zeile sichtbar
 
Delphi-Referenz durchsuchenTStringGrid.Cols liefert eine Referenz auf ein TStrings-Objekt, dessen Methode Delphi-Referenz durchsuchenTStrings.Exchange vertauscht zwei Elemente der Liste. Der Vorteil dieser Lösung ist, daß auch eventuell mit den Zellen verknüpfte Objekte vertauscht werden.

Gruß Hawkeye


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