Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi OOP - Neuling braucht ein bisschen Hilfe (https://www.delphipraxis.net/151521-oop-neuling-braucht-ein-bisschen-hilfe.html)

Liam 21. Mai 2010 09:14


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:
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.
MfG & Danke schonmal im Vorraus
Liam

AnyKey 21. Mai 2010 09:24

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:
if RadioButton1.Checked then
begin
  // tue was
end;
das sollte dich erst mal weiter bringen.

Aso an den Text aus den RadioButtons kommst du dann so ran:

Delphi-Quellcode:
RadioButton1.Caption

dominikkv 21. Mai 2010 09:35

Re: OOP - Neuling braucht ein bisschen Hilfe
 
Hallo Liam,

Herzlich Willkommen in der DP! :party:

Delphi-Quellcode:
Auto:= TFahrzeug.create(Edit1.text, Radiogroup1.itemindex=0);
Der Fehler werden wohl hier kommen. Radiogroup1.itemindex=0 ist ein Boolean! TFahrzeug.create erwartet aber einen String als 2ten Parameter.

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!

Liam 21. Mai 2010 20:07

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:
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;
Da ich nicht mehr wusste, wie man eine Case-Anweisung schreibt, hab ich mal im Internet geschaut und unter anderem folgendes gefunden:

Delphi-Quellcode:
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
Bei diesem Beispiel ist es ja auch nicht anders geschrieben als wie bei mir.

Namenloser 21. Mai 2010 20:19

Re: OOP - Neuling braucht ein bisschen Hilfe
 
Zitat:

Zitat von Liam
Bei diesem Beispiel ist es ja auch nicht anders geschrieben als wie bei mir.

Öhm... doch. Schau doch mal genau hin. Deine Syntax bim Case-Statement ist eine völlig andere.

Wolfgang Mix 21. Mai 2010 20:23

Re: OOP - Neuling braucht ein bisschen Hilfe
 
Statt
Delphi-Quellcode:
case Bezeichnerwahl of
   Radiogroup1.itemindex=0 :
    begin
versuche einmal
Delphi-Quellcode:
case Bezeichnerwahl of
   Radiogroup1.itemindex=StrToInt('0') :
    begin
Gruss

Wolfgang

himitsu 21. Mai 2010 20:24

Re: OOP - Neuling braucht ein bisschen Hilfe
 
Zitat:

Zitat von NamenLozer
Öhm... doch. Schau doch mal genau hin. Deine Syntax bim Case-Statement ist eine völlig andere.

So als Tipp: "Note" entspricht deinem "Radiogroup1.itemindex"

Liam 21. Mai 2010 20:36

Re: OOP - Neuling braucht ein bisschen Hilfe
 
Zitat:

Zitat von Wolfgang Mix
Statt
Delphi-Quellcode:
case Bezeichnerwahl of
   Radiogroup1.itemindex=0 :
    begin
versuche einmal
Delphi-Quellcode:
case Bezeichnerwahl of
   Radiogroup1.itemindex=StrToInt('0') :
    begin
Gruss

Wolfgang


Leider funtkioniert das auch nicht. Selber fehler.

soulies 21. Mai 2010 20:47

Re: OOP - Neuling braucht ein bisschen Hilfe
 
hoi,

mal als Bsp.

Delphi-Quellcode:
case Boolean of
  True: ...
  False:...
end;

oder

case Zahl of
  0:
  1:
  2:
end;
in deiner Case anweisung hast du zwar eine Boolean Var verwendet (Bezeichnerwahl) aber das ist nicht das was du
eigentlich prüfen willst (--> ItemIndex).

Die einzelnen Zustände (True/False ; 0/1/2 ; etc) kannst du dann direkt hinschreiben.

cya

Klaus01 21. Mai 2010 20:49

Re: OOP - Neuling braucht ein bisschen Hilfe
 
.. wenn alle Tips nicht helfen:

Delphi-Quellcode:
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;
denn es ist der ItemIndex der sich ändert wenn
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 15:08 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz