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/)
-   -   StringGrid (https://www.delphipraxis.net/135937-stringgrid.html)

Kunoishi 20. Jun 2009 16:11


StringGrid
 
ich habe ein StringGrid und 5 Editfelder und möchte über ein Butten, dass die eingaben aus dem Editfeld in das StringGrid übergeben werden. Wie bekomme ich das hin ?

hoika 20. Jun 2009 16:27

Re: StringGrid
 
Hallo,

was genau weisst du nicht ?

TStringGrid -> Ctrl+F1, Hilfe lesen zu RowCount, ColCount, Cells.


Heiko

Kunoishi 20. Jun 2009 18:56

Re: StringGrid
 
das mit der Überschrift habe ich ja hinbekommen

Delphi-Quellcode:
procedure TArtikelerfassungForm.SetzeArtikelStringGrid;
begin                                          
  ArtikelStringGrid.rowCount := 2;              
  ArtikelStringGrid.colCount := 6;              
  ArtikelStringGrid.cells[0,0] := 'Datensatz-Nr';
  ArtikelStringGrid.cells[1,0] := 'Abteilung';      
  ArtikelStringGrid.cells[2,0] := 'Abteilung-Nr.';    
  ArtikelStringGrid.cells[3,0] := 'Artikel';    
  ArtikelStringGrid.cells[4,0] := 'Preis;    
  ArtikelStringGrid.cells[5,0] := 'GPreis;    
end;
jetzt wollte ich die eingaben speichern und an meine ArtikelStringGrid
übergeben und den Inhalt der editfelder wieder löschen

Delphi-Quellcode:
procedure TArtikelerfassungForm.Init(Rec:TArtikelerfassungRec);
var i:integer;
begin
  EditArtikelBezeichnung.Text := Rec.Artikel;
  EditArtikelAnzahl.Text := Rec.ArtikelAnzahl;
  EditEinzelPreis.Text := Rec.ArtikelWert;
  EditGesamtPreis.Text := Rec.ArtikelGesamtPreis;
  EditVerbleibWare.ItemIndex := 0;
  for i:=1 to EditVerbleibWare.Items.Count-1 do
  begin
    if Rec.ArtikelVerbleib = EditVerbleibWare.Items[i] then
    begin
      EditVerbleibWare.ItemIndex := i;
      break;
    end;
  end;
  EditFremdObjekt.Text := Rec.FremdObjekt;

end;
jups und da ist mein problem

[edit=Luckie]Delphi-Tags ergänzt. Mfg, Luckie[/edit]

youuu 20. Jun 2009 19:21

Re: StringGrid
 
Kannst du das bitte in Delphi-Code einbinden, damit wird es übersichtlicher und man kann dir auch leichter helfen.

Kunoishi 20. Jun 2009 19:30

Re: StringGrid
 
procedure TArtikelerfassungForm.SetzeArtikelStringGrid;
begin
ArtikelStringGrid.rowCount := 2;
ArtikelStringGrid.colCount := 6;
ArtikelStringGrid.cells[0,0] := 'Datensatz-Nr';
ArtikelStringGrid.cells[1,0] := 'Abteilung';
ArtikelStringGrid.cells[2,0] := 'Abteilung-Nr.';
ArtikelStringGrid.cells[3,0] := 'Artikel';
ArtikelStringGrid.cells[4,0] := 'Preis;
ArtikelStringGrid.cells[5,0] := 'GPreis;
end;

mein ihr das so, ich komme mit dem Forum noch nicht so klar :-(

youuu 20. Jun 2009 19:39

Re: StringGrid
 
Nein wenn du einen Beitrag Tippst hast du verschiedene Buttons über deinen Textfeld.

Einmal B | i | usw. da gibt es auch den Button Delphi-Code


das sieht dann so aus:

Delphi-Quellcode:
..Programmcode

Kunoishi 20. Jun 2009 19:41

Re: StringGrid
 
das mit der Überschrift habe ich ja hinbekommen

Delphi-Quellcode:
procedure TArtikelerfassungForm.SetzeArtikelStringGrid;
begin
ArtikelStringGrid.rowCount := 2;
ArtikelStringGrid.colCount := 6;
ArtikelStringGrid.cells[0,0] := 'Datensatz-Nr';
ArtikelStringGrid.cells[1,0] := 'Abteilung';
ArtikelStringGrid.cells[2,0] := 'Abteilung-Nr.';
ArtikelStringGrid.cells[3,0] := 'Artikel';
ArtikelStringGrid.cells[4,0] := 'Preis;
ArtikelStringGrid.cells[5,0] := 'GPreis;
end;
jetzt wollte ich die eingaben speichern und an meine ArtikelStringGrid
übergeben und den Inhalt der editfelder wieder löschen

Delphi-Quellcode:
procedure TArtikelerfassungForm.Init(Rec:TArtikelerfassungRec);
var i:integer;
begin
EditArtikelBezeichnung.Text := Rec.Artikel;
EditArtikelAnzahl.Text := Rec.ArtikelAnzahl;
EditEinzelPreis.Text := Rec.ArtikelWert;
EditGesamtPreis.Text := Rec.ArtikelGesamtPreis;
EditVerbleibWare.ItemIndex := 0;
for i:=1 to EditVerbleibWare.Items.Count-1 do
begin
if Rec.ArtikelVerbleib = EditVerbleibWare.Items[i] then
begin
EditVerbleibWare.ItemIndex := i;
break;
end;
end;
EditFremdObjekt.Text := Rec.FremdObjekt;

end;
jups und da ist mein problem
ich weis jetzt nich wie ich die neuen daten in das ArtikelStringGrid bekomme

Kunoishi 20. Jun 2009 19:42

Re: StringGrid
 
na geht doch :-)
ist so besser ?

youuu 20. Jun 2009 19:54

Re: StringGrid
 
Zum speichern in dein StringGrid kannst du es so tun.

Delphi-Quellcode:
StringGrid.Cells[0,StringGrid.RowCount +1] := Dein Record;
StringGrid.Cells[1,StringGrid.RowCount +1] := Dein Record;
StringGrid.Cells[2,StringGrid.RowCount +1] := Dein Record;

Ich hoffe das ist das was du gemeint hattest?

Kunoishi 20. Jun 2009 20:04

Re: StringGrid
 
damit komme ich nicht klar :-(
übernimmt er dort die daten dann in die "Tabelle" und speicher er das dann ?

youuu 20. Jun 2009 20:05

Re: StringGrid
 
Magst du die Daten direkt aus deinen EditFeld in das StringGrid speichern oder aus deinem Record raus?

Kunoishi 20. Jun 2009 20:14

Re: StringGrid
 
ich wolte diesen aus den Record heraus lesen

youuu 20. Jun 2009 20:20

Re: StringGrid
 
Delphi-Quellcode:
procedure TFormMain.Button1Click(Sender: TObject);
begin
  StringGrid.Cells[4,StringGrid.RowCount +1] := Rec.ArtikelWert;
  StringGrid.Cells[5,StringGrid.RowCount +1] := Rec.ArtikelGesamtPreis;
end;
Ich weiß leider nicht wie dein Record aufgebaut ist.

Aber so in der Art sollte es funktionieren.

Vorraus gesetzt du speicherst deine eingegebenen Daten vorher in dein Record, das sehe dann so aus:

Delphi-Quellcode:
Rec.Artikel:= EditArtikelBezeichnung.Text;
Rec.ArtikelAnzahl:= EditArtikelAnzahl.Text;
.
.
.


So werden die Daten. indem man auf einen Button klickt in dein StringGrid eingegeben, du musst natürlich den namen deines StringGrids einsetzen.

oder F1 benutzen, das ist dann die interne Delphi Hilfe.

Kunoishi 20. Jun 2009 20:31

Re: StringGrid
 
ich habe hier mal ein auszug
Delphi-Quellcode:
nit Artikelverwaltung;

interface


uses classes, grids;

// Datenstruktur für die Speicherung auf Festplatte
// deshalb SHORTSTRING
type TArtikelerfassungRec = packed record
       Datensatz:ShortString;
       AbteilungName:ShortString;
       AbteilungNr:ShortString;
       Artikel:ShortString;
       ArtikelAnzahl:ShortString;
       ArtikelWert:ShortString;
       ArtikelGesamtpreis:ShortString;
       ArtikelVerbleib:ShortString;
       Fremdobjekt:ShortString;
end;

// Pointer auf die Struktur, notwendig für TList
type pArtikelerfassungRec = ^TArtikelerfassungRec;


type
 CArtikelerfassung = class(Tobject)
  private
    Liste:TList; // privates Liste
  protected
  public
    constructor Create;
    destructor Destroy; override;
    function   Count:integer;
    procedure  add(rec:TArtikelerfassungRec);
    procedure  clear;
    procedure  Delete(Nr:integer);
    procedure  Save(szDatei:string);
    procedure  Load(szDatei:string);
    function   getItem(Nr:integer):TArtikelerfassungRec;
    procedure  setItem(Nr:integer; Rec:TArtikelerfassungRec);
    procedure  Show(ArtikelGrid:TStringGrid);
  published
end;

procedure InitArtikelerfassungRec(var Rec:TArtikelerfassungRec);

implementation

uses SysUtils;

constructor CArtikelerfassung.Create;
begin
    // Erzeugung der Liste
  Liste := TList.create;
end;

destructor CArtikelerfassung.Destroy;
begin
  inherited Destroy;
    // Freigeben des Speichers
  clear;
  Liste.free;
end;

// gibt die Anzahl der Einträge aus
function   CArtikelerfassung.Count:integer;
begin
  result := Liste.count;
end;

// fügt einen Datensatz in die Liste
// eventuell Umstellung auf Pointer Parameter
procedure CArtikelerfassung.add(rec:TArtikelerfassungRec);
var pRec:pArtikelerfassungRec;
begin
  new(pRec);
  pRec^:= rec;
  Liste.add(pRec);
end;

// Ausgabe des Nr Elementes
// Achtung: Nr zählt von 0 bis N-1
function CArtikelerfassung.getItem(Nr:integer):TArtikelerfassungRec;
var pRec:pArtikelerfassungRec;
begin
  pRec := Liste.Items[Nr];
  result := pRec^;
end;


// Setzt ein Elementes neu
// Achtung: Nr zählt von 0 bis N-1
procedure CArtikelerfassung.setItem(Nr:integer; Rec:TArtikelerfassungRec);
var pRec:pArtikelerfassungRec;
begin
  pRec := Liste.Items[Nr];
  pRec^ := Rec;
end;


// löscht alle Datenätze
procedure  CArtikelerfassung.clear;
var i:integer;
var pRec:pArtikelerfassungRec;
begin
  for i:=0 to Liste.Count-1 do
  begin
    pRec := Liste.Items[i];
    dispose(pRec);
  end;
  Liste.clear;

end;

// Löscht ein Elementes
// Achtung: Nr zählt von 0 bis N-1
procedure  CArtikelerfassung.Delete(Nr:integer);
var pRec:pArtikelerfassungRec;
begin
  pRec := Liste.Items[Nr];
  dispose(pRec);
  Liste.delete(Nr);
end;

// Sichert die Datensätz ein der angegeben Datei
// Keine Sicherheitsabfrage, ob Überschrieben J/N
procedure  CArtikelerfassung.Save(szDatei:string);
var kanal:file of TArtikelerfassungRec;
var pRec:PArtikelerfassungRec;
    i:integer;
begin
  assign(kanal,szDatei);
  rewrite(kanal);
  for i:=0 to Liste.Count-1 do
  begin
    pRec := Liste.Items[i];
    write(kanal,pRec^);
  end;
  closefile(kanal);
end;

// Lädt die Datensätz
procedure  CArtikelerfassung.Load(szDatei:string);
var kanal:file of TArtikelerfassungRec;
var Rec:TArtikelerfassungRec;
begin
  clear; // Die Daten werden auf jedenfall gelöscht
  if FileExists(szDatei) then
  begin
    assign(kanal,szDatei);
    reset(kanal);
    while not eof(kanal) do
    begin
      read(kanal,Rec);
      add(Rec);
    end;
    closefile(kanal);
  end
  else
  begin
//    Meldung('Fehler','Die angegebene Datei ist nicht vorhanden'+NL+szdatei);
  end;
end;

// Zeigt die Datensätze in einem externen Grid für das Objekt(Tabelle) an
procedure  CArtikelerfassung.Show(ArtikelGrid:TStringGrid);
var i:integer;
    pRec:pArtikelerfassungRec;
begin
  if Liste.Count = 0 then
  begin
    ArtikelGrid.RowCount := 2;
    ArtikelGrid.cells[0,1] := '-';
    ArtikelGrid.cells[1,1] := '-';
    ArtikelGrid.cells[2,1] := '-';
    ArtikelGrid.cells[3,1] := '-';
    ArtikelGrid.cells[4,1] := '-';
  end
  else
  begin
    ArtikelGrid.RowCount := Liste.Count+1;
    for i:=0 to Liste.Count-1 do
    begin
      pRec := Liste.Items[i];
      ArtikelGrid.cells[0,i+1] := IntToStr(i+1);
      ArtikelGrid.cells[1,i+1] := pRec.AbteilungName;
      ArtikelGrid.cells[2,i+1] := pRec.AbteilungNr;
      ArtikelGrid.cells[3,i+1] := pRec.Artikel;
      ArtikelGrid.cells[4,i+1] := pRec.ArtikelWert;
    end;
  end;
end;

// Procedure dient zur Initialisierung
procedure InitArtikelerfassungRec(var Rec:TArtikelerfassungRec); // ohne
begin
  with Rec do
  begin
    AbteilungName:='';
    AbteilungNr:='';
    Artikel:='';
    ArtikelWert:='';
  end;
end;

end.

hoika 20. Jun 2009 21:18

Re: StringGrid
 
Hallo,

Was ist denn so schwierig, einen Breakpoint drauf zu setzen
und es debuggen zu debuggen ?.

Ausserdem kann ich mir nicth vorstellen,
dass dein Code überhaupt kompiliert wird

Delphi-Quellcode:
var
  prec: pArtikelerfassungRec;

pRec := Liste.Items[i];
ArtikelGrid.cells[0,i+1] := IntToStr(i+1);
ArtikelGrid.cells[1,i+1] := pRec.AbteilungName;
Statt pRec.AbteilungName muesste es heissen pRec^.AbteilungName;


Nur !!!
Warum nimmst du überhaupt Pointer ?
TList funktioniert wunderbar mit ganz normalen Klassen.
Lass den ganzen Record-"Quatsch" weg.


Heiko

Kunoishi 20. Jun 2009 21:35

Re: StringGrid
 
Liste der Anhänge anzeigen (Anzahl: 2)
ich sitze da seit 14 Tagen drann und versuche in der suppe das Haar zu finden.
in der schule hört sich das alles so einfach an. :-(
und langsam kocht mir die platte.
wenn ich das jetzt noch in umschreiben soll bin ich bis Mi. doch nie fertig.

ich versuche das mal zu hinterlegen als datei bei euch.
ich sehe den fehler nicht.

youuu 20. Jun 2009 22:07

Re: StringGrid
 
Was genau willst du denn machen? Lediglich aus einen Edit Feld die Eingabe in einem StringGrid anzeigen oder soll es mehr tun?

Kunoishi 20. Jun 2009 22:10

Re: StringGrid
 
erstmal nur anzeigen und dann nach allen eingaben 4 oder 5 Datensatz oder 10 das ganze in der dat.-Datei speichern


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:34 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 by Thomas Breitkreuz