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 TStringgrid - Spalte ausblenden (https://www.delphipraxis.net/75119-tstringgrid-spalte-ausblenden.html)

smepal 14. Aug 2006 17:58


TStringgrid - Spalte ausblenden
 
Gibt es eine Möglichkeit beim TStringgrid eine Spalte zu erstellen, die nicht angezeigt wird?

_frank_ 14. Aug 2006 18:18

Re: TStringgrid - Spalte ausblenden
 
willst du diese Spalte irgendwann einblenden, oder soll diese nur "Hintergrund-Daten" enthalten.
beim 1. würde ich die breite der spalte auf 0 setzen (colwidths).
für den 2. fall ist

Delphi-Quellcode:
property Objects [ACol, ARow: Integer]: TObject;
gedacht.

HTH Frank

smepal 14. Aug 2006 18:27

Re: TStringgrid - Spalte ausblenden
 
und wie genau kann ich dann damit eine Spalte erzeugen?

Hawkeye219 14. Aug 2006 18:41

Re: TStringgrid - Spalte ausblenden
 
Hallo smepal,

Zitat:

Zitat von _frank_
beim 1. würde ich die breite der spalte auf 0 setzen (colwidths).

Nimm lieber den Wert -1, das sieht besser aus und verhindert zuverlässig ein Resize mit der Maus.

Die verborgenen Zellen sind mit der Tastatur trotzdem noch erreichbar, deshalb sollte das Ereignis "OnSelectCell" behandelt werden:

Delphi-Quellcode:
const
  HiddenColumn = 3;

procedure TForm1.FormCreate (Sender: TObject);
begin
  Grid1.ColWidths[HiddenColumn] := -1;
end;

procedure TForm1.Grid1SelectCell (Sender: TObject;
                                  ACol, ARow: Integer;
                                  var CanSelect: Boolean);
begin
  if (ACol = HiddenColumn) then
    with Grid1 do
      begin
        // verborgene Spalte überspringen, dabei Richtung beachten
        if (ACol > Col) then
          Col := Succ(ACol)
        else
          Col := Pred(ACol);
        CanSelect := False;
      end;
end;
Ganz ohne Nebenwirkungen ist das aber nicht. Mit obigem Code wird nur eine Spalte übersprungen, ein Markieren von Zellenblöcken mit der Tastatur wird unterbrochen, und der Code funktioniert nicht mehr nach dem Vertauschen von Spalten.

Gruß Hawkeye

_frank_ 14. Aug 2006 18:46

Re: TStringgrid - Spalte ausblenden
 
gut, dann ich mit den unsichtbaren Daten...(welche nicht sichtbar sein sollen)

objects erzeugt keine spalte sonder hängt ein beliebiges Objekt an eine bestehende Zelle an

mal eine einfache Klasse (ggf. noch constructor/destructor hinzufügen)+initialisierung und freigabe (ungetestet)

ich weise nur der ersten Spalte ein Object zu...kannst das aber auch ausbauen

Delphi-Quellcode:
type
  TMyObject = class
    FInt:integer;
    FStr:string;
  public
    property int:integer read FInt write FInt;
    property Str:string read FStr write FStr;
  end;


procedure TForm1.FormCreate(Sender:TObject);
var mo:TMyObject;
    i:integer;
begin
  //die größe des Grids festlegen
  Stringgrid1.ColCount:=5;
  Stringgrid1.RowCount:=5;
  for i:=0 to pred(stringgrid1.rowcount) do
  begin
    mo:=TMyObject.create;
    mo.int:=i;
    mo.Str:='evtl. Backuptext';
    Stringgrid1.Objects[0,i]:=mo
  end;
end;

procedure TForm1.FormDestroy(Sender:TObject);
var i:integer;
begin
  for i:=0 to pred(stringgrid1.rowcount) do
  begin
    //diesmal mit softcast ;)
    if assigned(Stringgrid1.Objects[i]) then
      (Stringgrid1.Objects[0,i] as TMyObject).free;
  end;
end;
HTH Frank

smepal 15. Aug 2006 17:11

Re: TStringgrid - Spalte ausblenden
 
Danke das reicht mir schon funktioniert auch sehr gut!


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