Autor |
Beitrag |
Moony
      
Beiträge: 97
Win XP
D7 Prof
|
Verfasst: So 15.05.05 10:42
Also. Ich hab da ne Unterklasse, nennen wir sie TBunt die soll die zusätzliche Fähigkeit, dass sie die Farbe wechseln kann, bekommen. Von der hab ich ein array und bei jedem weiteren Aufruf, durch Tastendruck wird so eine neue TBunt aufgerufen und sie soll jedes Mal eine andere Farbe haben.
Also ich ne Variable zFarbe gemacht und in die Unterklasse gekritzelt. Jetzt ist mein Problem, dass ich der Variablen in der init einen Anfangswert geben muss, aber gleichzeitg die Variable um 1 erhöhe, damit sie beim nächsten Mal eine andere Farbe hat. Und da hätten wir einen Kreis
zFarbe := 1
zFarbe := zFarbe+1 , da kann ich lange machen was ich will, die Farbe bleibt immer die Selbe.
Jemand nen Vorschlag?
|
|
Muetze1
      
Beiträge: 346
|
Verfasst: So 15.05.05 12:40
Moin!
Du musst natürlich die Farbe um eins erhöhen - aber ausgehen musst du von dem Farbwert der TBunt Instanz die als letztes in deiner TBunt-Liste steht. Daher wäre es am besten, wenn du im Init() (dein Constructor) den Farbwert der letzten TBunt mitgibst und in der Implementierung weisst du zFarbe := ÜbergebeneFarbe + 1; zu. Dabei stellt "übergebeneFarbe" die Farbe der letzten TBunt Instanz dar, die du in die Liste eingefügt hattest...
Hinweis: Bei der Vererbung werden nur die Variablen vererbt (Protected, Public, Published Bereich) - nicht aber deren Variableninhalt. Woher sollte er beim Init wissen, welche von den vielen TBunt die du zuvor angelegt hattest, er jetzt nutzen soll, um die Werte zukopieren?
MfG
Muetze1
_________________ 49 63 68 68 61 62 65 6B 65 69 6E 65 41 68 6E 75 6E 67 21
|
|
Moony 
      
Beiträge: 97
Win XP
D7 Prof
|
Verfasst: So 15.05.05 12:49
aha. Muetzi wenn einer mit schreibt, dann bist du es. Schonmal DANKESCHÖN!!
Frage: in welchem Constructor soll ich den Farbwert angeben??
Also TBunt war blödsin. Also es geht um eine Unterklassen von TKugel (traraaaaaaa  ) die heißt THalbeKugel (alles schön ohne Fehler, selbst die HippiKugel läuft *stolz*)
Und jetzt noch mal zum Mitkommen
in den Construktor in THalbeKugel muss ich reischreiben:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| constructor THalbeKugel.init (pPosX, pPosY, pRadius, pRichtung, pGeschwindigkeit : double); begin inherited init (pPosX, pPosY, pRadius, pRichtung, pGeschwindigkeit); zFarbe := 1 ÜbergebeneFarbe := zFarbe hatBuntstift.setzeFarbe (ÜbegebeneFarbe) hatBuntstift.runter ( ); zFarbe := ÜBergebeneFarbe+1 end; |
oder so?? Aber ich bin mir 100pro sicher, dass ich dich gerade falsch verstanden hab
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: So 15.05.05 13:54
Nur mal als Anregung :
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TfrmKey.FormDeactivate(Sender: TObject); begin Color:=RGB((GetRValue(ColorToRGB(Color)) - 20), (GetGValue(ColorToRGB(Color)) - 25), (GetBValue(ColorToRGB(Color)) - 25)); StatusBar.SimpleText := ''; end; |
Bei mir ging es darum, in einem Menüsystem die nicht aktuellen Forms etwas anders (dunkler) darzustellen, sie aber nicht ganz auszublenden. Der User sollte also schon noch erkennen können, in welcher Verschachtelungstiefe er ist. Das betrifft in diesem Fall zwar nur Forms, dürfte aber mit anderem so ähnlich gehen.
_________________ Gruß
Hansa
|
|
Moony 
      
Beiträge: 97
Win XP
D7 Prof
|
Verfasst: So 15.05.05 16:28
mhh, soso. Wenn ich das richtig sehe. Bleiben aber bei dir die Farben stetig gleich. Mein Problem ist, dass sobald ich init aufrufe die Farbe wieder schwarz ist und ich weiß nicht wie ich das wegkriege
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: So 15.05.05 18:07
Dann nehme doch ein anderes Ereignis ! Das Form-Deactivate ist nur ein Beispiel. Welche Komponente benutzt Du denn, oder soll benutzt werden ?
_________________ Gruß
Hansa
|
|
Moony 
      
Beiträge: 97
Win XP
D7 Prof
|
Verfasst: So 15.05.05 18:30
ähm hab ich erwähnt, dass ich ein Mädchen bin und gerade keine Ahnung habe
Bitte einmal 2Gänge langsamer, sonst komm ich mit dem Nachvollziehen nicht nach
Was meinst du mit Ereignis?? Und mit Komponenten willst du was von mir hören??
Sorry, aber ich kann mit dem Fachschiselaweng noch nicht viel anfangen. *schäm*
|
|
xasx
      
Beiträge: 34
WinXP Pro, Win 2k3 ServEnt
D2k5 PE, VS 2005
|
Verfasst: So 15.05.05 18:40
Gibt es in Delphi keine statischen, also Klassenvariablen?
Damit wäre das sehr einfach!
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: So 15.05.05 18:46
Moony hat folgendes geschrieben: | ähm hab ich erwähnt, dass ich ein Mädchen bin und gerade keine Ahnung habe  |
Als Entschuldigung zählt das leider nicht ! Du mußt doch wissen, wann und wo Deine Kugeln angezeigt werden sollen.  Sollten es Forms sein, dann geht mein Bsp. 1:1.
_________________ Gruß
Hansa
|
|
Moony 
      
Beiträge: 97
Win XP
D7 Prof
|
Verfasst: So 15.05.05 19:30
Wie, wann ich meine Kugel angezeigt haben will.
Das weis ich, Beim Tastendruck *denk* 'ö' wars glaub ich.
Was ich sagen will, ich kommm mit den Fachbegriffen nicht klar. Was sind Forms?
Schon mal Danke für deine Geduld.
|
|
Muetze1
      
Beiträge: 346
|
Verfasst: So 15.05.05 19:49
Moin!
So, wenn ich dich richtig verstanden habe, dann sollte THalbKugel immer eine andere Farbe bekommen, als die anderen, schon existierenden Halbkugeln, bisher haben. Richtig?
Wenn ja, dann muss die neue THalbKugel ja wissen, was denn die letzte schon genutzte Farbe war. Das bedeutet zum einen, das du dir da, wo du die THalbKugel mit init() erstellst, merken musst welche Farbe du als letztes vergeben hast. Und zum anderen musst du dann beim Anlegen der neuen THalbKugel diese dann natürlich diese letzte Farbe mitgeben. Daher meinte ich das mit der übergebenen Farbe so:
Moony hat folgendes geschrieben: | Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| constructor THalbeKugel.init (pPosX, pPosY, pRadius, pRichtung, pGeschwindigkeit : double; Const AFarbe : Integer); begin inherited init (pPosX, pPosY, pRadius, pRichtung, pGeschwindigkeit); zFarbe := AFarbe + 1; hatBuntstift.setzeFarbe (zFarbe) hatBuntstift.runter ( ); end; | |
Und vergess dabei nicht nach der Erstellung einer Halbkugel die an das init() übergebene Farbe um eins hoch zu setzen...
MfG
Muetze1
_________________ 49 63 68 68 61 62 65 6B 65 69 6E 65 41 68 6E 75 6E 67 21
|
|
Moony 
      
Beiträge: 97
Win XP
D7 Prof
|
Verfasst: So 15.05.05 20:55
 Du bissn Held.
Aber irgendwie [Fehler] mTHalbeKugel.pas(13): Deklaration von 'init' unterscheidet sich von vorheriger Deklaration.
Und kann ich denn im Hauptprogramm eine Variable um eins erhöhen, wenn nur die Unterklasse, also THalbeKugel, diese Variable kennt?
|
|
Muetze1
      
Beiträge: 346
|
Verfasst: So 15.05.05 21:46
Moin!
Moony hat folgendes geschrieben: | Aber irgendwie [Fehler] mTHalbeKugel.pas(13): Deklaration von 'init' unterscheidet sich von vorheriger Deklaration. |
Hast du die Constructor'en alle mit einem Virtual versehen? Im Normalfall sollte ihn die zusätzliche Farbe als Parameter nicht kümmern.
Moony hat folgendes geschrieben: | Und kann ich denn im Hauptprogramm eine Variable um eins erhöhen, wenn nur die Unterklasse, also THalbeKugel, diese Variable kennt? |
Deshalb sollte sich das Hauptprogramm eine eigene Variable gönnen, in der es sich immer die zuletzt genutzte Farbe merkt. Und diese Variable gibst du bei AFarbe im Init() der THalbKugel an und erhöhst sie danach um 1. Dadurch enthält diese Variable im Hauptprogramm immer die nächste zu verwendene Farbe, die noch keine andere Halbkugel benutzt hat...
MfG
Muetze1
_________________ 49 63 68 68 61 62 65 6B 65 69 6E 65 41 68 6E 75 6E 67 21
|
|
Moony 
      
Beiträge: 97
Win XP
D7 Prof
|
Verfasst: So 15.05.05 22:35
ich muss doch nur den Constructor von der Oberklasse mit einem virtual versehen oder?
Ist jetzt AFarbe schon die Variabel die das Hauptprogramm bekommen hat?
Zitat: | Und diese Variable gibst du bei AFarbe im Init() der THalbKugel an und erhöhst sie danach um 1. |
das versteh ich nicht. Variable in AFarbe im Init() der HalbKugel angeben 
|
|
Muetze1
      
Beiträge: 346
|
Verfasst: Mo 16.05.05 00:55
Moin!
Moony hat folgendes geschrieben: | ich muss doch nur den Constructor von der Oberklasse mit einem virtual versehen oder? |
Nein, mach es lieber nicht. Nimm einfach das Virtual in der Oberklasse raus und die Fehlermeldung sollte damit dann auch erledigt sein.
Moony hat folgendes geschrieben: | Ist jetzt AFarbe schon die Variabel die das Hauptprogramm bekommen hat? |
Nein - das ist nur ein Parameter. Wie du die Variable in deinem Hauptprogramm nennst ist relativ egal - von mir aus auch "Schweinchen". Du musst nur "Schweinchen" beim Init() mit angeben.
Moony hat folgendes geschrieben: | Zitat: | Und diese Variable gibst du bei AFarbe im Init() der THalbKugel an und erhöhst sie danach um 1. |
das versteh ich nicht. Variable in AFarbe im Init() der HalbKugel angeben  |
Schau dir mal meinen Beitrag zuvor an, wo ich Quellcodes gepostet habe. Wie du da siehst habe ich ganz hinten an die Parameterliste vom Init noch ein "Const AFarbe: Integer" mit angehängt. Wenn du nun THalbKugel.Init() in deinem Hauptprogramm aufrufst, dann gibst du die ersten Parameter wie gewohnt an und der letzte, neue Parameter gibst du nun die Variable aus deinem Hauptprogramm -> "Schweinchen". Das meinte ich damit...
MfG
Muetze1
_________________ 49 63 68 68 61 62 65 6B 65 69 6E 65 41 68 6E 75 6E 67 21
|
|
Moony 
      
Beiträge: 97
Win XP
D7 Prof
|
Verfasst: Mo 16.05.05 01:26
Hab die Nase voll!!
So das ist die complette Unit der Unterklasse und der betreffende Ausschnitt aus der Oberklasse
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:
| unit mTHalbeKugel; interface uses mSuM, mTTisch, mTKugel;
type THalbeKugel = CLASS (TKugel) public zFarbe : integer; constructor init (pPosX, pPosY, pRadius, pRichtung, pGeschwindigkeit : double; Const AFarbe : Integer; SchweinchenBabe : integer); override; procedure zeichneDich ( ); override; end;
implementation constructor THalbeKugel.init (pPosX, pPosY, pRadius, pRichtung, pGeschwindigkeit : double; Const AFarbe : Integer; SchweinchenBabe : integer); begin inherited init (pPosX, pPosY, pRadius, pRichtung, pGeschwindigkeit); zFarbe := AFarbe + 1; hatBuntstift.setzeFarbe (zFarbe); hatBuntstift.runter; end;
procedure THalbeKugel.zeichneDich ( ); begin inherited zeichneDich; hatBuntstift.setzeFuellMuster(1); hatBuntstift.zeichneKreis (zRadius-6); hatBuntstift.setzeFuellMuster (0); end; end. |
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:
| var derBildschirm : Bildschirm; hatBuntstift : Buntstift; dieTastatur : Tastatur; dieMaus : Maus; dieUhr : Uhr; derTisch : TTisch; AnzKugeln : integer; TrueKugeln : integer; SchweinchenBabe : integer;Kugeln : array [1..13] of TKugel;
begin derBildschirm := Bildschirm.init; hatBuntstift := Buntstift.init; dieTastatur := Tastatur.init; dieMaus := Maus.init; dieUhr := Uhr.init; derTisch := TTisch.init (200, 200, 800, 500); AnzKugeln := 1;
derTisch.zeichneDich; repeat if (dieTastatur.wurdeGedrueckt) then begin case (dieTastatur.zeichen) of 'f' : begin if (AnzKugeln <= 13) then begin Kugeln [AnzKugeln] := THalbeKugel.init (400, 400, 15, 140, 0.05); Kugeln [AnzKugeln].merke (derTisch); SchweinchenBabe := AFarbe; Kugeln [AnzKugeln].zeichneDich; AnzKugeln := AnzKugeln+1; end; end; |
virtual muss übrigens stehen bleiben, weil ich noch 7(?) andere Kugeln habe und manche den Constructor auch überschreiben wollen.
|
|
Moony 
      
Beiträge: 97
Win XP
D7 Prof
|
Verfasst: Mo 16.05.05 01:30
Und jetzt noch mal eine extra Nachicht für folgendes
DANKESCHÖN das du meine nervigen noobigen Posts überhaupt noch aushälst
DANKESCHÖN das du geduldig versuchst mir die Materie näher zu bringen
DANKESCHÖN DANKESCHÖN DANKESCHÖN DANKESCHÖN DANKESCHÖN DANKESCHÖN DANKESCHÖN
|
|
Muetze1
      
Beiträge: 346
|
Verfasst: Mo 16.05.05 01:40
Moin!
Moony hat folgendes geschrieben: | Hab die Nase voll!! |
Jetzt schon? Wird doch gerade erst lustig...
Moony hat folgendes geschrieben: | So das ist die complette Unit der Unterklasse und der betreffende Ausschnitt aus der Oberklasse |
An der mTHalbKugel.pas habe ich nix dran auszusetzen, aber an dem HauptUnit Ausschnitt. Hier die von mir veränderte Version:
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:
| var derBildschirm : Bildschirm; hatBuntstift : Buntstift; dieTastatur : Tastatur; dieMaus : Maus; dieUhr : Uhr; derTisch : TTisch; AnzKugeln : integer; TrueKugeln : integer; SchweinchenBabe : integer; Kugeln : array [1..13] of TKugel;
begin derBildschirm := Bildschirm.init; hatBuntstift := Buntstift.init; dieTastatur := Tastatur.init; dieMaus := Maus.init; dieUhr := Uhr.init; derTisch := TTisch.init (200, 200, 800, 500); AnzKugeln := 1; SchweinchenBabe := 1; derTisch.zeichneDich; repeat if (dieTastatur.wurdeGedrueckt) then begin case (dieTastatur.zeichen) of 'f' : begin if (AnzKugeln <= 13) then begin Kugeln [AnzKugeln] := THalbeKugel.init (400, 400, 15, 140, 0.05, SchweinchenBabe); Kugeln [AnzKugeln].merke (derTisch); Kugeln [AnzKugeln].zeichneDich; AnzKugeln := AnzKugeln+1; SchweinchenBabe := SchweinchenBabe + 1; end; end; |
Moony hat folgendes geschrieben: | virtual muss übrigens stehen bleiben, weil ich noch 7(?) andere Kugeln habe und manche den Constructor auch überschreiben wollen. |
Ist klar das die dann rum meckern - einfach das Virtual; in der Hauptklasse rausnehmen und das Override bei allen Ableitungen - also bei den 7 anderen ...
MfG
Muetze1
_________________ 49 63 68 68 61 62 65 6B 65 69 6E 65 41 68 6E 75 6E 67 21
|
|
Moony 
      
Beiträge: 97
Win XP
D7 Prof
|
Verfasst: Mo 16.05.05 01:48
na so ganz lag ich dann doch nicht daneben *lach*
So es klappt, fast. Also bisher ist noch nicht der Fehler mit der staatischen Methode aufgetreten, aber er sagt
Zitat: | [Fehler] Billard.dpr(69): Nicht genügend wirkliche Parameter |
in der Zeile wo ich die THalbe.init (aksdjflsd) im Hauptprogrmam aufrufe
|
|
Muetze1
      
Beiträge: 346
|
Verfasst: Mo 16.05.05 01:51
Moin!
Moony hat folgendes geschrieben: | Also bisher ist noch nicht der Fehler mit der staatischen Methode aufgetreten, aber er sagt
Zitat: | [Fehler] Billard.dpr(69): Nicht genügend wirkliche Parameter | in der Zeile wo ich die THalbe.init (aksdjflsd) im Hauptprogrmam aufrufe |
Ok, den Staat lassen wir mal da raus - die statische Methode also...
Ok, dann poste hier mal bitte die Zeile 69 der Billard.dpr und die Deklaration von THalbe - also am besten nur die Klassendefinition im oberen Teil der Unit.
MfG
Muetze1
_________________ 49 63 68 68 61 62 65 6B 65 69 6E 65 41 68 6E 75 6E 67 21
|
|