Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Deklaration eines Property
Karl1997 - Do 09.02.12 13:15
Titel: Deklaration eines Property
Moderiert von
Martok: Abgetrennt von [url=http://www.delphi-forum.de/viewtopic.php?p=658651]hier[/url]
danke klappt. jetzt gleich das zweite problem in der übung. wieso geht das nicht? als fehlermeldung kommt inkompatible typen
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| type TTestbmp = class(TBitmap) private function sc(p: Integer): TBitmap; public property Scale: TBitmap read sc; |
das ist fast so wie in der übung, nur da ist es string und nicht bitmap. der zeiger bleibt hinter read sc; stehen
Moderiert von
Martok: Delphi-Tags hinzugefügt
René R.Fo. - Do 09.02.12 15:42
Karl1997
Für jedes Thema eine Frage...
PS: read muss soweit ich das noch weiß eine feste Var sein...(kann ich aber nett genau sagen)
Grüße René
Karl1997 - Do 09.02.12 16:39
Bei write gibt es die gleichen Probleme
Das funktioniert
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:
| type TTestKlasse = class private FZugriffe: Integer; FText: string; procedure SetzeString(Neu: string); public property SchreibZugriffe: Integer read FZugriffe; property Text: string read FText write SetzeString; end;
procedure TTestKlasse.SetzeString(Neu: string); begin FText := Neu; Inc(FZugriffe); end;
var TestKlasse: TTestKlasse;
procedure TForm1.Button1Click(Sender: TObject); begin TestKlasse := TTestKlasse.Create; with TestKlasse do begin Text := 'Hallo!'; ShowMessage(IntToStr(SchreibZugriffe) + ', ' + Text); Text := 'Und auf Wiedersehen!'; ShowMessage(IntToStr(SchreibZugriffe) + ', ' + Text); end; TestKlasse.Free; end; |
und das nicht
Delphi-Quelltext
1: 2: 3: 4: 5:
| private Fb: TBitmap; procedure sc(p: Integer); public property Scale: TBitmap read Fb write sc; |
SvenAbeln - Do 09.02.12 17:52
Fällt dir was auf?
Delphi-Quelltext
1: 2: 3: 4: 5:
| private Fb: TBitmap; procedure sc(p: Integer); public property Scale: TBitmap read Fb write sc; |
Du willst ein TBitmap lesen aber einen Integer schreiben.
Karl1997 - Do 09.02.12 22:09
Das klingt logisch und klappt jetzt auch. Nur mal prüfen ob ich das richtig kapiert habe... ist das so, dass man bei property bei read und write keine zusätzlichen Parameter mitgeschickt kann, immer nur passend? Wenn ich dem jetzt sagen will, dass ich ein 70% Bild haben will, muss ich den Umweg über einen weiteren prozent property machen? Wenn das so ist, dann habe ich das kapiert. Wie geht das aber bei sowas wie AddObject. Die haben zwei Parameter.
Moderiert von
Narses: Beiträge zusammengefasstIch glaube der Groschen ist gefallen... bei AddObject wird nur etwas übergeben und dazu reicht eine Prozedur. Obwohl das auch eine Eigenschaft ist, aber kein property, das wiederum Eigenschaft bedeutet. Ist noch alles etwas verwirrend.
Martok - Fr 10.02.12 04:00
René R.Fo. hat folgendes geschrieben : |
| Für jedes Thema eine Frage... |
Deswegen abgetrennt. Bitte in Zukunft beachten! :zwinker:
Karl1997 hat folgendes geschrieben : |
| Ich glaube der Groschen ist gefallen... bei AddObject wird nur etwas übergeben und dazu reicht eine Prozedur. Obwohl das auch eine Eigenschaft ist, aber kein property, das wiederum Eigenschaft bedeutet. Ist noch alles etwas verwirrend. |
Nicht ganz: eine Prozedur eines Objekts ist eine Methode. Eine Eigenschaft ist ein Property ist eine Eigenschaft, das stimmt ;)
Grundsätzlich also: wenn etwas passieren soll, brauchst du eine Methode (
procedure oder
function je nachdem, ob du einen Rückgabewert brauchst). Geht es um Eigenschaften, ist ein Property gefragt.
Wenn du z.B. deine TestKlasse von weiter oben um etwas erweitern möchtest, mit dem sie sich selbst ausgeben kann, dann ist das eine Methode:
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:
| type TTestKlasse = class private public procedure InfoPopup; end;
procedure TTestKlasse.InfoPopup; begin ShowMessageFmt('Inhalte: %s, Geschrieben %d mal',[FText, FZugriffe]); end;
var TestKlasse: TTestKlasse;
procedure TForm1.Button1Click(Sender: TObject); begin TestKlasse := TTestKlasse.Create; try TestKlasse.Text := 'Hallo!'; TestKlasse.InfoPopup; TestKlasse.Text := 'Und auf Wiedersehen!'; TestKlasse.InfoPopup; finally TestKlasse.Free; end; end; |
Delphi hat zwar tatsächlich Möglichkeiten, wie man an einen Getter/Setter eines Properties noch zusätzliche Parameter übergeben kann. Aber die sind ganz und gar nicht dafür gedacht, Methoden zu ersetzten, sondern machen z.B. Sachen wie zeilenweisen Zugriff auf eine TStringList über die Eigenschaft Items oder TCanvas.Pixels möglich.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!