Autor |
Beitrag |
Nini
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: So 26.04.15 19:19
also erst muss ich formdestroy aufrufen, dass die gelöscht werden (oder sind die das dann schon? o.O) und dann muss ich ja eigentlich meiner meinung nach nur wieder mit der schleife von 0 bis N-1 die SHapes erzeugen wie am anfang davor auch also so oder so Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| Shape := TShape.Create(self); Shape.Parent := Self; snr := x +y *N +1; Shape.Name := 'Shape'+inttostr(snr); Shape.Left := 10+x*25; Shape.Top := 80+y*25; Shape.Width := 25; Shape.Height := 25; Shape.OnMouseDown := @Shape1MouseDown; FeldShape[x,y] := Shape; |
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 26.04.15 19:31
Moin!
Nini hat folgendes geschrieben : | also erst muss ich formdestroy aufrufen, dass die gelöscht werden |
FormDestroy aufrufen ist nicht so schlau - jedenfalls dann nicht, wenn du das Formular noch weiter nutzen möchtest.
Aber du kannst einen Button "btnShapesLoeschen" anlegen und das darüber abwickeln (also dann im FormDestory den Buttonhandler aufrufen, so wie wir das bei Lesen/Schreiben auch gemacht haben; das kannst du dann auch für die neue Idee nutzen). Dann kann man zwischendurch auch mal (zum Entwickeln! später muss der Button natürlich wieder aus der Formular raus!) so anklicken zum Testen.
Nini hat folgendes geschrieben : | (oder sind die das dann schon? o.O) und dann muss ich ja eigentlich meiner meinung nach nur wieder mit der schleife von 0 bis N-1 die SHapes erzeugen wie am anfang davor auch |
Jup. Auch hier: wie wäre es mit einem Button "btnShapesAnlegen"?
Wir haben aber noch ein ganz anderes, richtig krasses Problem... schon gefunden?
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 26.04.15 19:39
also das shapeanlegen funktioniert schon mal
in den andern prozeduren wussten die ja nicht was N jetzt ist, also hab ich überall N := TrackBar1.Position; eingefügt
und bei dem löschbutton überlege ich grad noch Moderiert von Narses: Beiträge zusammengefasstal ich hab das jetzt so gemacht 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: 35:
| procedure TForm1.btnShapesanlegenClick(Sender: TObject); var snr,y,x : integer; shape : TShape; begin btnShapesLoeschenClick(self); N := TrackBar1.Position; ClientHeight := N*25+100; ClientWidth := N*25+20; for y := 0 to N-1 do for x := 0 to N-1 do begin Shape := TShape.Create(self); Shape.Parent := Self; snr := x +y *N +1; Shape.Name := 'Shape'+inttostr(snr); Shape.Left := 10+x*25; Shape.Top := 80+y*25; Shape.Width := 25; Shape.Height := 25; Shape.OnMouseDown := @Shape1MouseDown; FeldShape[x,y] := Shape; end;
end;
procedure TForm1.btnShapesLoeschenClick(Sender: TObject); var y, x: Integer; begin for y := 0 to Nmax-1 do for x := 0 to Nmax-1 do begin if Assigned(FeldShape[x,y]) then begin FeldShape[x,y].Free; FeldShape[x,y] := nil; end; end; end; |
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 27.04.15 10:16
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 28.04.15 12:46
Moin!
Wie sieht´s aus? Probleme? Egal was du machst, ob mit Self oder nil als Parameter für die Shape-Erzeugung - es gibt immer irgendwo Exceptions? Könnte das der Grund sein, wieso hier so viel Stille herrscht... ?
Narses hat folgendes geschrieben : | Wir haben aber noch ein ganz anderes, richtig krasses Problem... schon gefunden? |
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: Di 28.04.15 19:24
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: 35:
| procedure TForm1.FormCreate(Sender: TObject); var snr,y,x : integer; shape : TShape; begin trackbar1.Max := NMax; N := TrackBar1.Position; ClientHeight := N*25+100; ClientWidth := 620; for y := 0 to N-1 do for x := 0 to N-1 do begin Shape := TShape.Create(Nil); Shape.Parent := Self; snr := x +y *N +1; Shape.Name := 'Shape'+inttostr(snr); Shape.Left := 10+x*25; Shape.Top := 80+y*25; Shape.Width := 25; Shape.Height := 25; Shape.OnMouseDown := @Shape1MouseDown; FeldShape[x,y] := Shape; end; end;
procedure TForm1.FormDestroy(Sender: TObject); var y, x: Integer; begin for y := 0 to Nmax-1 do for x := 0 to Nmax-1 do begin if Assigned(FeldShape[x,y]) then begin FeldShape[x,y].Free; FeldShape[x,y] := nil; end; end; end; |
also das wären erstmal formcreate und formdestroy, aber die exceptions nerven halt total
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 28.04.15 19:50
Moin!
Nini hat folgendes geschrieben : | also das wären erstmal formcreate und formdestroy, |
OK, danke. Aber hattest du nicht bereits Buttons für die Funktionalität (Shapes anlegen/löschen) erstellt? Dann kannst du doch den Button-Click-Handler aufrufen. (und musst den Code nicht zweimal schreiben )
Nini hat folgendes geschrieben : | aber die exceptions nerven halt total |
Wir müssen ein "nil" übergeben, da führt kein Weg dran vorbei, sonst dürfen wir die Shapes nicht freigeben. Also müssen wir die Ursache für die Exceptions suchen. Dazu sollten wir erstmal rausfinden, wann die denn ganz genau auftreten (normalerweise hilft die IDE dir ja und zeigt die Stelle im Code ). Wo passiert´s denn?
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: Mo 04.05.15 19:59
Delphi-Quelltext 1:
| if (Shape.Brush.Color = clBlack) then |
die zeile ruft das auf also in der lesenprozedure Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.btnLesenClick(Sender: TObject); var x, y, snr: Integer; Shape: TShape; begin N := TrackBar1.Position; for y := 0 to N-1 do for x := 0 to N-1 do begin snr := x +y *N +1; Shape := TShape(FindComponent('Shape' +IntToStr(snr))); if (Shape.Brush.Color = clBlack) then Feld[x,y] := True else Feld[x,y] := False; end; end; |
und das mit dem formdestroy/create dann so? O.o
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: 35: 36: 37:
| procedure TForm1.FormCreate(Sender: TObject); var snr,y,x : integer; shape : TShape; begin trackbar1.Max := NMax; N := TrackBar1.Position; ClientHeight := N*25+100; ClientWidth := 620; for y := 0 to N-1 do for x := 0 to N-1 do begin Shape := TShape.Create(Nil); Shape.Parent := Self; snr := x +y *N +1; Shape.Name := 'Shape'+inttostr(snr); Shape.Left := 10+x*25; Shape.Top := 80+y*25; Shape.Width := 25; Shape.Height := 25; Shape.OnMouseDown := @Shape1MouseDown; FeldShape[x,y] := Shape; end; btnShapesAnlegenClick(self) end;
procedure TForm1.FormDestroy(Sender: TObject); var y, x: Integer; begin for y := 0 to Nmax-1 do for x := 0 to Nmax-1 do begin if Assigned(FeldShape[x,y]) then begin FeldShape[x,y].Free; FeldShape[x,y] := nil; end; end; btnShapesLoeschenClick(self); end; |
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 04.05.15 21:11
Moin!
Nini hat folgendes geschrieben : | Delphi-Quelltext 1:
| if (Shape.Brush.Color = clBlack) then | die zeile ruft das auf also in der lesenprozedure |
Ja, genau. Hier wird eine Exception geworfen, weil hier:
Delphi-Quelltext 1:
| Shape := TShape(FindComponent('Shape' +IntToStr(snr))); | das Shape nicht mehr gefunden wird (FindComponent liefert dann ein nil = nicht gefunden zurück). Aber warum? Ganz einfach: da wir beim Erzeugen des Shapes nil übergeben haben, gehört die Komponente nun wirklich uns und nicht mehr dem Formular - da (=im Formular) sucht FindComponent aber.
Wie kommen wir nun weiter? Ganz einfach, wir heben doch schon eine Referenz auf die Shapes in FeldShape auf, dann können wir diese ebenfalls nutzen, um auf die Shapes zuzugreifen, statt über den Namen der Komponente jedes mal danach suchen zu müssen. Ganz konkret also so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.btnLesenClick(Sender: TObject); var x, y: Integer; begin for y := 0 to N-1 do for x := 0 to N-1 do if (FeldShape[x,y].Brush.Color = clBlack) then Feld[x,y] := True else Feld[x,y] := False; end; |
Nini hat folgendes geschrieben : | und das mit dem formdestroy/create dann so? O.o |
Eher nicht. Nochmal kurz zur Erinnerung, was wir an dieser Stelle mit den Buttons tun: das ist ein Zwischenschritt, um die Funktionalität (Shapes erstellen/löschen) zum Testen auch mal so zwischendurch probieren zu können. Du solltest also das, was eigentlich getan werden muss, in den Button-Handler verlagern und dann in den Formularmethoden nur noch aufrufen. Konkret:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.btnShapesAnlegenClick(Sender: TObject); var x, y: Integer; begin N := TrackBar1.Position; for y := 0 to N-1 do for x := 0 to N-1 do begin FeldShape[x,y] := TShape.Create(Nil); FeldShape[x,y].Parent := Self; FeldShape[x,y].Left := 10+x*25; FeldShape[x,y].Top := 80+y*25; FeldShape[x,y].Width := 25; FeldShape[x,y].Height := 25; FeldShape[x,y].OnMouseDown := @Shape1MouseDown; end; end; |
Und dann im FormCreate nur noch:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.FormCreate(Sender: TObject); begin Trackbar1.Max := NMax; ClientHeight := N*25+100; ClientWidth := 620; btnShapesAnlegenClick(self); end; |
Deine Aufgaben sind nun: - Die FindComponent-Aufrufe durch direkte Zugriffe auf FeldShape[] zu ersetzen (damit wir die Exceptions loswerden)
- Den Button-Handler btnShapesLoeschenClick() analog zum Erstellen der Shapes umschreiben
- FormDestroy "bereinigen"
Dann sollte es eigentlich keine Exceptions mehr geben und wir sind bereit für den letzten Schritt: Reaktion auf Änderung der Trackbar.
Dann leg mal los.
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: Mo 18.05.15 11:16
So jetzt hab ich endlich mal daran gedacht, hier wieder zu schreiben. Zur Zeit komme ich einfach nicht mehr zum programmieren, vielleicht später mal wieder, und das Projekt habe ich schon vor einiger Zeit mit dem damaligen Stand abgegeben. Deshalb möchte ich mich noch mal sehr bedanken für deine Hilfe.
Für diesen Beitrag haben gedankt: FinnO, Mathematiker, Narses, ub60
|
|
Delphi-Laie
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: Mo 18.05.15 21:48
Hat da Forum eine Chance zu erfahren, ob das Ergebnis Deiner Mühe und im weiteren Sinne der Mühe vieler hier dem kritischen Blicke Deines Fachlehrers standhielt (=Benotung), liebe Nini?
Sicher wird das nicht nur diejenigen interessieren, die sich so rührend Deiner annahmen. Dein Erscheinen hier im Forum führte nicht nur zu einer neuen Dialogform - der reinen Tutor-Zögling-Beziehung -, sondern auch zur Auslagerung ursprünglich bei Dir angesiedelten "peripheren", dafür dann aber umso hitzigeren Meinungstausches.
|
|
Nini
Beiträge: 170
Erhaltene Danke: 12
|
Verfasst: Mo 08.06.15 19:56
Heute habe ich jetzt endlich die Info-Hausarbeit Game of life zurückbekommen, hab eine 1 endlich mal ne 1 in info, bei der ich das Gefühl habe, auch wirklich was gelernt und verstanden zu haben, auch wenn es natürlich noch verbesserungswürdig ist. Dafür noch einmeieinmal ein Riesendankeschön
Für diesen Beitrag haben gedankt: Delphi-Laie, klassiknerd, Mathematiker, Narses, Nersgatt, ub60
|
|
Delphi-Laie
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: Mo 08.06.15 20:06
Meine Anerkennung für das verdiente Ergebnis Deiner Audauer und Deines Fleißes, die/den aber auch etliche andere Forumsteilnehmer aufbrachten!
Zuletzt bearbeitet von Delphi-Laie am Di 09.06.15 09:56, insgesamt 1-mal bearbeitet
|
|
Nersgatt
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Di 09.06.15 07:22
Sehr gut! Im wahrsten Sinne des Wortes.
Hier wird ja öfters nach Hausaufgabenhilfe gefragt. Aber Dein Durchhaltevermögen, Einsatz und Willen zum Lernen hat noch niemand gezeigt. Ich ziehe meinen Hut vor Dir, weiter so!
Und Dank natürlich an Narses, der mit einer Engelsgeduld viel Zeit für die Hilfe aufgebracht hat.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 11.06.15 16:42
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
|