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 StringGrid und Spalte ausblenden (https://www.delphipraxis.net/141297-stringgrid-und-spalte-ausblenden.html)

Kunoishi 6. Okt 2009 19:39


StringGrid und Spalte ausblenden
 
ein Hallo an die Runde,
Ihr habt mir bei fast allen Problemen gut Helfen können darum wage ich mal wieder eine neue Frage :zwinker:

Ich habe ein StringGrid und möchte eine Spalte aus diesem Ausblenden.
Stellt sich nur die Frage wie. :drunken:
Mein derzeitiger Aufbau sieht so aus.
Delphi-Quellcode:
procedure TMDIChild.SetzeGrid;
begin
  Sachverhaltsuebersicht.rowCount:=2;
  Sachverhaltsuebersicht.colCount := 10;
  Sachverhaltsuebersicht.cells[0,0] := 'Nr.';
  Sachverhaltsuebersicht.cells[1,0] := 'Datum';
  Sachverhaltsuebersicht.cells[2,0] := 'Zeit';
  Sachverhaltsuebersicht.cells[3,0] := 'Objekt';
  Sachverhaltsuebersicht.cells[4,0] := 'Name';
  Sachverhaltsuebersicht.cells[5,0] := 'Vorname';
  Sachverhaltsuebersicht.cells[6,0] := 'nummer';
  Sachverhaltsuebersicht.cells[7,0] := 'zeichen';
  Sachverhaltsuebersicht.cells[8,0] := 'Ausgang';
  Sachverhaltsuebersicht.cells[9,0] := 'Begründung';
end;
.
.
.

procedure TMDIChild.grdArtikelDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
var InhaltZelle: string;
begin
  with (Sender as TStringgrid) do
    begin
      InhaltZelle := cells[acol, arow];// Zellinhalt in Variable auslesen
      canvas.fillrect(rect);// Zelle mit aktueller Hintergrundfarbe "übermalen"

      // 1. Spalte zentriert und mit Abstand nach oben
      if (acol = 0) then
         canvas.textrect(rect, (rect.Left + rect.Right -
         canvas.textwidth(InhaltZelle)) div 2, rect.top + 3, InhaltZelle);

      // 2. Spalte zentriert und mit Abstand nach oben
      if (acol = 1) then
         canvas.textrect(rect, (rect.Left + rect.Right -
         canvas.textwidth(InhaltZelle)) div 2, rect.top + 3, InhaltZelle);

      // 3. Spalte zentriert und mit Abstand nach oben
      if (acol = 2) then
         canvas.textrect(rect, (rect.Left + rect.Right -
         canvas.textwidth(InhaltZelle)) div 2, rect.top + 3, InhaltZelle);

      // 4. Spalte zentriert und mit Abstand nach oben
      if (acol = 3) then
         canvas.textrect(rect, (rect.Left + rect.Right -
         canvas.textwidth(InhaltZelle)) div 2, rect.top + 3, InhaltZelle);

      // 5. Spalte zentriert und mit Abstand nach oben
      if (acol = 4) then
         canvas.textrect(rect, (rect.Left + rect.Right -
         canvas.textwidth(InhaltZelle)) div 2, rect.top + 3, InhaltZelle);
      // 6. Spalte zentriert und mit Abstand nach oben
      if (acol = 5) then
         canvas.textrect(rect, (rect.Left + rect.Right -
         canvas.textwidth(InhaltZelle)) div 2, rect.top + 3, InhaltZelle);
      // 7. Spalte linksbündig mit Abstand nach links und oben
      if (acol = 6) then
         canvas.textout(rect.left + 3, rect.top + 2, InhaltZelle);

      // 8. Spalte linksbündig mit Abstand nach links und oben
      if (acol = 7) then
         canvas.textout(rect.left + 3, rect.top + 2, InhaltZelle);

      // Alle anderen Spalten rechtsbündig mit Abstand nach rechts und oben
      if (acol > 7) then
         canvas.textrect(rect, rect.Right - canvas.textwidth(InhaltZelle) - 4,
         rect.top + 2, InhaltZelle);
    end; // von with
end; // der Prozedur
nun soll Spalte 5 und 7 ausgeblendet werden

mkinzler 6. Okt 2009 19:40

Re: StringGrid und Spalte ausblenden
 
Stelle die Breite der Spalten auf 0

taaktaak 6. Okt 2009 19:45

Re: StringGrid und Spalte ausblenden
 
... Null?
... bei mir muss die Spaltenbreite auf -GridLineWidth eingestellt werden
:wink:

Kunoishi 6. Okt 2009 19:45

Re: StringGrid und Spalte ausblenden
 
:idea: warum bin ich denn nicht auf die Lösung gekommen? na klar
ick stand bestimmt auf der Leitung.
DANKE :shock:

hoika 6. Okt 2009 19:49

Re: StringGrid und Spalte ausblenden
 
Hallo,

dann kann die Spalte aber trotzdem ausgewählt werden.

Delphi-Quellcode:
if (acol = 0) then
Schlecht ...

Benutze Variable für jede Spalte

Delphi-Quellcode:
if (acol = iNameCol) then
Die ist entweder -1 (nicht anzeigen) oder hat einen Wert

Jede Konstante bekommt noch eine Boolean-Var dazu
Delphi-Quellcode:
var
  bNameCol: Boolean;
Die ColCount ergibt sich durch Prüfen der bXCol's

Der Wert von iXCol's wird beim Start berechnet.


Heiko

taaktaak 6. Okt 2009 19:51

Re: StringGrid und Spalte ausblenden
 
Zitat:

kann die Spalte aber trotzdem ausgewählt werden
.. sorry, verstehe ich nicht!
Von wem ausgewählt?
Vom Anwender?

Kunoishi 6. Okt 2009 19:56

Re: StringGrid und Spalte ausblenden
 
Heiko da hast du recht

mit der 0, habe ich gerade festgestellt. Aber war ein Ansatz auf den ich noch nicht mal gekommen bin.
Dein Ansatz ist noch genauer und ich werde mal schauen wie ich ihn umsetzen kann.
Muß mich da mal reindenken. Wenn ich nicht klar komme pin ich dich direkt an wenn ich darf.
Danke schon mal im vorraus.

Mit freundlichen Grüßen.

hoika 6. Okt 2009 20:33

Re: StringGrid und Spalte ausblenden
 
Hallo,

you are welcome ;)


Heiko


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