Autor |
Beitrag |
Nini
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: Do 16.04.15 18:24
muss ich vielleicht das ueberleben/geburt noch dem aName zuweisen?
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 16.04.15 20:59
Moin!
Nini hat folgendes geschrieben : | muss ich vielleicht das ueberleben/geburt noch dem aName zuweisen? |
Das passiert hier bereits: (beim Aufruf)
Delphi-Quelltext 1: 2:
| ueberleben := GetRuleSet('ckueberleben'); geburt := GetRuleSet('ckgeburt'); |
Aber du beachtest es in der Funktion nicht.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: Fr 17.04.15 22:23
und wie bekomm ich den denn da rein? O.o
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 18.04.15 01:05
Moin!
Nini hat folgendes geschrieben : | und wie bekomm ich den denn da rein? O.o |
Ganz einfach, über AName drauf zugreifen, wie hier auch im Test:
Delphi-Quelltext 1: 2: 3: 4:
| function GetRuleSet(const AName: String): TRegeln; begin ShowMessage(AName); end; |
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: Sa 18.04.15 14:27
vlt so in der art?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.btnRegelnClick(Sender: TObject);
function GetRuleSet(const AName: String): TRegel; var CheckBox: TCheckBox; i: Integer; begin Result(AName) := []; for i := 0 to 8 do begin checkbox:= TCheckBox(Form2.FindComponent('ckgeburt' +IntToStr(i))); if checkbox.checked then result(AName) := result(AName) + [i]; end; end;
begin Form2.ShowModal; ueberleben := GetRuleSet('ueberleben'); geburt := GetRuleSet('geburt'); end; |
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 18.04.15 16:04
Moin!
OK, zwei Sachen:
Delphi-Quelltext 1:
| checkbox:= TCheckBox(Form2.FindComponent('ckgeburt' +IntToStr(i))); | Was bewirkt diese Zeile?
Delphi-Quelltext 1: 2:
| ueberleben := GetRuleSet('ckueberleben'); geburt := GetRuleSet('ckgeburt'); | Vor deinem letzten Vorschlag stand das da so.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: Sa 18.04.15 16:22
oh, das hab ich jetzt wieder so geändert
die Zeile macht dass die checkbox die mit dem namen ckgeburt i gefunden wurde zur klasse tCheckbox gehört, glaube ich
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 18.04.15 21:36
Moin!
OK, ich denke, du hast noch nicht verstanden, wohin die "Reise" gehen soll, also kannst du den Weg auch nicht finden... Dann müssen wir das erstmal ändern.
Diese Funktion:
Delphi-Quelltext 1:
| function GetRuleSet(const AName: String): TRegel; | soll eine Gruppe von Checkboxen bearbeiten und das Ergebnis dieser "Bearbeitung" in einer Menge (vom Typ TRegel) abliefern.
Deshalb rufen wir die Funktion zwei mal auf:
Delphi-Quelltext 1: 2:
| ueberleben := GetRuleSet('ckueberleben'); geburt := GetRuleSet('ckgeburt'); |
Sinn: beim Aufruf geben wir der Funktion mit (der Parameter in Klammern), welche Checkbox-Gruppe bearbeitet werden soll. Und die Zuweisung des Funktionsergebnisses an die entsprechende Variable (ueberleben := bzw. geburt :=) stellt den Zusammenhang von Checkbox-Namen zu Funktion im Programm her.
Du musst also in der Funktion den Namen der Checkbox-Gruppe verwenden (wir als AName bereitgestellt), statt eines konstanten Namens. Jetzt klarer?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: Sa 18.04.15 21:43
ja also ich glaube, ich hab es jetzt besser verstanden
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.btnRegelnClick(Sender: TObject);
function GetRuleSet(const AName: String): TRegel; var CheckBox: TCheckBox; i: Integer; begin Result := []; for i := 0 to 8 do begin checkbox:= TCheckBox(Form2.FindComponent('ckgeburt' +IntToStr(i))); if checkbox.checked then result := result + [i]; end; end;
begin Form2.ShowModal; ueberleben := GetRuleSet('aName'); geburt := GetRuleSet('aName'); end; |
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 18.04.15 22:32
Moin!
Nini hat folgendes geschrieben : | ja also ich glaube, ich hab es jetzt besser verstanden |
Öhm, noch nicht ganz. Es ist genau anders rum!
Das hier war so korrekt:
Delphi-Quelltext 1: 2:
| ueberleben := GetRuleSet('ckueberleben'); geburt := GetRuleSet('ckgeburt'); | Das muss natürlich genau so bleiben, da hier die Verbindung zwischen den (Checkbox-)Namen und den (Regel-)Variablen im Programm hergestellt wird. (Diese Info kann der Comupter ja alleine nicht erkennen, für den ist ein Name wie "ckgeburt" völlig bedeutungslos )
Machen wir es mal der Ausführungsreihenfolge nach, nicht der (eigentlich korrekten) Deklarationsreihenfolge nach:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| geburt := GetRuleSet('ckueberleben'); ...
function GetRuleSet(const AName: String): TRegel; var CheckBox: TCheckBox; i: Integer; begin Result := []; for i := 0 to 8 do begin checkbox:= TCheckBox(Form2.FindComponent('ckgeburt' +IntToStr(i))); if checkbox.checked then result := result + [i]; end; end; |
Jetzt klarer?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: So 19.04.15 18:31
das ganz schön kompliziert o.O
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| function GetRuleSet(const AName: String): TRegel; var CheckBox: TCheckBox; i: Integer; begin Result := []; for i := 0 to 8 do begin checkbox:= TCheckBox(Form2.FindComponent(aName +IntToStr(i))); if checkbox.checked then result := result + [i];
end;
end;
begin Form2.ShowModal; ueberleben := GetRuleSet('ueberleben'); geburt := GetRuleSet('geburt'); end; |
so dann in etwa vielleicht?
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 19.04.15 18:53
Moin!
Nini hat folgendes geschrieben : | das ganz schön kompliziert o.O |
Nini hat folgendes geschrieben : | so dann in etwa vielleicht? |
Jup, das ist es! Allerdings wird das so trotzdem nicht laufen, es sei denn, du hast die Checkboxen umbenannt... Oder?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: So 19.04.15 18:58
achso danke sehr die heißen ja immernock ckgeburt und ckueberleben aber jetzt läuft mein programm wieder
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 19.04.15 19:01
Moin!
Nini hat folgendes geschrieben : | aber jetzt läuft mein programm wieder |
Top!
Dann hast du jetzt auch schon wieder etwas mehr verstanden, was eine Funktion tut.
Und, schon überlegt, wo es weiter geht?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: So 19.04.15 19:05
ja ich glaub auch, dass ich das jetzt ein bisschen besser verstehe
ich würd gern noch N ändern können auf der spieloberfläche, also dass das keine festgelegte konstante mehr ist ...
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 19.04.15 19:08
Moin!
Nini hat folgendes geschrieben : | ich würd gern noch N ändern können auf der spieloberfläche, also dass das keine festgelegte konstante mehr ist ... |
OK. Und schon Ideen, wie das gehen soll?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: So 19.04.15 19:50
also ich brauch irgendwas zum eingeben für N, nen editfeld oder sowas wie nen schieberegler oder sowas und dann muss ich das als wert für N einlesen
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 19.04.15 20:11
Moin!
Nini hat folgendes geschrieben : | nen schieberegler oder sowas und dann muss ich das als wert für N einlesen |
Jo, klar, irgendwo muss der Benutzer ja kund tun, was er will. Ein Schieberegler finde ich persönlich optimal, da kann man die Eingaben besser begrenzen.
Aber ich meinte eher: wie soll das "unter der Haube" ablaufen? Wenn wir das Programm gestartet haben, dann sind da ja z.B. schon Shapes erzeugt worden. Was machen wir mit denen?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Nini
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: So 19.04.15 20:20
gute frage ... vielleicht einfach wieder löschen? ich weiß es nicht :/
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 19.04.15 22:01
Moin!
Nini hat folgendes geschrieben : | vielleicht einfach wieder löschen? |
Simpel aber einfach, ja, das kann man machen.
Allerdings... da werden uns jetzt gleich ein paar Probleme über den Weg laufen...
Zunächst mal haben wir das "Eigentümer-Problem". Hier mal ein Stück aus dem Code zum Erzeugen der Shapes:
Delphi-Quelltext 1:
| Shape := TShape.Create(Self); | Du siehst es schon am Kommentar: wir übergeben das neue Shape dem Formular (also nicht nur zur Anzeige, sondern als Eigentümer des Speicherplatzes). Folglich dürfen wir das nicht einfach wieder selbst freigeben, weil uns die Komponenten gar nicht mehr "gehören" (wird mit Exceptions bestraft)!
Wir müssen also statt "Self" ein "nil" übergeben, dann "gehört" die Komponente uns. Allerdings müssen wir dann auch irgendwo eine Referenz darauf "aufheben", weil - ganz simpel, grade geplant - wir sie auch später nicht mehr freigeben können, wenn wir sie nicht "wiederfinden".
Vorschläge, wie man das in den Griff kriegt?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|