Autor Beitrag
noo.bee
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Mi 21.04.10 22:55 
user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
Warum brauchst du 49 Edits?


ja stimmt, ich brauche entweder nur 6 EDITs in die ich meine Zahlen eintrage oder ne 49er RADIOGROUP in der ich 6 felder anklicken kann. denkfehler :(
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 186
Erhaltene Danke: 2



BeitragVerfasst: Do 22.04.10 09:48 
user profile iconnoo.bee hat folgendes geschrieben Zum zitierten Posting springen:
ich möchte gern für mich ein kleines lottotool schreiben.

Welche Funktionalität soll das Programm haben? Tipps berechnen? oder?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: 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 :D erstmal muss das "einfache" funktionieren
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: 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 :D

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:

ausblenden 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); //edit80 = 1. akt. lottozahl
if edit80.Text = edit2.Text then inc (Treffer1); //edit1-6 = meine 1. tipreihe
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);            //label5 = anzeige trefferanzahl
end;


nur ist das doch ziemlich viel tipparbeit. ich hatte erst
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Do 22.04.10 20:14 
Hi :)

Kommt ja noch, kommt ja noch - erstmal muss das Programm geschrieben sein :P

ausblenden volle Höhe 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:
30:
31:
32:
33:
34:
uses Math;

procedure TMainFrm.CheckBox1Click(Sender: TObject);
const
  CrossAddRemove: Array[0..1of String = ('machen!''entfernen!');
begin
  if (Sender as TCheckBox).Checked then
    Dec(FKreuze)  //Spieler muss ein Kreuz weniger machen
  else Inc(FKreuze);  //Spieler muss ein Kreuz mehr machen
  if FKreuze = 0 then begin  //labelBeschriftung 1: Lottoschein richtig
    labScheinOkay.Font.Color := clLime;
    labScheinOkay.Font.Style := [fsBold];
    labScheinOkay.Caption := 'Chance: 1 / 13.983.816';
  end else begin  //Labelbeschriftung 0: Lottoschein falsch
    labScheinOkay.Font.Color := clRed;
    labScheinOkay.Font.Style := [fsItalic];
    labScheinOkay.Caption := 'Sie müssen noch genau ' + IntToStr(Abs(FKreuze))
                           + ' Kreuze ' +
                           CrossAddRemove[IfThen(FKreuze > 001)];  //entweder 'kreuz machen' oder 'kreuz entfernen', je nachdem, ob zu viel oder zu wenig kreuze da sind.
  end;
end;

procedure TMainFrm.FormCreate(Sender: TObject);
var
  i: Integer;
  aCheckBox: TCheckBox;
begin
  FKreuze := 6;  //6 Kreuze fehlen auf dem lottoschein
  for i := 1 to 49 do begin  //für i=1..49 Checkboxen
    aCheckBox := (FindComponent('Checkbox' + IntToStr(i)) as TCheckBox);  //Checkbox auswählen
    aCheckBox.OnClick := self.CheckBox1Click;  //Wenn diese Checkbox gedrückt wird, wird die Anzahl der verbleibenden Kreuze angepasst
    aCheckBox.Caption := IntToStr(i);  //Der Text auf dieser Checkbox ist ihre Nummer.
  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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: 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% :D - 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 :D
Einloggen, um Attachments anzusehen!
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: 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. :P Wenn mit den Kommentaren jetzt die wichtigen Zeilen klar werden, ist alles richtig. :D

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Do 22.04.10 21:10 
Zitat:
Der Source war auch so gedacht, dass er nicht kopiert werden kann. :P

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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 467
Erhaltene Danke: 17

WIN 7
NQC, Basic, Delphi 2010
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: 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:
ausblenden 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);  //Strings immer als const übergeben, sonst werden sie nochmal kopiert und es entsteht overhead
var
  aStringList: TStringList;
  i: Integer;
begin
  aStringList := TStringList.Create;
  try //bei File-Operationen kann immer was schiefgehen. Hier(und nur hier) ein try verwenden
    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);  //Strings immer als const übergeben, sonst werden sie nochmal kopiert und es entsteht overhead
var
  aStringList: TStringList;
  i: Integer;
begin
  aStringList := TStringList.Create;
  try //bei File-Operationen kann immer was schiefgehen. Hier(und nur hier) ein try verwenden
    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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Do 22.04.10 22:27 
Zitat:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 188

Win 7
Delphi XE
BeitragVerfasst: 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.

lotto

Moderiert von user profile iconNarses: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 120



BeitragVerfasst: Fr 23.04.10 23:25 
Zitat:
for i := 0 to EditCount - 1

hab ich schon bemerkt :D aber irgendwo hängts noch...

[DCC Fehler] lotto.pas(265): E2003 Undeklarierter Bezeichner: 'Edit'
ausblenden Delphi-Quelltext
1:
aStringList.Append(Edit[i].Text);					


@Stread: dein bild geht net