![]() |
OOP - Neuling braucht ein bisschen Hilfe
Hiho,
ich hab noch nicht lange OOP und ich brüte grade über einer Aufgabe und komme nicht weiter. Ich hab eine Radiogroup mit 4 EInträgen (wovon ich jewals immer den Titel wieder ausgeben will, z.B. Verbrennungsmotor) Allerdings kommen (im Moment) 2 Fehlermeldungen: Nicht genügent wirkliche Parameter und Inkompatible Typen. Wie geb ich den Klassennahmn in der Memo aus? Und Hier muss auch noch eine Unit dazu, wo Alternativfahrzeuge (Elektro, Wasserstoff) definiert werden (soweit bin ich aber noch nicht).
Delphi-Quellcode:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, unit2, unit3; type TForm1 = class(TForm) RadioGroup1: TRadioGroup; Memo1: TMemo; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; Auto: TFahrzeug; M_Leistung: string; M_Bezeichnung: boolean; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin if RadioGroup1.itemindex=0 then Auto:= TFahrzeug.create(Edit1.text, Radiogroup1.itemindex=0); {If RadioGroup1.itemindex=1 then Auto := TAlternativfahrzeug.create(Edit1.text, Edit3.text);} If Radiogroup1.itemindex=2 then Auto:= THybridfahrzeug.create (Edit1.text, Edit2.text); {If RadioGroup1.ItemIndex=3 then Auto := TAlternativfahrzeug.create (Edit1.text, Edit3.text);} //memo1.lines.add:=M_Leistung; end; end.
Delphi-Quellcode:
unit Unit2;
//Fahrzeug allgemein interface uses sysutils; Type TFahrzeug = class (TObject) private public constructor create (M_Bezeichnung: string; M_Leistung: string); function getleistung: string; //function getMotorBezeichnung: string; //function getreichweite: integer; virtual; abstract; end; var Bezeichnung: string; Leistung: string; M_Leistung, M_Bezeichnung: string; implementation constructor TFahrzeug.create (M_Bezeichnung: string; M_Leistung: string); begin M_Bezeichnung :=Bezeichnung ; M_Leistung :=Leistung ; end; function TFahrzeug.getleistung: string; begin result := M_Leistung ; end; end.
Delphi-Quellcode:
MfG & Danke schonmal im Vorraus
unit Unit3;
//Fahrzeug Hybrid interface uses sysutils, unit2; Type THybridfahrzeug = class (TFahrzeug) private public constructor create (M_Bezeichnung: string; M_Leistung, E_M_Leistung: string); //function getleistung: string; virtual; //function getMotorBezeichnung: string; //function getreichweite: string; virtual; abstract; end; var Bezeichnung: string; Leistung, Zusatzleistung:string; M_Leistung: string; implementation constructor THybridfahrzeug.create (M_Bezeichnung: string; M_Leistung,E_M_Leistung: string); begin inherited create (Bezeichnung, Leistung); E_M_Leistung := Zusatzleistung; end; end. Liam |
Re: OOP - Neuling braucht ein bisschen Hilfe
Ich würde mal behaupten du solltest dir in deine RadioGroup auch ein paar RadioButtons einbauen und dann prüfen welches gesetzt ist in etwa so:
Delphi-Quellcode:
das sollte dich erst mal weiter bringen.
if RadioButton1.Checked then
begin // tue was end; Aso an den Text aus den RadioButtons kommst du dann so ran:
Delphi-Quellcode:
RadioButton1.Caption
|
Re: OOP - Neuling braucht ein bisschen Hilfe
Hallo Liam,
Herzlich Willkommen in der DP! :party:
Delphi-Quellcode:
Der Fehler werden wohl hier kommen. Radiogroup1.itemindex=0 ist ein Boolean! TFahrzeug.create erwartet aber einen String als 2ten Parameter.
Auto:= TFahrzeug.create(Edit1.text, Radiogroup1.itemindex=0);
Ich würde weiterhin a) Die Komponenten auf der Form (Edit1, Edit2 etc) richtig benennen b) Konsequent einrücken c) Anstatt if ItemIndex=1 if ItemIndex=2 if ItemIndex=3 etc ein Case-Construct nehmen @AnyKey: Bitte nicht auf = True prüfen! |
Re: OOP - Neuling braucht ein bisschen Hilfe
Danke für eure Hilfe ihr beiden. Ich hab die If-Anweisungen mal in eine Case gepackt, und jetzt hab ich auch kein Problem mehr mit inkompatiblen Typen. Allerdings kommt jetzt folgende Meldung:
"Konstantenausruck erwartet"
Delphi-Quellcode:
Da ich nicht mehr wusste, wie man eine Case-Anweisung schreibt, hab ich mal im Internet geschaut und unter anderem folgendes gefunden:
var
Form1: TForm1; Auto: TFahrzeug; M_Leistung: string; M_Bezeichnung: string; Bezeichnerwahl: boolean; procedure TForm1.AnlegenClick(Sender: TObject); begin case Bezeichnerwahl of Radiogroup1.itemindex=0 : begin M_Bezeichnung:= 'Verbrennungsmotor'; end; Radiogroup1.itemindex=1 : begin M_Bezeichnung:= 'Elektromotor'; end; Radiogroup1.itemindex=2 : begin M_Bezeichnung:= 'Hybridantrieb'; end; Radiogroup1.itemindex=3 : begin M_Bezeichnung:= 'Wasserstoffantrieb'; end; end;
Delphi-Quellcode:
Bei diesem Beispiel ist es ja auch nicht anders geschrieben als wie bei mir.
var Note: Integer;
Wertung: String; CASE Note OF 1 : Wertung := 'Sehr gut'; 2 : Wertung := 'Gut'; 3 : Wertung := 'Befriedigend'; 4 : Wertung := 'Ausreichend'; 5 : Wertung := 'Mangelhaft'; 6 : Wertung := 'Ungenügend'; ELSE Wertung := 'Diesen Notenwert gibt es nicht.'; END; //von CASE |
Re: OOP - Neuling braucht ein bisschen Hilfe
Zitat:
|
Re: OOP - Neuling braucht ein bisschen Hilfe
Statt
Delphi-Quellcode:
versuche einmal
case Bezeichnerwahl of
Radiogroup1.itemindex=0 : begin
Delphi-Quellcode:
Gruss
case Bezeichnerwahl of
Radiogroup1.itemindex=StrToInt('0') : begin Wolfgang |
Re: OOP - Neuling braucht ein bisschen Hilfe
Zitat:
|
Re: OOP - Neuling braucht ein bisschen Hilfe
Zitat:
Leider funtkioniert das auch nicht. Selber fehler. |
Re: OOP - Neuling braucht ein bisschen Hilfe
hoi,
mal als Bsp.
Delphi-Quellcode:
in deiner Case anweisung hast du zwar eine Boolean Var verwendet (Bezeichnerwahl) aber das ist nicht das was du
case Boolean of
True: ... False:... end; oder case Zahl of 0: 1: 2: end; eigentlich prüfen willst (--> ItemIndex). Die einzelnen Zustände (True/False ; 0/1/2 ; etc) kannst du dann direkt hinschreiben. cya |
Re: OOP - Neuling braucht ein bisschen Hilfe
.. wenn alle Tips nicht helfen:
Delphi-Quellcode:
denn es ist der ItemIndex der sich ändert wenn
procedure TForm1.AnlegenClick(Sender: TObject);
begin case RadioGroup1.itemIndex of 0 : begin M_Bezeichnung:= 'Verbrennungsmotor'; end; 1 : begin M_Bezeichnung:= 'Elektromotor'; end; 2 : begin M_Bezeichnung:= 'Hybridantrieb'; end; 3 : begin M_Bezeichnung:= 'Wasserstoffantrieb'; end; end; du einen RadioButton der RadioGroup anklickst. OT: was hat das mit OOP zu tun Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz