AW: Adressbuch mit Stringgrid.
Zitat:
|
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:
Jetzt geht Name nicht mehr. Wie kann ich ihm sagen das er immer 1Zeile nach unten geht?
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; |
AW: Adressbuch mit Stringgrid.
Zitat:
|
AW: Adressbuch mit Stringgrid.
Zitat:
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. |
AW: Adressbuch mit Stringgrid.
Habs hingekriegt! :thumb:
Delphi-Quellcode:
Stufe 2: Speichern und Laden
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. |
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:
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,...
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; |
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 |
AW: Adressbuch mit Stringgrid.
Zitat:
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 ... |
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. |
AW: Adressbuch mit Stringgrid.
[OT]
Zitat:
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:
[/OT] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:30 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