Autor |
Beitrag |
Fredy
      
Beiträge: 57
Win Vista Ultimate
|
Verfasst: Do 08.01.09 21:27
Hallo Liebe Leute,
Gruppe A / 4 Personen = 20 Minuten: 895,00 €
= 30 Minuten: 1.250,00 €
/ 6 Personen = 20 Minuten: 1.150,00 €
= 30 Minuten: 1.590,00 €
/ 12 Personen = 20 Minuten: 2.400,00 €
= 30 Minuten: 3.100,00 €
= Komplett: 6.900,00 €
Ich hab gerade ein riesen Problem in meinem Delphie Projekt mit Checkboxen.
Ich hab es so aufgebaut Gruppe A kann man über eine checkbox auswählen wenn man zu dieser Gruppe gehört.
Wenn man diese Checkbox gechecked hat dann folgt die nächste wo man die Personen auswählt wie viel sie waren.
Dadrauf folgen dann zwei oder auch drei checkboxen bei denen man die Minuten oder Komplett auswählt.
So weit so gut aber jetzt soll nur ein Betrage in eine Variable Namens Euro eingetragen werde.
Nehmen wir mal an ich bin in Gruppe A und wir waren 4 Personen und wir haben 20 Minuten gebraucht. Dann soll in der variable Euro der Betrag 895 € stehen.
Natürlich könnte man alles so machen IF GruppeA.checked and 4 Personen.checked and 20 Minuten-checked aber das wäre ja sehr aufwendig.
Gibt es da noch eine andere Lösung ?
aso es wäre noch zu erwähnen das es checkboxen bleiben sollten =)
Vielen Vielen Dank
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 08.01.09 22:05
CheckBoxen sind da zwar sehr abenteuerlich, aber wenn es so sein muss und keine sinnvollere Variante möglich ist...
Gibt es denn eine Berechnung für die Zahlen oder sind die willkürlich festgelegt? Bei ersterem könnte man diese Berechnung dann benutzen, bei letzterem könnte man ein konstantes mehrdimensionales Array verwenden, in dem die Werte fest drin stehen.
|
|
Fredy 
      
Beiträge: 57
Win Vista Ultimate
|
Verfasst: Do 08.01.09 22:14
Die Eurobeträge sind fix von unserem Lehrer vorgegeben worden.
Sie liegen auch keiner Berechnung zu Grunde.
Wie würde es den ca. mit einem Array aussehen ? / ich weis so groß wie man ein Array macht aber zu dieser Aufgabe kann ich da kein Bezug herstellen.
Oder ich steht gerade auf dem Schlauch.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 08.01.09 22:45
Du kannst die Beträge konstant einfügen: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| const EuroValues: array[1..2, 1..4] of Currency = ( (100, 300, 400, 500), (150, 350, 500, 600) ); | jetzt kannst du auf die Beträge mit EuroValues[1][4] für Gruppe 1 und 4 Personen zugreifen. Welcher Arrayeintrag zu welcher CheckBox gehört kannst du ja in Tag schreiben und dann z.B. beim Auswählen speichern.
Ein Beispiel liegt im Anhang. Das ist alles keine schöne Vorgehensweise und ziemlich sinnfrei, weil CheckBoxes da einfach nicht passend sind, aber wenn du die benutzen musst, dann ist das noch die kürzeste Variante.
Einloggen, um Attachments anzusehen!
|
|
Fredy 
      
Beiträge: 57
Win Vista Ultimate
|
Verfasst: Do 08.01.09 23:24
Zitat: | EuroValues: array[1..7, 1..2] of Currency = (
// Gruppe 1:
(895, 1250),
// Gruppe 2
(1150, 1590)
// Gruppe 3
(2400, 3100)
// Gruppe 4
(950, 1430)
// Gruppe 5
(1240, 1750)
// Gruppe 6
(750, 1300)
// Gruppe 7
(1400, 1990)
); |
Würde das dann mit 7 Gruppen ( in meinem Fall die Personen) und 1..2 ( in meinem Fall die Minuten ) so aussehen ? (irgendwie funktioniert dies nicht)
Bleiben dann die anderen Befehle in den Checkboxen gleich ?
Muss ich dann den Befehl von der "1 Person" Checkbox ( bei dir) auf alle anderen übertragen ?
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 08.01.09 23:27
Du hast ja drei Gruppen von CheckBoxen irgendwie, also brauchst du auch ein dreifach geschachteltes Array, nicht nur ein zweifaches wie im Beispiel. Gruppe, Personenanzahl, Minuten.
|
|
Fredy 
      
Beiträge: 57
Win Vista Ultimate
|
Verfasst: Do 08.01.09 23:40
habs mal ein Ausschnitt eingescanned ohne meine Vereinfachung. Wenn ich das richtig sehe dann muss ich das so machen oder?
Ich steig momentan nicht ganz dahinter.  ohne das Komplette das lass ich mal weg sonst wird es noch komplizierter
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| EuroValues: array[1..3, 1..7, 1..2] of Currency = ( (895, 1250), (1150, 1590) (2400, 3100) (950, 1430) (1240, 1750) (750, 1300) (1400, 1990) ); |
Moderiert von Narses: Bild als Anhang hochgeladen
Einloggen, um Attachments anzusehen!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 08.01.09 23:53
Und das sollt ihr mit CheckBoxen machen?
Da gibts ja vermutlich noch einige Möglichkeiten mehr, oder? Und du benutzt jetzt so viele CheckBoxen ganz rechts wie in der Liste zu sehen? Also 7 + 4 + 4 = 13 ganz rechts? Und 23 insgesamt für den Ausschnitt?
Weil wenn du das so machst, dann kannst du auch einfach in die Tag-Eigenschaft dieser rechten CheckBoxen den Betrag schreiben und den direkt verwenden.
Das Array wäre sinnvoll, wenn du nach der Auswahl der ersten CheckBox für den Tanz entsprechend die nächsten einblendest. Aber mir ist eben gerade eingefallen, dass du das vielleicht gar nicht so machst. Als ich nämlich gesehen habe, dass die Optionen weiter rechts auch noch unterschiedlich sind (Paare, Personen, ...).
Trotz allem sind CheckBoxen dafür nicht gedacht und es macht alles unnötig kompliziert. Aber für die verkorkste Aufgabenstellung kannst du ja nix.  Bin ich froh, dass unsere Lehrerin wusste wofür welche Komponenten gedacht sind. 
|
|
Fredy 
      
Beiträge: 57
Win Vista Ultimate
|
Verfasst: Fr 09.01.09 00:03
Waren einige Checkboxen
in der Aufgabenstellung steht Checkboxen und hab auch einiges dadrauf angepasst aber okay.
Was würdest du den Vorschlag was ich verwenden soll ? / dann lern ich wenigstens wie es richtig gemacht wird und hab ein Programm das Funktioniert.
|
|
Tarry
      
Beiträge: 213
Erhaltene Danke: 1
|
Verfasst: Fr 09.01.09 00:15
Fredy hat folgendes geschrieben : | Waren einige Checkboxen
in der Aufgabenstellung steht Checkboxen und hab auch einiges dadrauf angepasst aber okay.
Was würdest du den Vorschlag was ich verwenden soll ? / dann lern ich wenigstens wie es richtig gemacht wird und hab ein Programm das Funktioniert. |
Hi,
ich haette wahrscheinlich RadioButtons, fuer die Gruppen und ne RadioGroup fuer die Personen benutzt.
Dann kannst du einfach mit RadioGroup1.ItemIndex herausfinden, wieviele Personen ausgewaehlt wurden.
Gruss,
Thomas
_________________ "Es gibt zwei Dinge, die unendlich sind. Das Universum und die menschliche Dummheit. Beim Universum bin ich mir noch nicht ganz sicher." -Albert Einstein
Zuletzt bearbeitet von Tarry am Fr 09.01.09 00:15, insgesamt 1-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 09.01.09 00:15
Ich würde eigentlich zumindest RadioButtons verwenden, denn man darf ja wohl nicht mehrere Tänze, etc. auswählen.
Das wäre immer noch nahe an der Aufgabenstellung, du müsstest dich aber nicht darum kümmern, dass nur ein Eintrag ausgewählt ist.
Da das aber in der Aufgabenstellung explizit mit CheckBoxen steht, solltest du es wohl lieber damit machen, vielleicht
Ich habe da auch eine Idee. Und zwar:
Ein Array, in dem die Optionen mit deren Namen und den Werten stehen, dann kannst du die CheckBoxen dementsprechend ein- und ausblenden wie Optionen vorhanden sind.
|
|
Fredy 
      
Beiträge: 57
Win Vista Ultimate
|
Verfasst: Fr 09.01.09 00:30
am besten wäre es schon mit den Checkboxen dann müsste ich den Rest der auf die Checkboxen zugreif nicht ändern.
@ jaenicke ich komm gerade nicht mit wie du (ich hoffe das "du" geht in Ordnung) die Idee verwirklichen willst ? 7 bzw. wie die Ausführung funktionieren soll.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 09.01.09 01:24
Ganz fertig ist das nicht, da fehlt noch der vorletzte Schritt und die restlichen Optionen.
Das versuch erstmal nachzuvollziehen. Wenn du etwas nicht verstehst, dann frag. Wenn du verstanden hast, was da passiert, dann müsstest du den Rest ergänzen können.
Fredy hat folgendes geschrieben : | ich hoffe das "du" geht in Ordnung |
Natürlich 
Einloggen, um Attachments anzusehen!
|
|
Fredy 
      
Beiträge: 57
Win Vista Ultimate
|
Verfasst: Fr 09.01.09 19:59
Ich mach das Programm erst mal mit den if's dass dies funktioniert danach probier ich dann deine lösung aus.
Versteh einige Sachen nicht ganz.
Meine Fragen stell ich dir dann.
|
|
Fredy 
      
Beiträge: 57
Win Vista Ultimate
|
Verfasst: Fr 09.01.09 21:53
Neues Problem ich habe die Variable Kosten, in ein StringGrid einlesen lassen das funktioniert auch, nur zeigt er mir wenn ich 4 Personen (frmTanz.rb_4.Checked) und 20 Minuten (frmTanz.cb_20M.Checked) auswähle, nicht die 895 an sondern die 1990 von der letzten Zeile.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| IF frmTanz.rb_4.Checked = true and frmTanz.cb_20M.Checked = true then Kosten :=895; IF frmTanz.rb_4.Checked = true and frmTanz.cb_30M.Checked = true then Kosten :=1250; IF frmTanz.rb_6.Checked = true and frmTanz.cb_20M.Checked = true then Kosten :=1150; IF frmTanz.rb_6.Checked = true and frmTanz.cb_30M.Checked = true then Kosten :=1590; IF frmTanz.rb_12.Checked = true and frmTanz.cb_20M.Checked = true then Kosten :=2400; IF frmTanz.rb_12.Checked = true and frmTanz.cb_30M.Checked = true then Kosten :=3100; IF frmTanz.rb_12.Checked = true and frmTanz.cb_KAP.Checked = true then Kosten :=6900; IF frmTanz.rb_3P.Checked = true and frmTanz.cb_1A.Checked = true then Kosten :=950; IF frmTanz.rb_3P.Checked = true and frmTanz.cb_2A.Checked = true then Kosten :=1430; IF frmTanz.rb_5P.Checked = true and frmTanz.cb_1A.Checked = true then Kosten :=1240; IF frmTanz.rb_5P.Checked = true and frmTanz.cb_2A.Checked = true then Kosten :=1750; IF frmTanz.rb_12a.Checked = true and frmTanz.cb_1A.Checked = true then Kosten :=750; IF frmTanz.rb_12a.Checked = true and frmTanz.cb_2A.Checked = true then Kosten :=1300; IF frmTanz.rb_20a.Checked = true and frmTanz.cb_1A.Checked = true then Kosten :=1400; IF frmTanz.rb_20a.Checked = true and frmTanz.cb_2A.Checked = true then Kosten :=1990; |
Kann doch eigentlich nicht sein oder mach ich was falsch in dem Teil der Programmierung ?
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 09.01.09 22:00
Vielleicht sind die auch noch ausgewählt? (Ob die CheckBoxen unsichtbar sind spielt dabei ja keine Rolle.)
Ein großer Fehler ist jedenfalls das = true überall. Was Delphi jetzt macht ist das: Delphi-Quelltext 1:
| IF ((frmTanz.rb_4.Checked = true) and frmTanz.cb_20M.Checked) = true then Kosten := 895; | Was du aber willst ist ja Delphi-Quelltext 1:
| IF frmTanz.rb_4.Checked and frmTanz.cb_20M.Checked then Kosten := 895; | Mehr dazu findest du auch hier:
www.delphi-treff.de/...olean-werten/page/4/
Zudem solltest du else benutzen. Dann werden die anderen Optionen gar nicht mehr durchlaufen.
|
|
Fredy 
      
Beiträge: 57
Win Vista Ultimate
|
Verfasst: Fr 09.01.09 22:05
das = true war die Lösung überall weg und schon funktionierts Danke 
|
|
Fredy 
      
Beiträge: 57
Win Vista Ultimate
|
Verfasst: Fr 09.01.09 22:45
Könnte mir jemand sagen was ich hier (frmMenu.Label3Click;) noch vervolständigen muss das er mir den OnClick "Befehl" ausführt von einem anderen Label aus ?
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 09.01.09 22:47
Den Parameter angeben, also entweder den anderen Label oder Sender. Label3Click(Sender) z.B.
Aber wenn du nur diesen OnClick-Aufruf in dem OnClick hast, kannst du auch direkt Label3Click bei mehreren Labeln als OnClick zuweisen.
|
|
Fredy 
      
Beiträge: 57
Win Vista Ultimate
|
Verfasst: Fr 09.01.09 23:48
Funktioniert Super / du weist ganz schön viel.
noch eine Frage  Ich hoffe ich nerv nicht zu sehr-
Wenn ich dies habe wie kann ich da noch die funktion einbauen wenn man No drückt ?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| if MessageDlg('Sie möchten die Tanzgruppe für ' + FormatFloat('#,##0.00 €', Gesamtsumme) + ' bestellen ?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin frmTanz.Hide; frmRechnung.Show; end; |
|
|
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.
Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.
|
|