Autor |
Beitrag |
ChrisCross
      
Beiträge: 124
Erhaltene Danke: 12
Windows 10 64 bit
Delphi XE6 Starter
|
Verfasst: Fr 28.09.12 07:18
Hallo,
Ich habe ein Kassenprogramm erstellt. Es speichert viele Werte vielen Variablen. Am Schluss nach dem Bezahlvorgang soll das Programm nach klick auf einen Button von vorne beginnen. Leider müsste ich alle Variablen den Wert 0 zuweisen. Ich habe jetzt das so eingebaut: close; und dann das Programm erneut aufgerufen, damit alle Variablen gelöscht sind. Kennt jemand einen Befehl der das Programm in den Ursprungszusatzt nach dem Kompelieren zurücktsetzt (Variablen sind noch keine Werte zugewiesen)?
Danke
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Fr 28.09.12 07:48
Ich würde in diesem Fall zum Aufräumen raten, vermutlich gibt es zu viele globale oder Klassenvariablen, wo es einfache Stackvariablen auch tun würden, möglicherweise noch verstreut im ganzen Programm.
Wenn Du mit Kassenvaribalen arbeitest könntest Du gegf. einfach die Klassen freigeben und neu erstellen.
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 28.09.12 08:58
ChrisCross hat folgendes geschrieben : | Ich habe ein Kassenprogramm erstellt. Es speichert viele Werte vielen Variablen. Am Schluss nach dem Bezahlvorgang soll das Programm nach klick auf einen Button von vorne beginnen. Leider müsste ich alle Variablen den Wert 0 zuweisen. Ich habe jetzt das so eingebaut: close; und dann das Programm erneut aufgerufen, damit alle Variablen gelöscht sind. Kennt jemand einen Befehl der das Programm in den Ursprungszusatzt nach dem Kompelieren zurücktsetzt (Variablen sind noch keine Werte zugewiesen)? |
1. Ist dein Kassenprogramm etwa ein Konsolenprogramm? Wenn ja, warum machst du keine richtige Windows-Anwendung?
2. Variablen-Werte sind im Grunde immer definiert, auch wenn du deine Variablen nicht initialisierst. Das bedeutet:
a) Auch wenn du deinen Variablen keinen Ausgangswert mitgibst – das nennt sich Initialisierung –, zeigen diese Variablen beim Abruf irgend einen Wert an. Variablen-Bezeichner zeigen im Grunde immer auf eine bestimmte Speicherstelle, in der der Wert der Variablen steht. Diesen Zeiger besitzen sie auch, wenn du sie nicht initialisierst.
b) Man sollte seine Variablen niemals in einem nicht-initialisierten Zustand belassen.
3. Es zeugt von einem ganz ganz schlechten Programmierstil, irgend einen Programm-Reset durch den Neustart des gesamten Programms herzustellen. Damit zeigst du der Programmierer-Gemeinde hier eigentlich nur, daß du so gut wie keine Ahnung vom Programmieren hast.
4. Bitte zeige uns doch einmal, was du da programmiert hast. Erst dann können Forenmitglieder auch erkennen, worum es wirklich geht und dir gegebenenfalls wertvolle Hinweise liefern, worauf du achten mußt.
|
|
ChrisCross 
      
Beiträge: 124
Erhaltene Danke: 12
Windows 10 64 bit
Delphi XE6 Starter
|
Verfasst: Fr 28.09.12 15:37
Ich bin jetzt dabei, meinen Quellcode zu strukturieren. Hier ersteinmal das "alte Programm":
Einloggen, um Attachments anzusehen!
Zuletzt bearbeitet von ChrisCross am Mi 03.10.12 12:20, insgesamt 2-mal bearbeitet
|
|
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 28.09.12 17:01
ChrisCross hat folgendes geschrieben : | Hier ist mein komplettes Programm. |
Hab ich mir angeschaut. So einen Schrott möchte ich weder kommentieren noch korrigieren. Das "Programm" ist hoffnungslos.
|
|
ChrisCross 
      
Beiträge: 124
Erhaltene Danke: 12
Windows 10 64 bit
Delphi XE6 Starter
|
Verfasst: Fr 28.09.12 17:10
Perlsau hat folgendes geschrieben : | Hab ich mir angeschaut. So einen Schrott möchte ich weder kommentieren noch korrigieren. Das "Programm" ist hoffnungslos. |
Sage das mal meinem Informatiklehrer. Wir haben es im Unterricht zusammen programmiert und sollten es zu Hause verbessern. Außerdem habe ich erst vor drei Tagen mit Delphi angefangen.
|
|
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 28.09.12 17:34
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
Sag es ihm selber. Ich sehe nicht ein, hier die Arbeit eures Lehrers zu machen, und dann auch noch ganz ohne Bezahlung, Urlaubs- und Rentenansprüche. Wenn dein Informatik-Lehrer nicht mehr drauf hat, soll er den Beruf wechseln oder den Informatik-Unterricht fähigeren Kollegen überlassen.
An dem Programm gibt's in der Tat nichts zu verbessern, das muß man neu schreiben. Schau dir zum Vergleich einmal einen halbwegs professionellen Quellcode an. Schau dir diverse Programmier-Richtlinien an. Der Erfolg beim Programmieren hängt neben den Kenntnissen der Programmiersprache nämlich zu einem großen Teil davon ab, daß man
1. seinen Code lesbar und verstehbar formatiert:
Richtlinien zur Formatierung von Delphi Code
2. die Oberfläche bzw. die Bedienerführung sauber und ansprechend gestaltet:
Richtlinien Layout
3. so programmiert, daß man sich damit nicht selber Fallen stellt oder Erweiterungen verunmöglicht:
Richtlinien Programmierstil
4. seinen Code konsequent kommentiert, so daß man ihn auch noch nach Wochen/Monaten/Jahren versteht:
Richtlinien Kommentare
5. aussagefähige Bezeichner für Variablen wählt, so daß man beim Lesen eines Variablen-Namens sofort "ahnt", welche Aufgabe diese Variable zu erfüllen hat:
Richtlinien Namensgebung
Übrigens: Nach drei Tagen der Beschäftigung mit Delphi solltest du dir auf keinen Fall zutrauen, irgend ein Programm schreiben zu können. Ich empfehle dir, wenn du wirklich Delphi lernen willst und nicht nur auf eine gute Benotung scharf bist, um deinen Notendurchschnitt anzuheben, entsprechene Grundlagen-Tutorials durchzuarbeiten. Wenn du zu Hause kein Delphi hast, weil das zu teuer ist, dann installiere dir Lazarus oder CodeTyphon, damit kannst du wunderbar Delphi erlernen, denn beide sind kostenlos.
|
|
Delphi-Laie
      
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: Fr 28.09.12 19:20
ChrisCross hat folgendes geschrieben : | Wer mein Programm ansehen will, kann mich ja anschreiben. |
Wer möchte denn hier was von wem?
Hinweis für einen Neuling: Programme kann man hier auch veröffentlichen, müssen dann an einen Beitrag angehängt werden (als Anhang "hochladen").
Zuletzt bearbeitet von Delphi-Laie am Fr 28.09.12 19:58, insgesamt 1-mal bearbeitet
|
|
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 28.09.12 19:39
Delphi-Laie hat folgendes geschrieben : | ChrisCross hat folgendes geschrieben : | Wer mein Programm ansehen will, kann mich ja anschreiben. |
Wer möchte denn hier was von wem? |
Er hatte sein "Programm" angehängt, nach dem Lesen meiner Kritik wieder entfernt. Da schämte er sich wohl, Anfänger zu sein. So kann das nichts werden. Also ob wir nicht alle mal Anfänger waren. Programmieren muß man sich eben hauptsächlich selbst beibringen, das kann einem keiner abnehmen. Und wer dazu keine Lust hat, der lernt's eben nicht.
Ich hatte mir das "Programm" runtergeladen und kurz angeschaut: Keine aussagekräftigen Komponenten- und Variablen-Bezeichner, Textdatei betrachten via Aufruf der mit .txt verknüpften Anwendung (Windows-Editor), auf einem Form zahlreiche tabellenartig angeordnete Buttons und auf einem anderen ebenso zahlreiche tabellenartig angeordnete Editfelder zur Eingabe von Beträgen und Warenbezeichnungen, also im Grunde nur eine Zeichnung, was Zusammengeklicktes ohne nennenswerte Programmlogik, wie man das von einem Menschen ohne Delphi-Kenntnisse zu erwarten hat. Ich konnte auch keinen Hinweis finden, womit er denn nun eigentlich Probleme hatte. Nach drei Tagen Beschäftigung mit Delphi ist es ja auch kein Wunder, daß er glaubte, er müsse das Programm neu starten, um die Editfelder zu leeren ...
Und natürlich erwartete er, daß man ihm den Code schreibt, damit er eine bessere Note erhält. Ich konnte keine Bereitschaft erkennen, sich in die Programmierung mit Delphi einzuarbeiten. Du kennst das ja, kommt hier immer wieder mal vor ... verzogene Jugendliche eben, die schnell erschrecken, wenn man ihnen etwas konkreter kommt. Gab aber schon um einiges Schlimmere hier, die sofort pampig wurden, da ist die arrogante Feststellung, daß man ihn anschreiben soll, wenn man sein Programm ansehen will, ja noch fast als harmlos einzustufen 
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Fr 28.09.12 19:50
Für mein Empfinden etwas heftig die Reaktionen 
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
Für diesen Beitrag haben gedankt: FinnO, Marc., Mathematiker, Sinspin, Xion, Yogu
|
|
haentschman
      
Beiträge: 285
Erhaltene Danke: 33
DX10 Berlin Professional
|
Verfasst: Fr 28.09.12 20:09
@Perlsau:
...du lehnst dich ganz schön aus dem Fenster. Kommst du auch mit Kritik in deine Richtung klar ? Wollen wir mal deinen Quellcode zerpflücken ?
Ich fange mal an:
1. du predigst Styleguide und rückst 5 Zeichen (Tabulator) ein
2. merkwürdige Einrückungen der := z.B.
3. deine GUI ist Geschmackssache aber nicht konsistent (mal große, mal kleine Buttons)
4. merkwürdige Großschreibung (manchmal aber auch klein)
...wird fortgesetzt.

|
|
mandras
      
Beiträge: 432
Erhaltene Danke: 107
Win 10
Delphi 6 Prof, Delphi 10.4 Prof
|
Verfasst: Fr 28.09.12 20:35
Gestern war das Programm noch da, heute hatte ich etwas Zeit es mir anzusehen und es ist weg.
Ich werde nun nicht den Autor anschreiben aber ein wenig neugierig bin ich doch warum das Programm solche Reaktionen auslöst.
Vor allem - falls es im wesentlichen vom Informatiklehrer stammt.
Chris, stell' es einfach nochmal ein ich denke es wäre für manche hilfreich sich ein eigenes Urteil zu bieten, evtl. auch über die Qualität des Informatik-Unterrichts (bei mir liegt das über 20 Jahre zurück...)
|
|
glotzer
      
Beiträge: 393
Erhaltene Danke: 49
Win 7
Lazarus
|
Verfasst: Fr 28.09.12 21:14
(ja ich weiß ,dass das Offtopic ist, gerne in anderen Thread auslagern)
Informatik "Untericht" kann man das was man auf einer normalen deutschen Schule bekommt nicht nennen.
der Leerplan ist ja noch halbwegs ok, aber die Umsetzung (wenigstens bei uns) ist ein Witz.
2/3 der Lehrer haben von einem PC ungefähr das Wissen was man durchs lesen der Bedienungsanleitung hat, und die sollen dann den Schülern etwas beibringen.
Alles in allem sieht das dann so aus:
5-7: Bedienung von Word,PowerPoint,Paint etc
7-8: "Programieren" lernen, bei uns war das Robot Karol (-> google), von den Schülern hat da keiner wirklich etwas verstanden, der Lehrer noch weniger.
8-9: Tabellen in Excel mit Formeln etc, wehe man verwendet irgendeine Funktion die der Lehrer nicht kennt, dann ist erstmal 2 Stunden diskutieren angesagt ob das denn überhaupt in Ordnung ist, obwohl es bestens funktioniert. Später dann extrem einfaches SQL, eigentlich nur ein bisal rumspielen, wenn man Sachen wie "COUNT (*)" verwendet, wusste der Lehrer schon nicht mehr was los ist...
10: Java, die einfachsten Sachen, hier hatten wir aber wenigstens das erste mal einen Lehrer der von Informatik mehr wusste als das was man in dieser und der nächsten Stunde durchnehmen will.
Q11: noch mehr Java, eigentlich nur Datenstrukturen, Verkettete Listen, Bäume etc.
Q12: Rechner Theorie (Turingmaschine, Kellermaschine etc)
Mit das größte Problem sind meiner Meinung nach hier aber die Lehrer die sehr oft Deutschlehrer mit kurzer zusatzausbildung sind. (ich erinner mich an einen bestimmten der in der 7. Klasse 2 Stunden damit verbracht hat wie man sich am PC anmeldet während die schüler Flash Games gezockt haben...)
Wenn bei soetwas schon mal irgendetwas rauskommt was der Compiler frisst ist es schon ein Wunder...
_________________ ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht
Zuletzt bearbeitet von glotzer am Fr 28.09.12 23:02, insgesamt 1-mal bearbeitet
|
|
Mathematiker
      
Beiträge: 2622
Erhaltene Danke: 1448
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Fr 28.09.12 21:53
Hallo Glotzer,
glotzer hat folgendes geschrieben : | (ja ich weiß ,dass das Offtopic ist, gerne in anderen Thread auslagern) |
Hier sind wir uns fast einig! Allerdings ist diese Diskussion mehr als flüssig, sie ist überflüssig, da immer wieder geführt.
glotzer hat folgendes geschrieben : | Informatik "Untericht" kann man das was man auf einer normalen Deutschen Schule bekommt nicht nennen. |
Aha.  Jeder, der irgendwann einmal in irgendeiner Schule war, kann natürlich über die "Deutsche Schule" (warum Deutsch groß?) qualifiziert mitreden, also jeder!
Und deshalb schlussfolgerst Du
glotzer hat folgendes geschrieben : | Mit das größte Problem sind meiner Meinung nach hier aber die Lehrer ... |
Na endlich! Ich habe schon darauf gewartet!
Kann sich ein Abiturient den eigenen Namen nicht merken, pinkelt ein Zehnklässner noch ein oder halten pubertierende Schülerinnen Pythagoras für eine ansteckende Krankheit dann ist der Lehrer schuld.
Er ist an allem schuld, auch an der Sintflut, der globalen Erwärmung und dass Kenny (fast) jede Folge sterben muss.
Es reicht! Höre endlich auf, alles auf uns(!) Lehrer zu schieben.
Die wahre Ursache für die katastrophalen Schulsituationen ist die Bildungspolitik!
glotzer hat folgendes geschrieben : | ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht |
Es fehlt nur noch, dass auch daran Dein Deutschlehrer schuld ist.
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Zuletzt bearbeitet von Mathematiker am Sa 29.09.12 11:08, insgesamt 1-mal bearbeitet
|
|
glotzer
      
Beiträge: 393
Erhaltene Danke: 49
Win 7
Lazarus
|
Verfasst: Fr 28.09.12 23:05
Hallo Mathematiker,
"irgendwann" ist gut, das vergnügen hab ich leider noch immer. Allerdings befürchte ich das mein letzter post nicht sooooo gut
formuliert war und du vieleicht etwas in den falschen Hals bekommen hast, das tut mir leid. Mein Post war ein keiner weiße beleidigend gegenüber den Lehrern gemeint, das sind auch nur arme Schweine die ausbaden müssen was wo anders schief gelaufen ist. Aber in sachen Lehrer ist es leider wahr: es gibt zu wenig Info Lehrer. Bei uns gibt es 5 Info Lehrer, wovon 3 Deutschlehrer mit Zusatzkurs und einer Physik Lehrer ist. Nur einer ist wirklich ein Informatik Lehrer. Dafür können diese Leute nichts und es ist auch nicht beleidigend gemeint.
Aber wie ich vieleicht schon früher hätte schreiben sollen: das ist NUR meine persönliche Meinung und muss in keiner weiße die Tatsachen wiederspiegeln.
Allerdings wird das langsam so offtopic, dass wir das wohl besser in PMs weiter machen. Falls da Interesse von dir besteht, gerne anschreiben 
_________________ ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht
|
|
ChrisCross 
      
Beiträge: 124
Erhaltene Danke: 12
Windows 10 64 bit
Delphi XE6 Starter
|
Verfasst: Mi 03.10.12 12:24
Ich wollte meine Frage noch einmal besser stellen:
Wenn man auf den entsprechenden Button klick wird in der nächsten Form der Preis ausgegeben. Dieser wird dann zusammengerechnet und ausgegeben. Am Ende müsste ich aber
50 x label1.caption := 0,00; usw. schreiben, damit alle Preise erstmal 0,00 Euro sind, bis zum Buttonklick. Deshalb habe ich das Programm beendet und wiederhohlt. Gibt es eine bessere und einfachere Möglichkeit?
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 03.10.12 12:30
Suchst du vielleicht FindComponent? 
Für diesen Beitrag haben gedankt: ChrisCross
|
|
ChrisCross 
      
Beiträge: 124
Erhaltene Danke: 12
Windows 10 64 bit
Delphi XE6 Starter
|
Verfasst: Mi 03.10.12 12:35
Danke. Genau das habe ich gesucht! 
|
|
Mathematiker
      
Beiträge: 2622
Erhaltene Danke: 1448
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Mi 03.10.12 12:45
Hallo ChrisCross,
ich habe mir Dein (wieder vorhandenes) Programm angesehen.
Unabhängig vom Tip Jaenickes sehe ich noch mehrere Probleme.
Mein erster Vorschlag wäre, dass Du die vielen Variablen zaehler zu einem Feld zusammenfasst:
Delphi-Quelltext 1:
| var zaehler:array[1..48] of integer; |
Damit hast Du auch die Möglichkeit, alle zaehler-Variablen auf 0 zu setzen, z.B.
Delphi-Quelltext 1:
| for i:=1 to 48 do zaehler[i]:=0; |
Die Grundinitialisierung dieser Variablen fehlt ohnehin. Bei einem Programmstart glaubst Du, dass alle Integer-Variablen gleich Null sind, dass muss aber nicht sein. Deshalb sollte die von mir genannte Schleife in der Activate-Methode Deines Fensters stehen.
Ähnliches gilt für die vielen Variablen Menge, Menge_r, Preis und Preis_r. Änderst Du dies auf Felder, so wird es wesentlich übersichtlichter.
Und all diese Felder kannst Du anschließend mit einer einzigen Methode schnell wieder auf 0 setzen.
Weiterhin: Für die Eingabezeilen in der Form2 könnte ich mir auch eine Komponente TStringgrid vorstellen. Deren Eingabezellen kannst Du dann über die Zeilen- und Spaltennummer ansprechen und reduzierst so den Quelltext erheblich.
Auf Jaenickes Hinweis zu FindComponent kam von Dir:
ChrisCross hat folgendes geschrieben : | Danke. Genau das habe ich gesucht!  |
Außerdem hast Du Deine Frage als "gelöst" markiert.  Ich glaube nicht, dass FindComponent alle Probleme Deines Programms löst.
Übrigens ist es mir nicht gelungen, Deinen Quelltext zu übersetzen. Irgendetwas stimmt mit der dfm-Datei der Unit4 nicht.
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 03.10.12 15:02
Mathematiker hat folgendes geschrieben : | Die Grundinitialisierung dieser Variablen fehlt ohnehin. Bei einem Programmstart glaubst Du, dass alle Integer-Variablen gleich Null sind, dass muss aber nicht sein. |
Doch, wenn es sich um Felder des Objekts oder globale Variablen handelt. Die werden vom Compiler mit 0 bzw. nil usw. initialisiert. Das ist dokumentiertes Verhalten, deshalb kann man sich darauf auch verlassen.
docwiki.embarcadero....dio/XE3/de/Variablen hat folgendes geschrieben: | Wenn Sie eine globale Variable nicht explizit initialisieren, wird sie vom Compiler mit 0 initialisiert. Objektinstanzdaten (Felder) werden auch mit 0 initialisiert. Auf der Wiin32-Plattform ist der Inhalt von lokalen Variablen so lange undefiniert, bis ein Wert zugewiesen wird. |
|
|
|