![]() |
dynamisches Stringgrid
Hi,
ich brauche ein Stringgrid und weiß nicht wie groß es am Ende sein muß. Muß ich am Anfang schon eine Maximalgröße angeben, oder kann ich das dynamisch machen ? Es geht um die Rows. |
Moin Hansa,
die Angaben RowCount/ColCount beziehen sich nur auf die angezeigten Zellen. Du brauchst da keine Grösse vorzugeben. Einfach RowCount erhöhen, damit die neuen Zellen angezeigt werden und fertig. |
thx, meine Infos sind da etwas widersprüchlich. Ich kann also sagen wir 10 Zeilen vorgeben, falls diese nicht ausreichen, einfach den RowCount erhöhen und fertig? Ist dann eine neue leere Zeile da ?
|
ja, sieht so aus, daß es nicht mehr ist. mit einem Button geht das so. Nur wie kriege ich es hin, wenn die Zelle ganz rechts verlassen wird, daß dann eine neue Zeile kommt :?:
|
Hallo Hansa,
probier's mal hiermit
Delphi-Quellcode:
type
TForm1 = class(TForm) StringGrid1: TStringGrid; procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); procedure StringGrid1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private-Deklarationen } FLastCol : Integer; FLastRow : Integer; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); begin FLastCol:=ACol; FLastRow:=ARow; end; procedure TForm1.StringGrid1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin If (Key=VK_DOWN) and (FLastRow=StringGrid1.RowCount-1) and (FLastCol=StringGrid1.ColCount-1) then begin StringGrid1.RowCount:=StringGrid1.RowCount+1; StringGrid1.Row:=StringGrid1.RowCount-1; end; end; end. |
hmm,
ich bastle mir hier meist eien eigenen Type zusammen und mach mir ein Array von dem Type, dann lese ich alles in das Array und schreibe es dann in die Grid, das ist vor allem dann gut wenn man mit Dialogen arbeitet dann kann man einfach das Array übergeben und hat Ruhe.
|
Re: hmm,
Zitat:
@Jens: Dein Code sieht zwar plausibel aus, geht aber nicht.
Code:
Da komme ich nie an. goEditing ist auf true gesetzt.
procedure TForm1.StringGrid1KeyUp
|
Hallo Hansa,
ich poste niemals ungetesteten Code. Hier ist meine dfm-Datei.
Delphi-Quellcode:
Wie Du siehst habe ich geEditing gesetzt. Bei mir funktioniert das Beispiel einwandfrei. Wenn ich die Zelle rechts unten editiere und anschließend auf VK_DOWN drücke wird ein neue Zeile zum Stringgrid hinzugefügt.
object Form1: TForm1
Left = 133 Top = 103 Width = 415 Height = 540 Caption = 'Form1' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object StringGrid1: TStringGrid Left = 8 Top = 16 Width = 333 Height = 481 DefaultRowHeight = 18 Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goEditing] TabOrder = 0 OnKeyUp = StringGrid1KeyUp OnSelectCell = StringGrid1SelectCell end end [edit=Daniel B]Delphi-Tags gesetzt. MfG Daniel B.[/edit] |
Zitat:
Im Ernst: Habe gar nicht mehr an den Thread gedacht. Deine Vorlage war gut, ich habe es aber etwas anders gemacht. 1. FlastRow und FLastCol brauche ich nicht 2. Das ganze steht im OnKeyDown ungefähr so :
Delphi-Quellcode:
Das ist natürlich nicht alles, ein Haufen SQL-Anweisungen fehlt usw.
procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin if not (key in [48..58,8,13]) then key := 0; with StringGrid1 do begin case key of VK_RETURN : begin if cells [4,RowCount-1] <> '' then begin ..... Transaction.Commit; RowCount:=RowCount+1; // neue Zeile Row:=RowCount-1; // aktuelle Zeile neu positionieren Col := 1; // auch in Spalte 1 i := i + 1; // Zeilenzähler um 1 erhöhen Cells [0,Row] := IntToStr (i)+'.'; end; end; VK_ESCAPE : Close; end; end; end; Das Grid verhält sich folgendermaßen: 1. Nur Zahlen werden akzeptiert 2. Mit Return kann durch die Eingabefelder gewandert werden 3. in Col 0 wird ein Zähler mitgeschleppt, um anzuzeigen, an welcher Position man ist. 4. ESC heißt Eingabe beenden [edit=Daniel B]Delphi-Tags gesetzt. MfG Daniel B.[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:41 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