Autor Beitrag
Moony
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 97

Win XP
D7 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 97

Win XP
D7 Prof
BeitragVerfasst: 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 :party:) 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: So 15.05.05 13:54 
Nur mal als Anregung :

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 97

Win XP
D7 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 97

Win XP
D7 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 34

WinXP Pro, Win 2k3 ServEnt
D2k5 PE, VS 2005
BeitragVerfasst: So 15.05.05 18:40 
Gibt es in Delphi keine statischen, also Klassenvariablen?
Damit wäre das sehr einfach!
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: So 15.05.05 18:46 
user profile iconMoony 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. :mrgreen: Sollten es Forms sein, dann geht mein Bsp. 1:1.

_________________
Gruß
Hansa
Moony Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 97

Win XP
D7 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



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

user profile iconMoony hat folgendes geschrieben:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 97

Win XP
D7 Prof
BeitragVerfasst: So 15.05.05 20:55 
:flehan: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: So 15.05.05 21:46 
Moin!

user profile iconMoony 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.

user profile iconMoony 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 97

Win XP
D7 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Mo 16.05.05 00:55 
Moin!

user profile iconMoony 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.

user profile iconMoony 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.

user profile iconMoony 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 97

Win XP
D7 Prof
BeitragVerfasst: 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

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




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:
var
  derBildschirm : Bildschirm; hatBuntstift : Buntstift; dieTastatur : Tastatur; dieMaus : Maus; dieUhr : Uhr; derTisch : TTisch; AnzKugeln : integer; TrueKugeln : integer; SchweinchenBabe : integer;Kugeln : array [1..13of TKugel;

begin
  derBildschirm := Bildschirm.init;
  hatBuntstift := Buntstift.init;
  dieTastatur := Tastatur.init;
  dieMaus := Maus.init;
  dieUhr := Uhr.init;
  derTisch := TTisch.init (200200800500);
  AnzKugeln := 1;

  derTisch.zeichneDich;
  repeat
    if (dieTastatur.wurdeGedrueckt) then begin
      case (dieTastatur.zeichen) of
        'f' : begin
                if (AnzKugeln <= 13then
                  begin
                    Kugeln [AnzKugeln] := THalbeKugel.init (400400151400.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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 97

Win XP
D7 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Mo 16.05.05 01:40 
Moin!

user profile iconMoony hat folgendes geschrieben:
Hab die Nase voll!!


Jetzt schon? Wird doch gerade erst lustig... :roll:

user profile iconMoony 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:

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:
35:
36:
var
  derBildschirm : Bildschirm; 
  hatBuntstift : Buntstift; 
  dieTastatur : Tastatur; 
  dieMaus : Maus; 
  dieUhr : Uhr; 
  derTisch : TTisch; 
  AnzKugeln : integer; 
  TrueKugeln : integer; 
  SchweinchenBabe : integer;     // Farbe der nächsten THalbKugel...
  Kugeln : array [1..13of TKugel;

begin
  derBildschirm := Bildschirm.init;
  hatBuntstift := Buntstift.init;
  dieTastatur := Tastatur.init;
  dieMaus := Maus.init;
  dieUhr := Uhr.init;
  derTisch := TTisch.init (200200800500);
  AnzKugeln := 1;
  SchweinchenBabe := 1// die Farbe der aller ersten THalbKugel...

  derTisch.zeichneDich;
  repeat
    if (dieTastatur.wurdeGedrueckt) then begin
      case (dieTastatur.zeichen) of
        'f' : begin
                if (AnzKugeln <= 13then
                  begin
                    Kugeln [AnzKugeln] := THalbeKugel.init (400400151400.05, SchweinchenBabe);
                    Kugeln [AnzKugeln].merke (derTisch);
                    Kugeln [AnzKugeln].zeichneDich;
                    AnzKugeln := AnzKugeln+1;
                    SchweinchenBabe := SchweinchenBabe + 1;
                end;
              end;


user profile iconMoony 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 97

Win XP
D7 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Mo 16.05.05 01:51 
Moin!

user profile iconMoony 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... :wink:

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