Hilfe für Projekt benötigt
-
- Beiträge: 3
- Registriert: Di 10. Mär 2020, 18:56
Hilfe für Projekt benötigt
Im Rahmen eines Schulprojektes arbeite ich derzeit an einem Programm, welches als Kassengerät arbeitet, d.h. Bestellungen stellt & speichert, sowie Rechnungen ausstellen kann.
Mir und meinem Projektpartner gefällt dabei nicht, wie das Programm gespeicherte Bestellungen ausspuckt und wir hatten gehofft, hier Hilfe zu finden.
Speicherung erfolgt in einem Feld (12 Tische, bis zu 5 Bestellungen), Bestellung ein- und (nach speichern & aufrufen per Buttons) ausgeben erfolgen in derselben Listbox;
allerdings gibt das Programm alles in eine Zeile aus, wenn man eine gespeicherte Bestellung ausgeben lässt. Wir hätten aber gern einen Zeilenumbruch pro Item.
Leider hat der Befehl #13 nicht geholfen.
Wenn jemand weitere Informationen braucht, wie Quelltext, gebe ich diese gerne aus - nachdem ich weiß wie man das in ein Thread eingibt.
Mir und meinem Projektpartner gefällt dabei nicht, wie das Programm gespeicherte Bestellungen ausspuckt und wir hatten gehofft, hier Hilfe zu finden.
Speicherung erfolgt in einem Feld (12 Tische, bis zu 5 Bestellungen), Bestellung ein- und (nach speichern & aufrufen per Buttons) ausgeben erfolgen in derselben Listbox;
allerdings gibt das Programm alles in eine Zeile aus, wenn man eine gespeicherte Bestellung ausgeben lässt. Wir hätten aber gern einen Zeilenumbruch pro Item.
Leider hat der Befehl #13 nicht geholfen.
Wenn jemand weitere Informationen braucht, wie Quelltext, gebe ich diese gerne aus - nachdem ich weiß wie man das in ein Thread eingibt.
-
- Lazarusforum e. V.
- Beiträge: 999
- Registriert: Do 17. Apr 2008, 01:59
- OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
- CPU-Target: Intel i7-10750 64Bit
- Wohnort: Freiburg
Re: Hilfe für Projekt benötigt
Das sollte euch weiter helfen:
In the System.pas (which automatically gets used) the following is defined:
So if you want to make your TLabel wrap, make sure AutoSize is set to true, and then use the following code:
In the System.pas (which automatically gets used) the following is defined:
Code: Alles auswählen
const
sLineBreak = {$IFDEF LINUX} AnsiChar(#10) {$ENDIF}
{$IFDEF MSWINDOWS} AnsiString(#13#10) {$ENDIF};
Code: Alles auswählen
label1.Caption := 'Line one'+sLineBreak+'Line two';
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Hilfe für Projekt benötigt
Hallo!
MacWombies Lösung hilft zwar bei Label, aber nicht bei ner Listbox.
Wenn Du mehr Zeilen in einer Listbox haben möchtest, dann must Du auch die einzelnen Items auseinandernehmen und den jeweiligen Teil als neuen Item einfügen.
Oder möchtest Du nur, dass der Ausdruck vernünftig aussieht?
Dann müsste man den jeweiligen Item vor dem Drucken auseinander nehmen.
Kleine Menge an Code: Hier reintippen, markieren, bei der ComboBox den 2. Eintrag "Frepascal/Lazarus" nehmen.
Größere Projekte im Dateianhang - unten, neben Optionen.
Winni
MacWombies Lösung hilft zwar bei Label, aber nicht bei ner Listbox.
Wenn Du mehr Zeilen in einer Listbox haben möchtest, dann must Du auch die einzelnen Items auseinandernehmen und den jeweiligen Teil als neuen Item einfügen.
Oder möchtest Du nur, dass der Ausdruck vernünftig aussieht?
Dann müsste man den jeweiligen Item vor dem Drucken auseinander nehmen.
Kleine Menge an Code: Hier reintippen, markieren, bei der ComboBox den 2. Eintrag "Frepascal/Lazarus" nehmen.
Größere Projekte im Dateianhang - unten, neben Optionen.
Winni
-
- Beiträge: 3
- Registriert: Di 10. Mär 2020, 18:56
Re: Hilfe für Projekt benötigt
Danke erstmal für die schnelle Antwort. Diesen zitierten Teil verstehe ich leider nicht, könntest du genauer beschreiben was du damit meintest?Winni hat geschrieben:Oder möchtest Du nur, dass der Ausdruck vernünftig aussieht?
Dann müsste man den jeweiligen Item vor dem Drucken auseinander nehmen.
Unsere Benutzeroberfläche habe ich als BIld eingefügt, um den Code vlt besser zu verstehen. Unten ist jetzt, wie die Bestellungen gespeichert und ausgegeben werden.
Code: Alles auswählen
//Bestellung aufnehmen
//Wasser
if CheckGroup2.Checked[0]
then listbox1.items.add('Still ');
if CheckGroup2.Checked[1]
then listbox1.items.add('Medium ');
if CheckGroup2.Checked[2]
then listbox1.items.add('Classic ');
//Softdrinks
if CheckGroup1.Checked[0]
then listbox1.items.add('Bitter Lemon ');
if CheckGroup1.Checked[1]
then listbox1.items.add('Cola ');
if CheckGroup1.Checked[2]
then listbox1.items.add('Fanta ');
//Bestellung speichern
e:=0;
i:=strtoint(edit1.text);
bestellung[i,e]:=listbox1.items.text;
e:=e+1;
Code: Alles auswählen
//Bestellung aufrufen
listbox1.clear;
i:=strtoint(edit1.text);
e:=0;
repeat
begin
listbox1.items.add(bestellung[i,e]);
e:=e+1;
end;
until e=6;
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Hilfe für Projekt benötigt
Das ganze ist vom Anwendungsdesign her etwas unglücklich ausgeführt.
Eine Bestellung kann ja mehr als ein Getränk beinhalten und was machst du, wenn an einem Tisch 2 Bier und 4 Wasser bestellt wurden? (oder eher andersrum)
Ich würde für die Bestellungen eine separate Klasse definieren und diese in einer TObjectList halten.
Jede Bestellung enthält eine weitere ObjectList mit den einzelnen Getränken, deren Menge und Preis.
Eine Bestellung kann ja mehr als ein Getränk beinhalten und was machst du, wenn an einem Tisch 2 Bier und 4 Wasser bestellt wurden? (oder eher andersrum)
Ich würde für die Bestellungen eine separate Klasse definieren und diese in einer TObjectList halten.
Jede Bestellung enthält eine weitere ObjectList mit den einzelnen Getränken, deren Menge und Preis.
-
- Beiträge: 3
- Registriert: Di 10. Mär 2020, 18:56
Re: Hilfe für Projekt benötigt
An fliegermichl
Es stimmt, diese Frage hab ich mir auch schon gestellt. Allerdings haben wir - im Rahmen des Schulunterrichts - nicht mit ObjectList gearbeitet.
Gerade werden die Bestellungen noch in dreidimensionalen array gespeichert, d.h. Tisch, Bestellnummer + Preis einer Bestellung.
Das Problem hätte ich also nur lösen können, indem z.B. 4 Bier jedes einzeln berechnet werden - oder mehrere Biersorten zur Preisrechnung checked werden.
Wie würde denn der Code aussehen, würde ich TObjectList verwenden? Finde gerade keine guten Beispiele über Big Brother Google.
Es stimmt, diese Frage hab ich mir auch schon gestellt. Allerdings haben wir - im Rahmen des Schulunterrichts - nicht mit ObjectList gearbeitet.
Gerade werden die Bestellungen noch in dreidimensionalen array gespeichert, d.h. Tisch, Bestellnummer + Preis einer Bestellung.
Das Problem hätte ich also nur lösen können, indem z.B. 4 Bier jedes einzeln berechnet werden - oder mehrere Biersorten zur Preisrechnung checked werden.
Wie würde denn der Code aussehen, würde ich TObjectList verwenden? Finde gerade keine guten Beispiele über Big Brother Google.
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Hilfe für Projekt benötigt
TObjectlist ist ja nur eine Möglichkeit. Man kann das auch herkömmlich mit Records lösen.
Die erste Überlegung ist ja, wass kann an einem Tisch bestellt werden?
Verschiedene Getränke in unterschiedlichen Mengen.
Ich würde diese Datenstruktur unabhängig von der Oberfläche erst mal definieren.
Ihr habt also verschiedene Getränkearten.
Für jede dieser Getränkearten gibt es eine Reihe von Getränken und die kann man auch wieder als eine Menge/Set beschreiben.
Um eine Bestellung jetzt definieren zu können, müssen die Getränkearten und die speziellen Getränke irgendwie gekoppelt werden.
Hier bietet sich ein sogenannter varianter Record an
Der Record TBestellung beinhaltet jetzt 4 Informationen.
1. TischNr.
2. Die Menge
3. Die Getränkeart
4. Das Getränk.
[Edit]
Euer Ansatz mit einem 3 dimensionalen Array würde prinzipiell auch gehen, ist aber etwas unglücklich.
Ein Vergleich: Der Chef will seine Sekretärin anweisen, einen Kunden anzurufen. Anstatt ihr einen Zettel mit dem Namen und der Telefonnummer zu geben, gibt er ihr ein tausenseitiges Telefonbuch mit dem Hinweis,
daß der entsprechende Eintrag markiert ist. Jetzt muß sich die arme Sekretärin durch 1000 Seiten wühlen um die richtige Telefonnummer zu finden.
Die erste Überlegung ist ja, wass kann an einem Tisch bestellt werden?
Verschiedene Getränke in unterschiedlichen Mengen.
Ich würde diese Datenstruktur unabhängig von der Oberfläche erst mal definieren.
Ihr habt also verschiedene Getränkearten.
Code: Alles auswählen
type
// Definiert ein Set von Getraenkearten
TGetraenkearten = (gaWasser, gaSoftdrinks, gaSaefte, gaBiere, gaWeine, gaSekt, gaCocktails, gaAlkoholfreieCocktails, gaLongdrinks, gaHeissgetraenke);
Code: Alles auswählen
type
// Definiert für jede Getränkeart ein Set von Getränken
TWasser = (Still, Medium, Classic);
TSoftdrinks = (BitterLemon, Cola, Fanta, GingerAle... usw.)
Hier bietet sich ein sogenannter varianter Record an
Code: Alles auswählen
type
TBestellung = record
Tisch : integer;
Menge : integer;
GetraenkeArt : TGetraenkeart;
// der weitere Inhalt des Records ist auch immer nur ein Integer aber abhängig von der Getränkeart mit unterschiedlicher Bedeutung
case TGetraenkeart of
gaWasser : (Wasser : TWasser);
gaSoftDrink : (SoftDrink : TSoftrinks);
... usw.
end;
1. TischNr.
2. Die Menge
3. Die Getränkeart
4. Das Getränk.
[Edit]
Euer Ansatz mit einem 3 dimensionalen Array würde prinzipiell auch gehen, ist aber etwas unglücklich.
Ein Vergleich: Der Chef will seine Sekretärin anweisen, einen Kunden anzurufen. Anstatt ihr einen Zettel mit dem Namen und der Telefonnummer zu geben, gibt er ihr ein tausenseitiges Telefonbuch mit dem Hinweis,
daß der entsprechende Eintrag markiert ist. Jetzt muß sich die arme Sekretärin durch 1000 Seiten wühlen um die richtige Telefonnummer zu finden.