Autor Beitrag
Nini Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 170
Erhaltene Danke: 12



BeitragVerfasst: Do 16.04.15 18:24 
muss ich vielleicht das ueberleben/geburt noch dem aName zuweisen?
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 16.04.15 20:59 
Moin!

user profile iconNini hat folgendes geschrieben Zum zitierten Posting springen:
muss ich vielleicht das ueberleben/geburt noch dem aName zuweisen?
Das passiert hier bereits: (beim Aufruf)
ausblenden Delphi-Quelltext
1:
2:
  ueberleben := GetRuleSet('ckueberleben');
  geburt := GetRuleSet('ckgeburt');

Aber du beachtest es in der Funktion nicht. :idea: :zwinker:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Nini Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 170
Erhaltene Danke: 12



BeitragVerfasst: Fr 17.04.15 22:23 
und wie bekomm ich den denn da rein? O.o
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 18.04.15 01:05 
Moin!

user profile iconNini hat folgendes geschrieben Zum zitierten Posting springen:
und wie bekomm ich den denn da rein? O.o
Ganz einfach, über AName drauf zugreifen, wie hier auch im Test:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
  function GetRuleSet(const AName: String): TRegeln;
  begin
    ShowMessage(AName); // Test-Ausgabe, was passiert?
  end;

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Nini Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 170
Erhaltene Danke: 12



BeitragVerfasst: Sa 18.04.15 14:27 
vlt so in der art?
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 18.04.15 16:04 
Moin!

OK, zwei Sachen:
ausblenden Delphi-Quelltext
1:
checkbox:= TCheckBox(Form2.FindComponent('ckgeburt' +IntToStr(i)));					
Was bewirkt diese Zeile?

ausblenden Delphi-Quelltext
1:
2:
  ueberleben := GetRuleSet('ckueberleben');
  geburt := GetRuleSet('ckgeburt');
Vor deinem letzten Vorschlag stand das da so. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Nini Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 170
Erhaltene Danke: 12



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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... :? :nixweiss: Dann müssen wir das erstmal ändern. ;)

Diese Funktion:
ausblenden 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. :idea:

Deshalb rufen wir die Funktion zwei mal auf:
ausblenden 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. :think:

Du musst also in der Funktion den Namen der Checkbox-Gruppe verwenden (wir als AName bereitgestellt), statt eines konstanten Namens. :les: Jetzt klarer?

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Nini Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 170
Erhaltene Danke: 12



BeitragVerfasst: Sa 18.04.15 21:43 
ja also ich glaube, ich hab es jetzt besser verstanden
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 18.04.15 22:32 
Moin!

user profile iconNini hat folgendes geschrieben Zum zitierten Posting springen:
ja also ich glaube, ich hab es jetzt besser verstanden
Öhm, noch nicht ganz. :P Es ist genau anders rum! :think:

Das hier war so korrekt:
ausblenden 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. :idea: (Diese Info kann der Comupter ja alleine nicht erkennen, für den ist ein Name wie "ckgeburt" völlig bedeutungslos :nixweiss:)

Machen wir es mal der Ausführungsreihenfolge nach, nicht der (eigentlich korrekten) Deklarationsreihenfolge nach:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
// Funktionsaufruf
geburt := GetRuleSet('ckueberleben'); // könnte man sich auch so vorstellen: geburt := GetRuleSet(AName := 'ckueberleben');

...

// Funktionsausführung
  function GetRuleSet(const AName: String): TRegel; // hier ist jetzt AName gleichbedeutend zu 'ckueberleben'
    var
      CheckBox: TCheckBox;
      i: Integer;
  begin
    Result := [];
    for i := 0 to 8 do begin
      checkbox:= TCheckBox(Form2.FindComponent('ckgeburt' +IntToStr(i))); // genau hier ignorierst du aber, was du eigentlich bearbeiten solltest ;)
      if checkbox.checked then
        result := result + [i];
    end;
  end;

Jetzt klarer? :zwinker:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Nini Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 170
Erhaltene Danke: 12



BeitragVerfasst: So 19.04.15 18:31 
das ganz schön kompliziert o.O
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 19.04.15 18:53 
Moin!

user profile iconNini hat folgendes geschrieben Zum zitierten Posting springen:
das ganz schön kompliziert o.O
8)

user profile iconNini hat folgendes geschrieben Zum zitierten Posting springen:
so dann in etwa vielleicht?
Jup, das ist es! :zustimm: Allerdings wird das so trotzdem nicht laufen, es sei denn, du hast die Checkboxen umbenannt... :zwinker: Oder? :P

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Nini Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 170
Erhaltene Danke: 12



BeitragVerfasst: So 19.04.15 18:58 
achso :autsch: :D danke sehr die heißen ja immernock ckgeburt und ckueberleben :P aber jetzt läuft mein programm wieder :)
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 19.04.15 19:01 
Moin!

user profile iconNini hat folgendes geschrieben Zum zitierten Posting springen:
aber jetzt läuft mein programm wieder :)
Top! :zustimm:

Dann hast du jetzt auch schon wieder etwas mehr verstanden, was eine Funktion tut. :les: :think:

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 170
Erhaltene Danke: 12



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 19.04.15 19:08 
Moin!

user profile iconNini hat folgendes geschrieben Zum zitierten Posting springen:
ich würd gern noch N ändern können auf der spieloberfläche, also dass das keine festgelegte konstante mehr ist ...
OK. 8) Und schon Ideen, wie das gehen soll? :nixweiss:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Nini Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 170
Erhaltene Danke: 12



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 19.04.15 20:11 
Moin!

user profile iconNini hat folgendes geschrieben Zum zitierten Posting springen:
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. :idea:

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? :gruebel:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Nini Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 170
Erhaltene Danke: 12



BeitragVerfasst: So 19.04.15 20:20 
gute frage ... vielleicht einfach wieder löschen? ich weiß es nicht :/
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 19.04.15 22:01 
Moin!

user profile iconNini hat folgendes geschrieben Zum zitierten Posting springen:
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... :hair:

Zunächst mal haben wir das "Eigentümer-Problem". Hier mal ein Stück aus dem Code zum Erzeugen der Shapes:
ausblenden Delphi-Quelltext
1:
  Shape := TShape.Create(Self); // Shape-Objekt erzeugen, als Eigentümer das Formular (=Self) angeben					
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)! :shock:

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". :lupe:

Vorschläge, wie man das in den Griff kriegt? :les:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.