Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Adressbuch mit Stringgrid. (https://www.delphipraxis.net/186130-adressbuch-mit-stringgrid.html)

BUG 6. Aug 2015 12:33

AW: Adressbuch mit Stringgrid.
 
Zitat:

Zitat von GroZ (Beitrag 1311277)
ist .txt möglich?

Die Dateiendung ist nur ein Teil des Dateinamens: .txt ist genauso möglich wie .bin, .csv oder .adressen

GroZ 6. Aug 2015 12:55

AW: Adressbuch mit Stringgrid.
 
Naja ich wills erstmal normal hinkriegen ohne speichern reicht erstmal :)
Aber ich glaub ich habs grad kaputt gemacht haha
Delphi-Quellcode:
procedure TForm1.HinzuBtnClick(Sender: TObject);
var i, x : integer;
begin
  x := 1;
  i := x + 1;
  AdresseGrid.Cells[i,1]:= Name.Text;
  AdresseGrid.Cells[2,1]:= Alter.Text;
  AdresseGrid.Cells[3,1]:= Wohnort.Text;
  AdresseGrid.Cells[4,1]:= Tel.text;
end;
Jetzt geht Name nicht mehr. Wie kann ich ihm sagen das er immer 1Zeile nach unten geht?

Perlsau 6. Aug 2015 13:12

AW: Adressbuch mit Stringgrid.
 
Zitat:

Zitat von GroZ (Beitrag 1311287)
Jetzt geht Name nicht mehr. Wie kann ich ihm sagen das er immer 1Zeile nach unten geht?

"Jetzt geht Name nicht mehr" ist keine aussagekräftige Fehlermeldung. Oben wurde dir bereits empfohlen, einmal die Online-Hilfe zum Stringgrid etwas genauer zu studieren. Dort würdest du die Antwort unweigerlich finden. Solche und weitere Fragen werden dir ebenfalls in den oben vorgestellten Video-Tutorials beantwortet. Dort könntest du all das lernen, was du hier bereits gefragt hast, und zwar von Anfang an. Damit wäre das Problem, daß du die Antworten, die dir hier gegeben werden, (noch) nicht verstehst, beseitigt.

BUG 6. Aug 2015 13:30

AW: Adressbuch mit Stringgrid.
 
Zitat:

Zitat von Perlsau (Beitrag 1311292)
Solche und weitere Fragen werden dir in den oben vorgestellten Video-Tutorials beantwortet.

Die Produktionsqualität ist für Delphi-Tutorials auf Youtube schon erstaunlich gut, aber ich weiß nicht ob ich mehr als eine halbe Stunde am Stück aushalten würde. Das hat so seine Längen, ein etwas kürzer geschnittenes* Format wäre imho angenehmer.
Aber gut, das ist wohl etwas OT und es ist schön, das es überhaupt Material gibt :thumb:

* ~10-15min mit je einem einigermaßen griffigem Thema/Titel. Zum Beispiel muss man nicht zugucken, wie du durch deine Ordner navigierst.

GroZ 6. Aug 2015 14:28

AW: Adressbuch mit Stringgrid.
 
Habs hingekriegt! :thumb:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, Grids, StdCtrls, ComCtrls, Menus;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Name: TLabeledEdit;
    Alter: TLabeledEdit;
    Wohnort: TLabeledEdit;
    Tel: TLabeledEdit;
    HinzuBtn: TButton;
    LoeschenBtn: TButton;
    AdresseGrid: TStringGrid;
    BeendenBtn: TButton;
    MonthCalendar1: TMonthCalendar;
    Panel3: TPanel;
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    Speichern1: TMenuItem;
    Speichernunter1: TMenuItem;
    Nochnichtfertig1: TMenuItem;
    Schlieen1: TMenuItem;
    procedure BeendenBtnClick(Sender: TObject);
    procedure HinzuBtnClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure LoeschenBtnClick(Sender: TObject);
    procedure Schlieen1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Name, Wohnort: string;
  Alter, Tel: integer;

implementation

{$R *.dfm}

procedure TForm1.BeendenBtnClick(Sender: TObject);
begin
//sleep(1000);
close;
end;

procedure TForm1.HinzuBtnClick(Sender: TObject);
var i : integer;
begin
  for i := 0 to AdresseGrid.RowCount-1 do            // Name
  begin
    if AdresseGrid.Cells[1, i] = '' then
    begin
      AdresseGrid.Cells[1, i] := Name.Text;
      break;
    end;
end;

begin
  for i := 0 to AdresseGrid.RowCount-1 do
  begin
    if AdresseGrid.Cells[2, i] = '' then            // Alter
    begin
      AdresseGrid.Cells[2, i] := Alter.Text;
      break;
    end;
end;

begin
  for i := 0 to AdresseGrid.RowCount-1 do
  begin
    if AdresseGrid.Cells[3, i] = '' then
    begin                                           // Wohnort
      AdresseGrid.Cells[3, i] := Wohnort.Text;
      break;
    end;
end;

begin
  for i := 0 to AdresseGrid.RowCount-1 do
  begin
    if AdresseGrid.Cells[4, i] = '' then            // Tel. Nummer
    begin
      AdresseGrid.Cells[4, i] := Tel.Text;
      break;
    end;

end;
end;
end;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var i : integer;

begin
  AdresseGrid.Refresh;
  AdresseGrid.ColWidths[0] := 25;
  AdresseGrid.Cells[1,0]:= 'Name';
  AdresseGrid.Cells[2,0]:= 'Alter';
  AdresseGrid.Cells[3,0]:= 'Wohnort';
  AdresseGrid.Cells[4,0]:= 'Telefon';
    for i := 1 to 20 do
    begin
      AdresseGrid.Cells[0,i]:= IntToStr(i);
    end;
end;

procedure TForm1.LoeschenBtnClick(Sender: TObject);
begin
  Name.Clear;
  Alter.Clear;
  Wohnort.Clear;
  Tel.Clear;
end;

procedure TForm1.Schlieen1Click(Sender: TObject);
begin
close;
end;

end.
Stufe 2: Speichern und Laden

Jumpy 6. Aug 2015 14:56

AW: Adressbuch mit Stringgrid.
 
Deine Hinzufügen Funktion ist nicht nur unperformant (da du die selbe Schleife mehrfach ausführst sondern auch gefährlich.
Hast du z.B. 4 Zeilen, aber in der 4. keine Alter angegeben, und fügst jetzt einen neuen Datensatz hinzu, dann werden Name, Ort und Tel in Zeile 5 geschrieben, Alter aber in Zeile 4, weil das die erste Zeile ist in der Spalte Alter leer ist. Besser wäre so:

Delphi-Quellcode:
procedure TForm1.HinzuBtnClick(Sender: TObject);
var CurrentRow:Integer
begin
  CurrentRow:=GetFirstEmptyRow
  AdresseGrid.Cells[1, CurrentRow] := Name.Text;
  AdresseGrid.Cells[2, CurrentRow] := Alter.Text;
  AdresseGrid.Cells[3, CurrentRow] := Wohnort.Text;
  AdresseGrid.Cells[4, CurrentRow] := Tel.Text;
end;

function TForm1.GetFirstEmptyRow:Integer;
begin
  Result:=0;
  for i := 1 to AdresseGrid.RowCount-1 do
    if AdresseGrid.Cells[1, i] = '' then
      begin    
      Result:=i;
      break;
      end;
  if Result=0 then
    begin
    // AdresseGrid.AddRow //oder wie auch immer man eine Zeile anfügt
    Result:=AdresseGrid.RowCount-1;
    end;
end;
Noch schöner aber wie gesagt, die eigentlichen Daten einer Person in einem Objekt/Record halten und alle diese Objekte/Records dann in einer (Objekt-)Liste/Array,...

GroZ 6. Aug 2015 15:03

AW: Adressbuch mit Stringgrid.
 
Naja das der Code sehr unvorteilhaft ist hab ich selber schon gemerkt. Aber man lernt ja mit der Zeit :P bin eig ganz zufrieden so wie es jetzt grade ist.
PS: Das Problem ist mir selber auch schon aufgefallen aber das kommt dann erst in Version 2.0 :D

Perlsau 6. Aug 2015 15:12

AW: Adressbuch mit Stringgrid.
 
Zitat:

Zitat von Jumpy (Beitrag 1311316)
Noch schöner aber wie gesagt, die eigentlichen Daten einer Person in einem Objekt/Record halten und alle diese Objekte/Records dann in einer (Objekt-)Liste/Array,...

Genau das erkläre ich ausführlich im Video-Tutorial: Arbeiten mit Records und typisierten Dateien, Ansicht in einem Stringgrid, hinzufügen, ändern und löschen von Adress-Datensätzen usw. Und wem das als Anfänger zu viel ist oder wer sich nicht für einen blutigen Anfänger hält oder nicht dafür gehalten werden will, dem genügen vermutlich auch die jeweiligen Quellcodes, die unterhalb der Videos verlinkt sind.

Leider kommt es wie hier sehr häufig vor, daß Anfänger weder Online-Hilfe noch Tutorials bemühen wollen, sondern glauben, durch einfaches Drauflosprogrammieren zum Ziel gelangen zu können. Letzteres ist meiner Erfahrung nach noch niemandem gelungen. In der Zeit, in der der TE sich hier vergeblich abmüht, die Antworten zu begreifen, um dann doch wieder irgendwas zu coden, das er nicht wirklich versteht, hätte er schon zwei oder drei Teile des 5teiligen Video-Tutorials durcharbeiten und den hilfsbereiten Usern nervliche Belastung ersparen können. Leider kenne ich dieses sture Verhalten auch von Kunden, die uralte Komponenten und Konzepte beibehalten wollen und nicht bereit sind, strukturelle Fehler ihrer Software zu beseitigen (kürzlich hatte ich einen, dessen Code knapp eine Million undokumentierte Codezeilen beinhaltet und beim Kompilieren hunderte von Hinweisen und Warnungen erzeugt, kein Witz) und dann rummeckern, wenn Änderungen, die sie nicht mehr selbst in der Lage sind zu bewältigen, viel Zeit und Geld in Anspruch nehmen. Da ist letzendlich jegliche Mühe vergeblich ... und am Ende wird man nicht mal bezahlt und muß auch noch einen Anwalt bemühen ...

BUG 6. Aug 2015 15:22

AW: Adressbuch mit Stringgrid.
 
Erst einmal mit den visuellen Komponenten herumzuspielen und ein paar schnelle Erfolge zu haben ist auch nicht so verkehrt :mrgreen:
Den Schrott den ich früher zusammenprogrammiert habe ... da wäre eine Adressverwaltung deutlich sinnvoller gewesen.

p80286 6. Aug 2015 15:27

AW: Adressbuch mit Stringgrid.
 
[OT]
Zitat:

Zitat von BUG (Beitrag 1311275)
Zitat:

Zitat von p80286 (Beitrag 1311259)
vorher solltest Du Dir aber Gedanken über das Abspeichern, ggf. in einer Datei, machen.

Damit bist du imho schon einen Schritt zu weit. Der erste Gedanke sollte hier sein, wie die Daten im Programm repräsentiert werden. Ob die Daten dann gespeichert oder anderweitig ausgegeben werden, macht dann ja nicht so den Unterschied.

Die Gretchenfrage ist also: Sollen die Daten nur im Stringgrid* gehalten werden oder in einer Liste von Objekten**? :wink:

* Wenn es nur darum geht mit dem Stringgrid zu spielen ... vielleicht akzeptabel.
** In die Richtung gibt eine Menge spannendes Zeug zu lernen: Was sind Objekte? Wie verwalte ich meinen Speicher? Was für Datenstrukturen kann ich am besten für die Verwaltung der Daten benutzen?

Bevor wir uns die Köpfe einschlagen, und den TE verwirren, mir erscheint es logischer die wie auch immer, erfassten Daten zunächst einmal auf einem Datenträger abzulegen und dann wieder einzulesen. [und sei es als String]
Die eigentlich wichtige Frage hast Du leider nur verschämt gestellt, wobei meiner Meinung nach, die Datenstruktur automatisch alles andere nach sich zieht, aber gut lassen wir das hier.

Gruß
K-H
Zitat:

Zitat von BUG (Beitrag 1311328)
Erst einmal mit den visuellen Komponenten herumzuspielen und ein paar schnelle Erfolge zu haben ist auch nicht so verkehrt :mrgreen:
Den Schrott den ich früher zusammenprogrammiert habe ... da wäre eine Adressverwaltung deutlich sinnvoller gewesen.

Jeder hat eine Vergangenheit :zwinker:

[/OT]


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:30 Uhr.
Seite 3 von 5     123 45      

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