![]() |
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 ? |
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: |
es heißt "goEditing", gilt aber für das ganze Grid. Und wie schränke ich das auf 2 von 7 Spalten ein ?
|
Du könntest es so machen:
Delphi-Quellcode:
Dann kann der Benutzer nur die Spalten 2 und 3 auswählen!
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; MfG, Peter [edit=Daniel B]Delphi-Tags ergänzt. MfG Daniel B.[/edit] |
Thx, genau so geht es. Mal abwarten, bis das nächste Problemchen auftaucht. Kann nicht mehr lange dauern. 8)
|
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 ?
|
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 |
Hallo Hansa,
Zitat:
Delphi-Quellcode:
Gruß Jan
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; |
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. |
Zitat:
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:
Mfg Frank
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; [edit=Daniel B]Delphi-Tags ergänzt. MfG Daniel B.[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz