Thema: StringGrid

Einzelnen Beitrag anzeigen

Kunoishi

Registriert seit: 26. Dez 2002
Ort: Berlin
140 Beiträge
 
Delphi 5 Standard
 
#14

Re: StringGrid

  Alt 20. Jun 2009, 20:31
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.
  Mit Zitat antworten Zitat