AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

dynamisches Stringgrid

Ein Thema von Hansa · begonnen am 27. Jun 2003 · letzter Beitrag vom 30. Jun 2003
Antwort Antwort
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

dynamisches Stringgrid

  Alt 27. Jun 2003, 11:46
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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 27. Jun 2003, 11:57
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3
  Alt 27. Jun 2003, 12:00
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 ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4
  Alt 27. Jun 2003, 12:34
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
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#5
  Alt 27. Jun 2003, 13:19
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.
  Mit Zitat antworten Zitat
JoelH
(Gast)

n/a Beiträge
 
#6

hmm,

  Alt 27. Jun 2003, 15:34
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.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: hmm,

  Alt 27. Jun 2003, 17:51
Zitat von JoelH:
ich bastle mir hier meist eien eigenen Type zusammen und mach mir ein Array von dem Type...
dann sag mal wie.

@Jens: Dein Code sieht zwar plausibel aus, geht aber nicht.

Code:
procedure TForm1.StringGrid1KeyUp
Da komme ich nie an. goEditing ist auf true gesetzt.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#8
  Alt 30. Jun 2003, 12:13
Hallo Hansa,
ich poste niemals ungetesteten Code.
Hier ist meine dfm-Datei.
Delphi-Quellcode:
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
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.

[edit=Daniel B]Delphi-Tags gesetzt. MfG Daniel B.[/edit]
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9
  Alt 30. Jun 2003, 12:33
Zitat von Jens Schumann:
ich poste niemals ungetesteten Code..
Echt ? Ich mach das immer.

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:
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 ist natürlich nicht alles, ein Haufen SQL-Anweisungen fehlt usw.
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]
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 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