Autor |
Beitrag |
noo.bee
      
Beiträge: 120
|
Verfasst: Mi 21.04.10 19:36
ich möchte gern für mich ein kleines lottotool schreiben.
ich habe mal ganz einfach angefangen und mir einfach n FORM geöffnet. nun stellt sich mir die überlegung ob es sinnvoll ist, 49 EDITs im form zu platzieren oder vllt eine radiogroup. allerdings kann man ja bei einer radiogroup nur einwas auswählen. ich bräuchte aber 6 auswahlmöglichkeiten.
danach natürlich noch die frage, was sich einfacher speichern lässt. also 49 EDITs oder die radiogroup ? und ich muss ja noch vergleichen können. also die mit gezogenen zahlen
bevor ich jetzt anfange meinen anfängercode zu schreiben, wolle ich erst mal eure gedanken dazu hören. bitte kein fachchinesisch :p
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mi 21.04.10 22:28
Warum brauchst du 49 Edits? Ist bei Lotto nicht 6 aus 49 bzw 6 aus 45 oder sonst was? Demnach interessieren dich ja eigentlich nur 6 Zahlen, oder?
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
noo.bee 
      
Beiträge: 120
|
Verfasst: Mi 21.04.10 22:55
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mi 21.04.10 23:00
Wieso Radiogroup? Da kann man doch nur eins auswählen..
Wenn überhaupt, dann Checkboxen.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Do 22.04.10 00:17
also ich würde am ehesten zu 6 editfeldern raten, oder zu einer Listbox. Da kann man auch schön einen vorkommenscheck machen.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
martin300
      
Beiträge: 186
Erhaltene Danke: 2
|
Verfasst: Do 22.04.10 09:48
noo.bee hat folgendes geschrieben : | ich möchte gern für mich ein kleines lottotool schreiben. |
Welche Funktionalität soll das Programm haben? Tipps berechnen? oder?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 22.04.10 09:55
Das sieht schon sehr nach einem typischen Beispiel für eine selbst gezeichnete Oberfläche aus. Das spart die ganzen visuellen Komponenten und lässt sich auch sehr viel besser im Design verändern.
Ein Beispiel dafür ist mein Periodensystem (wobei dein Lotto Programm natürlich deutlich einfacher ist):
www.delphi-forum.de/viewtopic.php?p=557541
|
|
noo.bee 
      
Beiträge: 120
|
Verfasst: Do 22.04.10 17:01
Zitat: | Welche Funktionalität soll das Programm haben? Tipps berechnen? oder? |
ich möchte nur für mich n kleines programm, in das ich meine tips eintrage. unten gibts dann nochmal EDITs, in welche ich die aktuellen zahlen der ziehung eintrage. dann will ich, dass bei meinen tips die hervorgehoben werden, welche die treffer sind...
also eben nur was einfaches kleines zum anfang
erweitern oder so kann ich später immer noch  erstmal muss das "einfache" funktionieren
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Do 22.04.10 19:00
Hi
In Checkboxen könnte man beliebig viele Einträge anklicken, mit Radiobutton jeweils nur einen - beides falsch.
Wenn es ein größere Projekt werden soll, kannst du dir später überlegen, auf etwas selbstgezeichnetes umzusteigen.
Eintippen ist blöd, insofern würde ich wirklich 49 Checkboxen nehmen. Die kannst du entweder dynamisch(im Quelltext) erzeugen, oder auf das Formular ziehen.
In jedem Fall kannst du sie nachher über FindComponent() ansprechen: (FindComponent('Checkbox' + IntToStr(i)) as TCheckbox).Checked := ..
Jetzt kann jede dieser Checkboxen ja eine Methode " OnCheck(Sender: TObject)" haben; diese würde ich nutzen, und eine Integervariable entsprechend um eins erhöhen, wenn gescheckt bzw. um eins absenken, wenn unchecked wird. So kannst du immer kontrollieren, ob denn nun genügend Boxen gecheckt sind.
lg,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
noo.bee 
      
Beiträge: 120
|
Verfasst: Do 22.04.10 19:42
Zitat: | Eintippen ist blöd, insofern würde ich wirklich 49 Checkboxen nehmen. Die kannst du entweder dynamisch(im Quelltext) erzeugen, oder auf das Formular ziehen.
In jedem Fall kannst du sie nachher über FindComponent() ansprechen: (FindComponent('Checkbox' + IntToStr(i)) as TCheckbox).Checked := ..
Jetzt kann jede dieser Checkboxen ja eine Methode "OnCheck(Sender: TObject)" haben; diese würde ich nutzen, und eine Integervariable entsprechend um eins erhöhen, wenn gescheckt bzw. um eins absenken, wenn unchecked wird. So kannst du immer kontrollieren, ob denn nun genügend Boxen gecheckt sind. |
schön erklärt  aber fürn anfänger nich sooo verständlich :p zumindest nicht für mich
ich hab jetzt erst mal 6 EDITs erstellt für den 1. tip und nochmals 6 EDITs wo die akt. lottozahlen reinkommen. mein ansatz war jetzt dieser:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Button1Click(Sender: TObject); begin Treffer1 := 0; if edit80.Text = edit1.Text then inc (Treffer1); if edit80.Text = edit2.Text then inc (Treffer1); if edit80.Text = edit3.Text then inc (Treffer1); if edit80.Text = edit4.Text then inc (Treffer1); if edit80.Text = edit5.Text then inc (Treffer1); if edit80.Text = edit6.Text then inc (Treffer1); Label5.Caption := inttostr(Treffer1); end; |
nur ist das doch ziemlich viel tipparbeit. ich hatte erst
Delphi-Quelltext 1:
| if edit80.Text = edit1.Text or edit2.Text or ... or edit6.Text then inc (Treffer1) |
aber or darf ich da irgendwie nicht verwenden
also gehts etwas einfacher, um mir tipparbeit zu sparen ?
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Do 22.04.10 20:14
Hi
Kommt ja noch, kommt ja noch - erstmal muss das Programm geschrieben sein
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| uses Math;
procedure TMainFrm.CheckBox1Click(Sender: TObject); const CrossAddRemove: Array[0..1] of String = ('machen!', 'entfernen!'); begin if (Sender as TCheckBox).Checked then Dec(FKreuze) else Inc(FKreuze); if FKreuze = 0 then begin labScheinOkay.Font.Color := clLime; labScheinOkay.Font.Style := [fsBold]; labScheinOkay.Caption := 'Chance: 1 / 13.983.816'; end else begin labScheinOkay.Font.Color := clRed; labScheinOkay.Font.Style := [fsItalic]; labScheinOkay.Caption := 'Sie müssen noch genau ' + IntToStr(Abs(FKreuze)) + ' Kreuze ' + CrossAddRemove[IfThen(FKreuze > 0, 0, 1)]; end; end;
procedure TMainFrm.FormCreate(Sender: TObject); var i: Integer; aCheckBox: TCheckBox; begin FKreuze := 6; for i := 1 to 49 do begin aCheckBox := (FindComponent('Checkbox' + IntToStr(i)) as TCheckBox); aCheckBox.OnClick := self.CheckBox1Click; aCheckBox.Caption := IntToStr(i); end; end; |
lg,
Einloggen, um Attachments anzusehen!
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
Zuletzt bearbeitet von Hidden am Do 22.04.10 20:40, insgesamt 2-mal bearbeitet
|
|
noo.bee 
      
Beiträge: 120
|
Verfasst: Do 22.04.10 20:26
what the hell ...
also ich trau mich ja gar nicht zu sagen, dass ich deinen code nicht nehmen will, weil das ja sicher ne menge arbeit war. aber ich versteh da leider nicht mal annähern 1%  - naja ok, n bißchen mehr wie 1% isses schon.
dann doch lieber mit meinen umständlichen EDITs. die versteh ich noch :p
ich kann zwar grob erklären, was dein code so n bissi macht, aber mehr auch net. ich muss das erstmal sacken lassen
im anhang meine idee mit meinem kleinen wissen 
Einloggen, um Attachments anzusehen!
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Do 22.04.10 20:42
Hi
'tschuldigung, das war nur so schnell zusammengehackt, das geht gewöhnlicherweise nach "wenig tippen, bisschen kompliziertere Befehle". Hab's kommentiert.
Der Source war auch so gedacht, dass er nicht kopiert werden kann.  Wenn mit den Kommentaren jetzt die wichtigen Zeilen klar werden, ist alles richtig.
lg,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
noo.bee 
      
Beiträge: 120
|
Verfasst: Do 22.04.10 21:10
Zitat: | Der Source war auch so gedacht, dass er nicht kopiert werden kann.  |
kopieren wäre eh nicht gegangen, weil ich sowieso nicht weis, was wie wohin kopiert werden muss. ausserdem will ich ja MEIN programm erstellen  ähm, also mit eurer hilfe :p
so, noch ne frage: ich hab jetzt 12 tipreihen mit je 6 tips (also nen kompletten lottoschein). wie speichere ich denn alle 72 EDITs in eine datei? den TSAVEDIALOG hab ich schon gefunden. und ich hab auch schon DEFAULTEXT in *.txt geändert. wenn ich jetzt speichern drücke, speichert er aber nüx ab ?!? ich krieg nicht hin, alle EDITs in eine datei zu speichern.
|
|
der organist
      
Beiträge: 467
Erhaltene Danke: 17
WIN 7
NQC, Basic, Delphi 2010
|
Verfasst: Do 22.04.10 21:24
hei!
hab dein Programm mal getestet. Was auf jeden Fall noch gemacht werden sollte is ne Abfrage auf Gültigkeit:
-Zahlen die kleiner als 1 und größer als 49 sind
-doppelt eingegeben Zahlen...
Gruss,
_________________ »Gedanken sind mächtiger als Waffen. Wir erlauben es unseren Bürgern nicht, Waffen zu führen - warum sollten wir es ihnen erlauben, selbständig zu denken?« Josef Stalin
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Do 22.04.10 21:30
Hi
Die Edits direkt abspeichern, kannst du damit auch nicht.
Der Dialog dient eigentlich nur dazu, einen Dateipfad fürs Speichern auszuwählen. Abspeichern kannst du beispielsweise mit TStringlist.SaveToFile.
Dazu musst du die Texte aus den Editfeldern aber erstmal in eine Stringlist bzw. einen String schreiben:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| procedure SaveLotto(const aFilePath: String); var aStringList: TStringList; i: Integer; begin aStringList := TStringList.Create; try for i := 0 to EditCount - 1 do aStringList.Append(Edit[i].Text); aStringList.SaveToFile(aFilePath); finally aStringList.Free; end; end;
procedure LoadLotto(const aFilePath: String); var aStringList: TStringList; i: Integer; begin aStringList := TStringList.Create; try aStringList.LoadFromFile(aFilePath); for i := 0 to EditCount - 1 do Edit[i].Text := aStringList[i]; finally aStringList.Free; end; end; |
Die for-Schleifen musst du jeweils durch die Aktion mit dem einzelnen Edit ersetzen, wenn du sie nicht durchnummeriert hast(entweder in nem Array, oder über FindComponent).
lg,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
Zuletzt bearbeitet von Hidden am Fr 23.04.10 10:16, insgesamt 1-mal bearbeitet
|
|
noo.bee 
      
Beiträge: 120
|
Verfasst: Do 22.04.10 22:27
Zitat: | Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| for i := 0 to EditCount do aStringList.Append(Edit[i].Text); aStringList.SaveToFile(aFilePath);
aStringList.LoadFromFile(aFilePath); for i := 0 to EditCount do Edit[i].Text := aStringList[i]; |
Die for-Schleifen musst du jeweils durch die Aktion mit dem einzelnen Edit ersetzen, wenn du sie nicht durchnummeriert hast(entweder in nem Array, oder über FindComponent). |
ok, ordentlich durchnummeriert sind meine EDITs. also kann ich direkt den EditCount mit 72 ersetzen.
Zitat: | Abfrage auf Gültigkeit:
-Zahlen die kleiner als 1 und größer als 49 sind
-doppelt eingegeben Zahlen... |
an >0 <50 hab ich gedacht, nur noch nix eingebaut. aber an doppelte hatte ich noch nicht gedacht. dankö 
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Fr 23.04.10 10:17
for i := 0 to EditCount - 1, muss es natürlich heißen :oops:, denn von 0 bis EditCount sind ja (EditCount+1) Zahlen.
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
Stread
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: Fr 23.04.10 13:36
Ich habe früher auch mal ein Lotto Programm erstellt deshalb hier mal ein Bild als Anregung. Auf Wunsch kann ich auch sagen wie die einzelnen Sachen funktionieren.
Moderiert von Narses: Bild als Anhang hochgeladen.
Einloggen, um Attachments anzusehen!
Zuletzt bearbeitet von Stread am Sa 24.04.10 09:13, insgesamt 1-mal bearbeitet
|
|
noo.bee 
      
Beiträge: 120
|
Verfasst: Fr 23.04.10 23:25
Zitat: | for i := 0 to EditCount - 1 |
hab ich schon bemerkt  aber irgendwo hängts noch...
[DCC Fehler] lotto.pas(265): E2003 Undeklarierter Bezeichner: 'Edit'
Delphi-Quelltext 1:
| aStringList.Append(Edit[i].Text); |
@Stread: dein bild geht net
|
|