|
Registriert seit: 27. Nov 2005 Ort: Mettmann 38 Beiträge |
#1
Hallo mal wieder! Ich bräuchte mal ein wenig Hilfe bei der Klassenprogrammierung. Und zwar geht es um folgendes:
Ich werde versuchen, das Problem so gut wie möglich zu schildern. Es gibt 3 Units : Ein Hauptformular, in dem man auf das Formular klickt und man ein Objekt dynamisch erzeugt. Eine Unit, in der eine Klasse drinne ist. Eine Optionsformular, in dem man die Startparameter einstellen kann. Soweit so gut... Hier mal die Klassenunit :
Delphi-Quellcode:
Hier mein Hauptformular :type TKugel = class(TShape) // Klasse, welche von TShape abgeleitet ist constructor Create(AOwner: TWinControl; AZahl : Integer; AColor : TColor; XPos : Integer); private // Klassenattribute FKugel_X_Weg : Integer; FKugel_Y_Weg : Integer; FKugel_X_Pos : Integer; FKugel_Y_Pos : Integer; FKugel_Geschwindigkeit : Integer; FKugel_Breite : Integer; FKugel_Hoehe : Integer; FKugel_Farbe : TColor; FKugel_Typ : TShapeType; public // Methoden, mit denen die Klassenattribute verändert werden können // Über diese Prozeduren können die Shape - Attributfelder modifiziert werden procedure Setze_X_Weg ( X_Weg : Integer ); procedure Setze_Y_Weg ( Y_Weg : Integer ); procedure Setze_X_Pos ( X_Pos : Integer ); procedure Setze_Y_Pos ( Y_Pos : Integer ); procedure Setze_Geschwindigkeit ( Geschwindigkeit : Integer); procedure Setze_Breite ( Breite : Integer); procedure Setze_Hoehe ( Hoehe : Integer); procedure Setze_Farbe ( Farbe : TColor); procedure Setze_Shapetype ( Shapetyp : TShapetype); // Lese die Eigenschaften eines Kugelobjektes aus function Lese_X_Weg () : Integer; function Lese_Y_Weg () : Integer; function Lese_X_Pos () : Integer; function Lese_Y_Pos () : Integer; function Lese_Geschwindigkeit () : Integer; function Lese_Breite () : Integer; function Lese_Hoehe () : Integer; function Lese_Farbe () : Integer; function Lese_Shapetpy () : TShapetype; end; implementation uses Kugel_optionen; {******************************************************************************* *******************************************************************************} constructor TKugel.Create(AOwner: TWinControl; AZahl : Integer; AColor : TColor; XPos : Integer); begin inherited create(AOwner); // Konstruktor von der Basisklasse TWinControl ableiten Shape := stCircle; // Geometrische Form zuweisem Brush.Color := AColor; // Farbe der Kugel bestimmen Name := 'Kugel' + InttoStr(AZahl); // Name der Kugel zuweisen Parent := AOwner; // Parent zuweisen ( Beim Aufruf das Formular ) Visible := True; // Sichtbar Top := 10; Left := 10; Width := 10; Height := 10; end; {******************************************************************************* *******************************************************************************} function TKugel.Lese_Breite: Integer; begin result := FKugel_Breite; end; {******************************************************************************* *******************************************************************************} function TKugel.Lese_Farbe: Integer; begin result := FKugel_Farbe; end; {******************************************************************************* *******************************************************************************} function TKugel.Lese_Geschwindigkeit: Integer; begin Result := FKugel_Geschwindigkeit; end; {******************************************************************************* *******************************************************************************} function TKugel.Lese_Hoehe: Integer; begin result := FKugel_Hoehe; end; {******************************************************************************* *******************************************************************************} function TKugel.Lese_Shapetpy: TShapetype; begin result := FKugel_Typ; end; {******************************************************************************* *******************************************************************************} function TKugel.Lese_X_Pos: Integer; begin Result := FKugel_X_Pos; end; {******************************************************************************* *******************************************************************************} function TKugel.Lese_X_Weg: Integer; begin Result := FKugel_X_Weg; end; {******************************************************************************* *******************************************************************************} function TKugel.Lese_Y_Pos: Integer; begin Result := FKugel_Y_Pos; end; {******************************************************************************* *******************************************************************************} function TKugel.Lese_Y_Weg: Integer; begin result := FKugel_Y_Weg; end; {******************************************************************************* *******************************************************************************} procedure TKugel.Setze_Breite(Breite: Integer); begin FKugel_Breite := Breite; end; {******************************************************************************* *******************************************************************************} procedure TKugel.Setze_Farbe(Farbe: TColor); begin FKugel_Farbe := Farbe; end; {******************************************************************************* *******************************************************************************} procedure TKugel.Setze_Geschwindigkeit(Geschwindigkeit: Integer); begin FKugel_Geschwindigkeit := Geschwindigkeit; end; {******************************************************************************* *******************************************************************************} procedure TKugel.Setze_Hoehe(Hoehe: Integer); begin FKugel_Hoehe := Hoehe; end; {******************************************************************************* *******************************************************************************} procedure TKugel.Setze_Shapetype(Shapetyp: TShapetype); begin FKugel_Typ := Shapetyp; end; {******************************************************************************* *******************************************************************************} procedure TKugel.Setze_X_Pos(X_Pos: Integer); begin FKugel_X_Pos := X_Pos; end; {******************************************************************************* *******************************************************************************} procedure TKugel.Setze_X_Weg(X_Weg : Integer); begin FKugel_X_Weg := X_Weg; end; {******************************************************************************* *******************************************************************************} procedure TKugel.Setze_Y_Pos(Y_Pos : Integer); begin FKugel_Y_Pos := Y_Pos; end; {******************************************************************************* *******************************************************************************} procedure TKugel.Setze_Y_Weg(Y_Weg : Integer); begin FKugel_Y_Weg := Y_Weg; end; {******************************************************************************* *******************************************************************************} end.
Delphi-Quellcode:
Nun zu meinem Problem : Wie kann ich nun bei der Erzeugung des Objektes direkte Werte zuweisen?{******************************************************************************* *******************************************************************************} Var KugelZahl : Integer = 1; // Kugelzahl setzen // AKugel : TKugel; // Klasseninstanz deklarieren {******************************************************************************* *******************************************************************************} procedure TfrmMain.FormClick(Sender: TObject); begin AKugel := TKugel.Create(frmMain,Kugelzahl,clRed,50); // Bei Klick Objekt erzeugen Kugelzahl := Kugelzahl + 1; // Kugelanzahl erhöhen frmMain.Caption := 'Aktuelle Kugelzahl : ' + IntToStr(KugelZahl-1); with frmOptionen do begin cbKugelnummer.Enabled := True; // Kugelselektionsfeld aktivieren cbKugelnummer.Items.Add(IntToStr(Kugelzahl-1)); // Kugelanzahl in die Combobox hinzufügen cbKugelnummer.ItemIndex := cbKugelnummer.Itemindex + 1; // Zähler der Combobox erhöhen end; end; {******************************************************************************* *******************************************************************************} procedure TfrmMain.Timer1Timer(Sender: TObject); Var i : Integer; begin For i:=1 to KugelZahl-1 Do Begin AKugel := FindComponent ('Kugel' + IntToStr (i)) as TKugel; // Nach allen Kugelobjekten auf dem Formular suchen AKugel.Left := AKugel.Left + 40; // Die Kugel bewegen End; end; {******************************************************************************* *******************************************************************************} procedure TfrmMain.Optionen1Click(Sender: TObject); begin if frmOptionen.Visible = true then frmOptionen.Visible := false else frmOptionen.Show; end; {******************************************************************************* *******************************************************************************} procedure TfrmMain.FormShow(Sender: TObject); begin frmMain.Caption := 'Aktuelle Kugelzahl : ' + IntToStr(KugelZahl-1); frmOptionen.Show; with frmOptionen do // Werte beim Start in die Editfelder eintragen begin edtTimerIntervall.Text := '150'; edtHoehe.Text := '20'; edtBreite.Text := '20'; edtXStartpos.Text := '10'; edtYStartpos.Text := '10'; edtXWeg.Text := '10'; edtYWeg.Text := '10'; edtGeschwindigkeit.Text := '10'; cbKugelnummer.Enabled := False; end; end; {******************************************************************************* *******************************************************************************} procedure TfrmMain.Beende1Click(Sender: TObject); begin if MessageDlg('Wollen sie das Programm beenden?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then Close; end; {******************************************************************************* *******************************************************************************} procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction); var i : Integer; begin // Über FindComponent iterieren Action := caFree; // Speicher für das Formular freigeben // Speicher Freigabe für die Instanzen noch durchführen end; {******************************************************************************* *******************************************************************************} 1.) 10 Parameter im Konstruktor ? Das scheint mir nicht sehr sinnvoll zu sein. 2.) Ich kann auch nicht auf die Klasseninstanz zugreifen, wenn diese noch nicht erzeugt worden ist. Deshalb habe ich auch keine Chance nach meinem Kenntnisstand vorher die Parameter zu modifizieren. Meine Prozeduren scheinen also komplett nutzlos zu sein. Oder denke ich nur zu kompliziert? Ich hoffe mir kann irgendjemand helfen, ich brauche ein wenig Unterstützung in Sachen Logik. Vielleicht ist dieser Ansatz auch falsch. Ich kann natürlich auch mit 10 Konstruktorparametern die Objekt erzeugen, aber es gibt mit Sicherheit noch einen anderen Weg. Vielen Dank an alle Leute, die mir mit diesem Problem weiterhelfen können. Für Experten ist dies mit Sicherheit einfach zu lösen. Gruß Matthias |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |