Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Eingabe in Stringgrid (https://www.delphipraxis.net/4508-eingabe-stringgrid.html)

Hansa 2. Mai 2003 12:05


Eingabe in Stringgrid
 
Hi,

ich habe hier ein Stringgrid mit 7 Spalten. In 2 dieser Spalten soll man etwas eingeben können, in die anderen nicht. Jetzt ist es aber so, daß von vorneherein gar nichts irgendwo eingegeben werden kann. Wer weiß mehr ?

Stanlay Hanks 2. Mai 2003 12:19

Wenn du in das Grid nix eingeben kannst, musst du im OI unter Optionen die Eigenschaft Editing auf true setzen. Dann kannst du die Zellen im StringGrid ändern.

Man liest sich, Stanlay :bounce1:

Hansa 2. Mai 2003 12:24

es heißt "goEditing", gilt aber für das ganze Grid. Und wie schränke ich das auf 2 von 7 Spalten ein ?

Christian S. 2. Mai 2003 12:26

Du könntest es so machen:
Delphi-Quellcode:
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
const erlaubt = [2,3];
begin
  if not (ACol in Erlaubt) THEN CanSelect:=False;
end;
Dann kann der Benutzer nur die Spalten 2 und 3 auswählen!

MfG,
Peter

[edit=Daniel B]Delphi-Tags ergänzt. MfG Daniel B.[/edit]

Hansa 2. Mai 2003 12:32

Thx, genau so geht es. Mal abwarten, bis das nächste Problemchen auftaucht. Kann nicht mehr lange dauern. 8)

Hansa 2. Mai 2003 12:36

Da ist schon eines: Gibt es so was wie OnExitCell? Es geht mir darum, falls das Grid gefüllt ist noch eine Zeile dran zu hängen. Durch einen Buttonclick geht das, aber es müßte gehen, sobald eine Zelle einen Wert besitzt. Und dann noch was: kann ich eine ganze Zeile löschen ?

Christian S. 2. Mai 2003 12:47

Bei der Sache mit OnExitCell muss ich passen. Du könntest im OnDrawCell-Ereignis abfragen, ob in der letzten Zeile was steht und wenn dem so ist, noch eine dran hängen.

Eine Zeile löschen kannst Du, glaube ich, nur, wenn Du alle nachfolgenden Zeilen eins nach oben verschiebst und dann den RowCount um eins erniedrigst.

MfG,
Peter

Neo2084 2. Mai 2003 14:35

Hallo Hansa,

Zitat:

Zitat von Hansa
Da ist schon eines: Gibt es so was wie OnExitCell? Es geht mir darum, falls das Grid gefüllt ist noch eine Zeile dran zu hängen. Durch einen Buttonclick geht das, aber es müßte gehen, sobald eine Zelle einen Wert besitzt.

so könnte es mit der "PfeilNachUnten-Taste" funktionieren :

Delphi-Quellcode:
procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
     if Key=40 {Down} then
     begin
       if (Stringgrid1.Row=Stringgrid1.RowCount-1) and
          (Stringgrid1.Cells[1,Stringgrid1.Row]<>'') then
       begin
          Stringgrid1.RowCount :=Stringgrid1.RowCount+1;
       end;
     end;
end;
Gruß Jan

Christian Seehase 2. Mai 2003 14:48

Moin Hansa,

Zeilen löschen wie im RichEdit oder einer StringList geht definitiv nicht. Ein StringGrid ist ein borlandspezifisches Control, bei dem der erforderliche Speicher automatisch vom Stringgrid selber verwaltet wird.
Du kannst auch problemlos in Zellen schreiben, die ausserhalb von RowCount bzw. ColCount liegen. Diese geben nur den sichtbaren Bereich an.

Keldorn 2. Mai 2003 15:38

Zitat:

Zitat von Peter Lustig
Du könntest es so machen:
Delphi-Quellcode:
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
const erlaubt = [2,3];
begin
  if not (ACol in Erlaubt) THEN CanSelect:=False;
end;
Dann kann der Benutzer nur die Spalten 2 und 3 auswählen!

MfG,
Peter

Hallo,

die Lösung find ich nicht ganz so gut. Grund: wenn man Canselect auf False stellt, kann die Zelle gar nicht ausgewählt werden. Leute, die sich gern mit den Cursortasten durch Grid hangeln werden nie von Spalte 1 zu spalte 4 kommen. Das mit Goediting mache ich so:

Delphi-Quellcode:
procedure TForm1.StringGrid1SelectCell(Sender: TObject; aCol, aRow: Integer;
  var CanSelect: Boolean);
begin
  if acol in [2,3] then stringgrid1.Options:=stringgrid1.Options-[goediting]
                   else stringgrid1.Options:=stringgrid1.Options+[goediting];
end;
Mfg Frank

[edit=Daniel B]Delphi-Tags ergänzt. MfG Daniel B.[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:40 Uhr.
Seite 1 von 2  1 2      

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