@All
Ich habe es jetzt so gemacht.
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 =
class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
TMeineDaten =
class(TObject)
private
fWert1 : Integer;
fWert2 : Integer;
FErgebnis: Integer;
FBerechnet: Boolean;
procedure SetWert1(
const Value: Integer);
procedure SetWert2(
const Value: Integer);
function GetErgebniss: Integer;
public
constructor create;
property Wert1 : Integer
read FWert1
write SetWert1;
property Wert2 : Integer
read FWert2
write SetWert2;
property Ergebnis : Integer
read GetErgebniss;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TMeineDaten }
procedure TMeineDaten.SetWert1(
const Value: Integer);
begin
if Value=5
then raise Exception.create('
Wert 5 wird nicht als Eingabe akzeptiert!');
FWert1 := Value;
FBerechnet := false;
end;
procedure TMeineDaten.SetWert2(
const Value: Integer);
begin
if Value=5
then raise Exception.create('
Wert 5 wird nicht als Eingabe akzeptiert!');
FWert2 := Value;
FBerechnet := false;
end;
constructor TMeineDaten.create;
begin
FBerechnet := false;
end;
function TMeineDaten.GetErgebniss: Integer;
begin
if not FBerechnet
then
begin
FErgebnis := fWert1 + fWert2;
FBerechnet := true;
end;
result := FErgebnis;
end;
procedure TForm1.Button1Click(Sender: TObject);
var test: TMeineDaten;
begin
test:=TMeineDaten.create;
test.Wert1:=strtoint(edit1.text);
test.Wert2:=strtoint(edit2.text);
label1.caption:=inttostr(test.ergebnis);
test.Free;
end;
end.
Erstmal die Frage ob das so
OOP Konform durchgeht? Und dann hätte ich da noch eine Frage zur Eingabe-Exeptionbehandlung. Was wäre
OOP Konform günstiger,
die Exeptionbehandlung in die Klasse zu integrieren (im Setter) oder wie hier gehabt in einer Controlprocedure der
VCL?
Ich hätte die Exeptionbehandlung numal gerne komplett in der Klasse. So wie ich es jetzt mache, kann ich jedoch im Setter nicht prüfen, ob ein leeres
Editfeld vorliegt. Delphi schmeist zwar eine Econvert Error Exeption wegen dem strtoint, jedoch hätte ich gerne eigene Exeptions und dann alle
Bedingungsabfragen in der Klasse. Dazu müsste ich ja dem Setter ein String übergeben, die strtoint Konvertierung ausführen und dann aber einen Integer schreiben. Wäre solch eine vorgehensweise überhaupt Sinnvoll? Wie könntedafür die property Deklaration aussehen? Bei allem was ich probiert habe,
beschwert sich Delphi wegen inkompatibler Typen.
mfG newbe