Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Delphi _ Button öfter benutzen (https://www.delphipraxis.net/187449-delphi-_-button-oefter-benutzen.html)

remo.lieb 30. Nov 2015 23:05


Delphi _ Button öfter benutzen
 
Hallo,

zurzeit benutze ich Delphi 7 mit freier Lizenz. Ich interessiere mich sehr für Programmieren, doch stoße gerade an meine Grenzen. Ich habe heute versucht ein Programm zu schreiben, welches Daten wie Kosten, Name der Zahlung aufnimmt und diese in einer Tabelle ausgibt. Ich habe einen Button benutzt, den ich als "Hinzufügebutton" benutze (er soll thoeretisch immer in der nächsten Zeile den neuen Eintrag dranhängen). Ich kann zwar die erste Reihe in der Tabelle hinzufügen und diese durch Veränderungen in den Edit-Feldern verändern, aber komme NIE in die zweite Zeile meiner Tabelle um dort die zweite "Abbuchung" hinzuzufügen. Hier der Quelltext:

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit2: TEdit;
    StringGrid1: TStringGrid;
    Label5: TLabel;
    procedure Button4Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
Tabrechnung = RECORD
  name : string;
  kosten : real;
  quit : string;
end;
var
  Form1: TForm1;
  abrechnung : Tabrechnung;
  i,n,c : integer;
implementation

{$R *.dfm}

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

procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.RowCount := 2;
StringGrid1.ColCount := 4;

StringGrid1.Cells[0,0] := 'Nummer';
StringGrid1.Cells[1,0] := 'Name';
StringGrid1.Cells[2,0] := 'Kosten';
StringGrid1.Cells[3,0] := 'Quittung';

end;

procedure TForm1.Button1Click(Sender: TObject);

begin
i := 1;
n := 1;
c := 0;



abrechnung.name := Edit2.Text;
abrechnung.kosten := strtofloat(Edit1.Text);
abrechnung.quit := Edit3.Text;

StringGrid1.Cells[0,n] := inttostr(n);
StringGrid1.Cells[i,n] := abrechnung.name;
i := i+1;
StringGrid1.Cells[i,n] := floattostr(abrechnung.kosten);
i := i+1;
StringGrid1.Cells[i,n] := abrechnung.quit;
n := n+1;
i := i-2;

Label5.Caption := inttostr(n);
StringGrid1.
end;




end.
Ich würde mich über hilfreiche Antworten sehr freuen. Vielen Dank!

Medium 30. Nov 2015 23:52

AW: Delphi _ Button öfter benutzen
 
Deine Variablen n und i sind lokale Variablen der Prozedur "Button1Click", und werden bei jedem Mal Button klicken neu erstellt. (Edit: Jo, verguckt. Das kommt von den Namen, die man in der Kürze idR wenn überhaupt nur als lokale Variablen nimmt.) Du weist ihnen ja sogar selbst noch (richtigerweise) einen Startwert zu - dies passiert bei JEDEM Mal klicken. Klar, denn der Code
Delphi-Quellcode:
n := 1;
steht ja auch in der Prozedur, in der du beschrieben hast, was bei einem Klick passieren soll. Das passiert dann auch ;)

Du musst dir die aktuell zu beschreibende Zeile daher ausserhalb deriner "Button2Click" Prozedur merken. Zum Beispiel als Variable des Formulars, eine gute Stelle wäre im Private-Abschnitt davon.


In den Zeilen
Delphi-Quellcode:
n := n+1;
i := i-2;
dürfte der Compiler auch Hinweise geben, dass die hier zugewiesenen Werte niemals benutzt werden. (Es wird vor Prozedurende nicht mehr von ihnen gelesen, somit verfallen die Werte. Da ja beim nächsten Klick die Variablen wieder taufrisch sind.)
Edit: Ok, kommt bei dir in dem Fall nicht, da die Variablen ja global sind*. Da ist dann das Setzen auf 1 im Click das einzige Problem. Zumindest funktional.


Es ist i.A. schon meist sehr sehr hilfreich einige Fehler zu finden, wenn man die Warnungen und Hinweise des Compilers beachtet und zusieht, diese auf 0 zu bekommen. Das ist sogar nicht nur eine leere Predigt, mir hat das auch eine nötige Portion Selbstdisziplin gebracht, die mir definitiv besseren und besser handhabbaren Code gebracht hat.

Drei andere Dinge noch:
1) Wenn du deinen Code in [ delphi] [ /delphi] Tags (ohne die Leerzeichen) packst, wird er schön formatiert hier dargestellt und ist viel leichter zu lesen.
2) Bitte gewöhne dir schnellstmöglich an deinen Komponenten aussagekräftige Namen zu geben. Mit Edit1 und Button4 kannst du selbst schon nach ein paar Wochen nichts mehr anfangen, und andere die deinen Code lesen erst recht nicht. (Ähnlich wie die Warnungen und Hinweise. Man tut sich einfach selbst einen gewaltigen Gefallen damit, auch wenn es erst wie "zu viel" gemachte Arbeit aussieht. Ist es nie!)
3) Du setzt in deinem Stringgrid anfangs zwei Zeilen fest. Dies musst du natürlich auch erhöhen, wenn mehr Zeilen dazu kommen.

*) Und warum globale Variablen sehr böse sind, findet sich durch eine schnelle Forensuche auch hier.

Dalai 30. Nov 2015 23:53

AW: Delphi _ Button öfter benutzen
 
Schau mal, was beim Klick auf den Button mit der Variablen n passiert: sie wird immer auf 1 gesetzt.

Ein wichtiger genereller Hinweis: Wähle aussagekräftige Bezeichner für deine Variablen, Komponenten & Co! Leider werden selbst heutzutage teilweise noch einbuchstabige Variablennamen von Lehrkräften benutzt, bei denen sich mir die Fußnägel aufrollen (weniger wegen der Lehrkräfte als wegen der Variablen ;)). Wenn du später mal in den Code schaust, weißt du mit hoher Wahrscheinlichkeit nicht auf Anhieb, was denn nun i, n und c sind oder Edit1, Edit2 usw.

[EDIT] Zu langsam [/EDIT]

MfG Dalai

remo.lieb 30. Nov 2015 23:58

AW: Delphi _ Button öfter benutzen
 
Viele Dank ! Ich habe die Werte in der Startprozedur auf 1 gesetzt dann passt alles. Danke!:)

Medium 1. Dez 2015 00:00

AW: Delphi _ Button öfter benutzen
 
Schau dir dennoch bitte mein Edit an, dass ich zwischenzeitlich in meinem alten Beitrag gemacht habe.

uligerhardt 1. Dez 2015 07:54

AW: Delphi _ Button öfter benutzen
 
Zitat:

Zitat von remo.lieb (Beitrag 1323016)
zurzeit benutze ich Delphi 7 mit freier Lizenz.

Wot?

Sherlock 1. Dez 2015 08:14

AW: Delphi _ Button öfter benutzen
 
Zitat:

Zitat von uligerhardt (Beitrag 1323027)
Zitat:

Zitat von remo.lieb (Beitrag 1323016)
zurzeit benutze ich Delphi 7 mit freier Lizenz.

Wot?

Der Teil beschäftigt mich auch mehr als alles andere...

Sherlock

himitsu 1. Dez 2015 09:04

AW: Delphi _ Button öfter benutzen
 
Hab's nicht mehr im Kopf, da ich diese grauenhafte Komponente nicht mehr benutze.
RowCount und ColCount ändern nur den sichbaren Anzeigebereich,
aber die Größe des internen Datenspeichers mußte man zusätzlich auch noch anpassen.


[OT und dann Schluß] "Personal" (lag z.B. mal gratis einigen Zeitschriften bei und wird immernoch oft in Schulen weitergegeben ... D5 oder D7 Personal)
Ist fast wie die "Explorer"-Editionen, die es mal gab.

Und tut mir Leid, aber SSL/Edu-Editionen kann man vergessen.

p80286 1. Dez 2015 13:25

AW: Delphi _ Button öfter benutzen
 
Zitat:

Zitat von himitsu (Beitrag 1323037)
[OT und dann Schluß] "Personal" (lag z.B. mal gratis einigen Zeitschriften bei und wird immernoch oft in Schulen weitergegeben ... D5 oder D7 Personal)
Ist fast wie die "Explorer"-Editionen, die es mal gab.

Und tut mir Leid, aber SSL/Edu-Editionen kann man vergessen.

kommt darauf an was Du tun willst. Die DB-Anbindung gibt es nicht, dafür benötigt man die Prof. Version. Aber der Debugger ist dabei (wenn ich mich richtig erinnere)

Gruß
K-H

himitsu 1. Dez 2015 13:35

AW: Delphi _ Button öfter benutzen
 
Debugger ist da, aber es ist im Prinzip verboten "benutzbare" Programme zu schreiben.
Man darf damit erstellte Programme/Quellcodes praktisch nicht weitergeben und "produktiv" benutzen darf man die damit erstellten Programme auch nicht.
> die "Lehr"-Editionen sind nur zum Lernen


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 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